timiil
无才可去补单车
posts - 3,  comments - 28,  trackbacks - 0

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

 

 

 

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

 

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

 

 

标签: EF, SQLite, T4
posted on 2009-12-12 20:35 timiil 阅读(1978) 评论(6) 编辑 收藏

FeedBack:
2009-12-12 22:59 | showme[未注册用户]
能不能介绍一下Mysql+Entity Framework啊?另外现在EF支持存储过程返回多表结果吗?我在实际操作中发现,添加Mysql存储过程报错。
 回复 引用   
2009-12-14 11:27 | 灵感之源      
............
 回复 引用 查看   
2010-03-02 08:49 | 独行者2010      
很好很强大
 回复 引用 查看   
2010-11-29 09:54 | 小虫先锋      
谢谢提供
 回复 引用 查看   
2011-07-14 23:18 | xiao_p      
高手,我折腾了大半天,generate database from model总是不对,后来我就用生成的sql语句, 在sqlite里面用控制台去生成了table,不过查询又总过不去。

原来还可以这样弄,明天试试。

 回复 引用 查看   
2011-07-14 23:47 | xiao_p      
我用vs直接生成还是会卡掉,于是将生成的sql弄出来
直接用sqlite的命令行 read 文件就好用了,还是很给力的,谢谢楼主

 回复 引用 查看   
昵称:timiil
园龄:7年2个月
粉丝:2
关注:0

<2009年12月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

搜索

 

常用链接

我的标签

随笔档案

开发团队

猫朋猫友

积分与排名

  • 积分 - 10478
  • 排名 - 8452

最新评论