在Entity Framework 4.0提供了对POCO(简单传统CLR对象/Plain Old CLR Object)支持,这样让我们专注于业务逻辑和更有效的进行单元测试.并且POCO不需像默认EF实体一样要继承才能实现,所以可以更灵活的切换. 本文将介绍如何自动生成POCO并替换EF生成的实体.实现两者的分离,独立于EF存在. 下载安装POCO实体生成器 本文使用的是Microsoft提供的T4模版,下载地址: 也可以在点击这里:本地下载.(本文使用的是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模版可以根据自己的项目需要做相应的调整. 若以后edmx发生变化,只需点击要tt文件点击保存,就将自动刷新生成的代码. 附demo源码下载 (PS.第一次写技术类文章,欢迎拍砖) |
|