在Entity Framework 4.0提供了对POCO(简单传统CLR对象/Plain Old CLR Object)支持,这样让我们专注于业务逻辑和更有效的进行单元测试.并且POCO不需像默认EF实体一样要继承才能实现,所以可以更灵活的切换.
本文将介绍如何自动生成POCO并替换EF生成的实体.实现两者的分离,独立于EF存在.
下载安装POCO实体生成器
本文使用的是Microsoft提供的T4模版,下载地址:
http://visualstudiogallery.msdn.microsoft.com/23df0450-5677-4926-96cc-173d02752313/view/Discussions/all
也可以在点击这里:本地下载.(本文使用的是1.1版于2010/2/19更新)下载完后安装,一路下一步完成.
使用POCO实体生成器
1.本文使用Northwind示例数据库,因为使用POCO作为实体,所以需要关闭EF自带模型生成器
2.使用POCO生成实体,在edmx空白处点击右键添加(也可以手动添加,但需修改模版文件使其与edmx对应.)
3.点击后打开页面:
4.生成解决方案如图:
5.本项目建立的是控制台程序,现在就可以试试使用POCO来获取数据了!
6.运行效果如图:
至此就完成了使用POCO替换EF原来的实体生成器.
但仅仅这样是还不够的,应该实现根本上的解耦.
项目上的分离
新建基础类添加EF并使用POCO
新建实体了,如图将基础类的POCO实体移至实体类中.
这样修改之后显然是编译不能通过的,如图:
这是由于没有找到相应实体(被移动到Entities当然找不到)
以下是分离项目需要解决的问题:
1.修改Northwind.Context.tt,添加using引用 using PocoDemo.Entities; 并添加响应项目引用关系
2.修改Northwind.tt的第22行string inputFile = @"Northwind.edmx";
修改为string inputFile = @"..\\PocoDemo.Infrastructure\\Northwind.edmx";
这样才能正确找到edmx文件来生成代码.
最终运行效果与之前相同.
后记
这个T4模版可以根据自己的项目需要做相应的调整.
可以调整为支持WCF服务,例如在步骤2中,需修改模版文件使其与edmx对应时,选择下面这个生成器(这个生产器可以在工具->扩展和更新->搜索中找到,下载安装)
Tencent/Users/531588644/QQ/WinTemp/RichOle/EGSXIBJ%60%7BN7QJ%7B1K42D)[4O.jpg" alt="" /> 在项目分离的时候,例如原本.edmx和.tt在ORM层,若要把.tt分离在Model层中,则需同时把.edmx和.tt同时拷贝到Model中后,再把Model中的.edmx删除,便可实现分离! 若以后edmx发生变化,只需点击要tt文件点击保存,就将自动刷新生成的代码.