通常情况,我们会在项目中新建一个ClassLibrary的EF.Data层,然后在该层中添加一个ADO.NET Entity Data Model的edmx文件。IDE就会利用ADO.NET Entity Data Model生成基于当前数据库对应的实体类以及实体类对应的数据访问代码。如果你的项目是简单的三层架构(应用层,业务层,数据访问层),你会发现我们再应用层需要用到实体类的话,必须引用EF.Data层,这样一来也就把数据访问的代码暴露给应用层了。这样有悖于我们三层架构的一个初衷。

让我们一起来Step by Step的来用T4 分离Entity 和 DbContext

Step 1 新建Solution


EF.App应用层 - Console Application
EF.Data实体层 - ClassLibrary
EF.DataAccess数据访问层 - ClassLibary
EF.Services业务层 - ClassLibary

Step 2 添加edmx

打开EFModel.edmx文件,右键菜单选择“Add Code generation Item”,在弹出的窗口选择“ADO.NET DbContext Generator”,EF.DataAccess project中将产生2个T4文件:EFModel.tt, EFModel.Context.tt

我想此时你应该有种预感:EFModel.tt是为产生实体而生产的T4 模板文件,而EFModel.Context.tt正是为产生DbContext而生产的T4模板文件。

Step 3 转移实体

将EFModel.edmx和EFModel.tt 复制到EF.Data,然后再EF.DataAccess中删除EFModel.tt,然后设置EFModel.edmx的Code Generation Strategy设为None[确保EFModel.edmx不自动产生代码]

Step 4 正确引用

App 引用 Data 和 Service
 Service 引用 Data
 DataAccess 引用 Data

这样一来App 跟DataAccess之间就用Service隔离开了了,这也就是我们的目的。

因为T4模板文件我们是可以修改的,所以我们可以对新生成的2个T4文件做一些修改来生产我们想要的代码。例如我们可以修改EFModel.tt文件把生产的实体类加上DataContract,满足在WCF中的应用。

Demo下载

转载于:https://www.cnblogs.com/fangrobert/archive/2011/08/22/2150048.html

Entity Framework - 利用T4 分离 Entity 和 DbContext相关推荐

  1. Entity Framework 4.1/4.3 之五 (DBContext 之 2 查询功能)

    Entity Framework 4.1/4.3 之五 (DBContext 之 2 查询功能) 昨天我们讲了 DBContext的作用及它的一些相对于ObjectContext进行的优化,今天继续进 ...

  2. Entity Framework (EF)/Linq To entity/ ESQL(entity sql)区别 ADO.NET Entity Framework:来自微软官方的ORM框架

    长久以来,程序员和数据库总是保持着一种微妙的关系,在商用应用程序中,数据库一定是不可或缺的元件,这让程序员一定要为了连接与访问数据库而去学习 SQL 指令,至少对于我而言,我觉得这是一个很不爽的事情. ...

  3. vs2012 entity framework mysql_MVC4,MVC3,VS2012+ entity framework Migration from Sqlserver

    在开发的初期个人认为因VS与Sqlserver的配合很默契,即可以方便的实现Code First,又可以使用SqlServer Manager很漂亮的进行建模与变更,也许是个人的使用习惯MS的界面做的 ...

  4. Entity Framework 5自动生成ObjectContext或者DbContext的设置

    在edmx文件的设计视图中,右键->属性->Code Generation Strategy的选项 Defautl:为DB first模式,生成的数据上下文为ObjectContext的子 ...

  5. Entity Framework part2

    EF原理 以XML方式打开edmx文件,这个XML的文件主要包含两大部分:Runtime是类模型部分,Designer是VS中的图形界面 重点讨论的是Runtime部分,又分为三大部分: SSDL数据 ...

  6. Entity Framework 6新特性:全局性地自定义Code First约定

    2012年12月11日,Entity Framework已经发布了Entity Framework 6 Alpha2,因项目需要,目前已使用了其中的两个特性,今天就来介绍一下第一个特性:全局性地自定义 ...

  7. AppBox升级进行时 - 拥抱Entity Framework的Code First开发模式

    AppBox 是基于 FineUI 的通用权限管理框架,包括用户管理.职称管理.部门管理.角色管理.角色权限管理等模块. 从Subsonic到Entity Framework Subsonic最早发布 ...

  8. Entity Framework Core生成的存储过程在MySQL中需要进行处理及PMC中的常用命令

    在使用Entity Framework Core生成MySQL数据库脚本,对于生成的存储过程,在执行的过程中出现错误,需要在存储过程前面添加 delimiter // 附:可以使用Visual Stu ...

  9. Entity Framework Core 2.0 全局查询过滤器

    本博文翻译自: http://gunnarpeipman.com/2017/08/ef-core-global-query-filters/ Entity Framework Core 2.0 全局查 ...

最新文章

  1. review what i studied `date` - 2017-4-12
  2. 【WWW2021】高效的非抽样知识图谱嵌入
  3. 坐视——做事——做势
  4. Microsoft Office Visio
  5. 数据结构与算法 -- 链表
  6. linux 解析pdf下载工具,Linux高级系统级性能分析工具-perf.pdf
  7. mysql按月进行表分区
  8. Spring Boot(六)集成 MyBatis 操作 MySQL 8
  9. 罗德里格斯(Rodrigues)旋转方程推导
  10. python3.7安装pyqt4_Windows下PyQt4的安装(本文已过期)
  11. 蔚来打通京津冀都市圈高速换电网络
  12. Oracle DBHelper
  13. 超实用的shell脚本--一键获取进程所有信息
  14. 设计模式(二)--单例模式
  15. 二:SpringMVC知识整理
  16. 友情链接监控软件报表
  17. JVisualVM监控
  18. iconfont阿里矢量图标库使用说明
  19. fx3u4ad一adp说明书_FX3U-4AD-PT-ADP用户手册FX3U-4AD-PT-ADP使用说明书 - 三菱
  20. 递归算法转换成非递归算法

热门文章

  1. 吸顶灯怎么固定天花板_什么是吸顶灯?吸顶灯的材质和其与吊顶灯的区别分析...
  2. layUI数据表格可编辑表格单元格值修改之后获取修改前的值
  3. 【NOIP2007】【Luogu1093】奖学金
  4. php中sisson用法,session用法
  5. JAVA多线程→进程与线程、线程周期、实现线程Thread、start()sleep()join()、线程互斥synchronized()锁当前对象this或方法、线程同步wait()notify()
  6. android 获取程序名,Android_Android获取应用程序名称(ApplicationName)示例,MainActivity如下: 复制代码 代码 - phpStudy...
  7. 后序遍历二叉树(迭代 vs 递归)
  8. SSM之SpringMVC框架
  9. jquery选择器之基本选择器
  10. bzoj 4765: 普通计算姬(分块+树状数组)