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

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

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

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

为SQLite制作Entity Framework 4.0中的DDL Generation Template的T4模板_第1张图片 

 

      我们可以在%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模板_第2张图片 

 

     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  --  --------------------------------------------------

 

 

 

 这是模板: /Files/timiil/SSDLToSQLite3.zip 

 

初步测试了一下,普通的外键关系,默认值等情况都没问题。各位在使用过程中如果发现有bug或对模板的修改,都请不吝指教。  

 

 

你可能感兴趣的:(framework)