在对EF4有一个大致了解后,我们来看看怎么在实际项目中应用EF4和POCO。
1、打开VS2010,新建一个空的解决方案。
2、添加一个Class Library项目,删掉附带的Class1。
3、Add一个New Folder,比如“DataEntity”,往里添加一个 Entity Data Model : EF4.edmx:
4、选择“Generate from database”,点“next”,在向导帮助下,完成数据库连接的配置:
5、此时,向导会要求提供一个数据库连接串,并可选将它配置在App.config中,如果初次使用向导,点击“New Connection”创建一个新的连接:
6、下一步中,向导为我们反射出当前数据库中的所有表(Tables)、视图(Views)、存储过程和方法(Stored Procedures)。
值得注意的是:存储过程和函数是列在一起的,并且在这个步骤中,可为模型定下命名空间。
7、勾选我们要用到的结构,点击“Finish”进行生成。此时,会进入Entity Data Model的设计视图:
关闭它,在“Solution Explorer”中查看EF4.Designer.cs源代码,我们会发现,此时的模型实体与数据容器是在一起的:
OK,万里长征完成了第一步,此时我们需要用到Entity Framework 4 的模板,才能实现真的POCO与Data Context分离。
8、还在这个Folder中,添加一个“ADO.NET POCO Entity Generator”,点Add,看发生了什么:
是的,产生了两个T4模板,一个是生成DataContext数据容用的,一个是生成POCO模型用的。
有了它们,我们就用不着.edmx自带的.cs文件了,将它删除!.edmx只是我们用来生成的一个依据,使用它的设计视图进行模型的重构。
对于习惯Model和Data分层分离的朋友,鄙人提供这两个模板可供选用:
Entity Framework 4 Model & DataContext T4 Template Download
当然,模板只是个范例,还需视情况进行调整,比如您项目的相对位置,命名空间有所不同,或者您觉得序列化模型不是必须的。
同时,在使用这两个模板进行生成操作前,请确保您在设计器中对Entity Type的“Entity Set Name”和“Name”的命名,符合如下规则:
如果表命名类似这样:CARD_BATCH,单词间以下划线“_”进行分隔,那么词间首字母请大写,Name设置为“CardBatch”,Entity Set Name为Name加上s,即“CardBatchs”
为什么要这样?因为当初我犯了个懒,没有好好去研究生成Name和Entity Set Name通用的方法,久而久之,也就习惯了这么用,是有点麻烦,尤其对于Model经常在变化的项目^ ^ 朋友们如果有更好的方法,请不吝赐教~
这里将两层项目的解决方案放出,希望对您有所帮助: