在EF下使用基于T4模板的POCO实体生成器和支持WCF的生成器,解耦!

在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自带模型生成器

使用POCO生成更纯净的实体

2.使用POCO生成实体,在edmx空白处点击右键添加(也可以手动添加,但需修改模版文件使其与edmx对应.)

使用POCO生成更纯净的实体

3.点击后打开页面:

使用POCO生成更纯净的实体

4.生成解决方案如图:

使用POCO生成更纯净的实体

5.本项目建立的是控制台程序,现在就可以试试使用POCO来获取数据了!

使用POCO生成更纯净的实体

6.运行效果如图:

使用POCO生成更纯净的实体

至此就完成了使用POCO替换EF原来的实体生成器.

但仅仅这样是还不够的,应该实现根本上的解耦.

项目上的分离

新建基础类添加EF并使用POCO

新建实体了,如图将基础类的POCO实体移至实体类中.

使用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对应时,选择下面这个生成器(这个生产器可以在工具->扩展和更新->搜索中找到,下载安装)

 

在项目分离的时候,例如原本.edmx和.tt在ORM层,若要把.tt分离在Model层中,则需同时把.edmx和.tt同时拷贝到Model中后,再把Model中的.edmx删除,便可实现分离!
若以后edmx发生变化,只需点击要tt文件点击保存,就将自动刷新生成的代码.

 

posted @ 2013-07-27 17:24  Joe-xin  阅读(513)  评论(0编辑  收藏  举报