为SQLite制作Entity Framework 4.0中的DDL Generation Template的T4模板
2009-12-13 00:00:00 来源:WEB开发网EF4开始支持Model First技术,即可以先设计数据实体模型,然后生成具体的数据库结构。在VS2010 beta2中,
EF4默认支持生成MSSqlServer和SqlCE的DDL代码。对于希望定制化DDL输出或支持其他EF DB Provider的扩展需求,
MS就很乖巧的提供了t4模板给我们扩展。
查看原图(大图)
我们可以在%Program Files%\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\DBGen
这个路径发现SSDLToSQL10.tt这个默认输出的模板。我就根据这份tt做蓝本,尝试按照SQLite的语法做了一份SSDLToSQLite3.tt的模板;
只要放到同一路径,我们就可以在EF的设计器的ConceptualEntityModel对象的DDL Generation Template的属性中选择各个t4模板。
查看原图(大图)
SQLite很早就有.NET的实现,SQLite.NET也很早就开始支持EF了。我感觉最方便的就是在EF中设计实体模型,可以立刻生成SQLite的结构,
可以快速建立程序和测试环境。
1
2 -- --------------------------------------------------
3 -- Date Created: 12/12/2009 20:58:49
4 -- compatible SQLite
5 -- Generated from EDMX file: F:\vs10\ssdlTest\WindowsFormsApplication5\Model1.edmx
6 -- --------------------------------------------------
7 -- Dropping existing tables
8 -- --------------------------------------------------
9
10
11 DROP TABLE if exists [ProductSet];
12
13 DROP TABLE if exists [OrderSet];
14
15 DROP TABLE if exists [AnimalSet];
16
17 -- --------------------------------------------------
18 -- Creating all tables
19 -- --------------------------------------------------
20
21 -- Creating table 'ProductSet'
22 CREATE TABLE [ProductSet] (
23 [ID] integer PRIMARY KEY AUTOINCREMENT NOT NULL ,
24 [Name] varchar(50) NOT NULL ,
25 [SinglePrice] decimal(18,2) NULL ,
26 [OrderId] integer NOT NULL
27
28 ,CONSTRAINT [FK_OrderProduct]
29 FOREIGN KEY ([OrderId])
30 REFERENCES [OrderSet] ([Id])
31
32 );
33
34 -- Creating table 'OrderSet'
35 CREATE TABLE [OrderSet] (
36 [Id] integer PRIMARY KEY AUTOINCREMENT NOT NULL ,
37 [Name] varchar(50) NOT NULL ,
38 [IsEnabled] boolean NOT NULL ,
39 [Description] varchar(200) NULL
40 );
41
42 -- Creating table 'AnimalSet'
43 CREATE TABLE [AnimalSet] (
44 [FirstName] char(20) NOT NULL ,
45 [SecondName] varchar(50) NOT NULL ,
46 [Height] decimal(26,5) DEFAULT '12.34' NOT NULL
47 , PRIMARY KEY ([FirstName], [SecondName])
48 );
49
50
51 -- --------------------------------------------------
52 -- Script has ended
53 -- --------------------------------------------------
初步测试了一下,普通的外键关系,默认值等情况都没问题。各位在使用过程中如果发现有bug或对模板的修改,都请不吝指教。
本文示例源代码或素材下载
赞助商链接