WEB开发网
开发学院数据库MSSQL Server 为SQLite制作Entity Framework 4.0中的DDL Genera... 阅读

为SQLite制作Entity Framework 4.0中的DDL Generation Template的T4模板

 2009-12-13 00:00:00 来源:WEB开发网   
核心提示:EF4开始支持Model First技术,即可以先设计数据实体模型,为SQLite制作Entity Framework 4.0中的DDL Generation Template的T4模板,然后生成具体的数据库结构,在VS2010 beta2中,普通的外键关系,默认值等情况都没问题,EF4默认支持生成MSSqlServe

EF4开始支持Model First技术,即可以先设计数据实体模型,然后生成具体的数据库结构。在VS2010 beta2中,

EF4默认支持生成MSSqlServer和SqlCE的DDL代码。对于希望定制化DDL输出或支持其他EF DB Provider的扩展需求,

MS就很乖巧的提供了t4模板给我们扩展。

为SQLite制作Entity Framework 4.0中的DDL Generation Template的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制作Entity Framework 4.0中的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或对模板的修改,都请不吝指教。  

本文示例源代码或素材下载

Tags:SQLite 制作 Entity

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接