Entity Framework - 利用T4 分离 Entity 和 DbContext
通常情况,我们会在项目中新建一个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相关推荐
- Entity Framework 4.1/4.3 之五 (DBContext 之 2 查询功能)
Entity Framework 4.1/4.3 之五 (DBContext 之 2 查询功能) 昨天我们讲了 DBContext的作用及它的一些相对于ObjectContext进行的优化,今天继续进 ...
- Entity Framework (EF)/Linq To entity/ ESQL(entity sql)区别 ADO.NET Entity Framework:来自微软官方的ORM框架
长久以来,程序员和数据库总是保持着一种微妙的关系,在商用应用程序中,数据库一定是不可或缺的元件,这让程序员一定要为了连接与访问数据库而去学习 SQL 指令,至少对于我而言,我觉得这是一个很不爽的事情. ...
- vs2012 entity framework mysql_MVC4,MVC3,VS2012+ entity framework Migration from Sqlserver
在开发的初期个人认为因VS与Sqlserver的配合很默契,即可以方便的实现Code First,又可以使用SqlServer Manager很漂亮的进行建模与变更,也许是个人的使用习惯MS的界面做的 ...
- Entity Framework 5自动生成ObjectContext或者DbContext的设置
在edmx文件的设计视图中,右键->属性->Code Generation Strategy的选项 Defautl:为DB first模式,生成的数据上下文为ObjectContext的子 ...
- Entity Framework part2
EF原理 以XML方式打开edmx文件,这个XML的文件主要包含两大部分:Runtime是类模型部分,Designer是VS中的图形界面 重点讨论的是Runtime部分,又分为三大部分: SSDL数据 ...
- Entity Framework 6新特性:全局性地自定义Code First约定
2012年12月11日,Entity Framework已经发布了Entity Framework 6 Alpha2,因项目需要,目前已使用了其中的两个特性,今天就来介绍一下第一个特性:全局性地自定义 ...
- AppBox升级进行时 - 拥抱Entity Framework的Code First开发模式
AppBox 是基于 FineUI 的通用权限管理框架,包括用户管理.职称管理.部门管理.角色管理.角色权限管理等模块. 从Subsonic到Entity Framework Subsonic最早发布 ...
- Entity Framework Core生成的存储过程在MySQL中需要进行处理及PMC中的常用命令
在使用Entity Framework Core生成MySQL数据库脚本,对于生成的存储过程,在执行的过程中出现错误,需要在存储过程前面添加 delimiter // 附:可以使用Visual Stu ...
- Entity Framework Core 2.0 全局查询过滤器
本博文翻译自: http://gunnarpeipman.com/2017/08/ef-core-global-query-filters/ Entity Framework Core 2.0 全局查 ...
最新文章
- review what i studied `date` - 2017-4-12
- 【WWW2021】高效的非抽样知识图谱嵌入
- 坐视——做事——做势
- Microsoft Office Visio
- 数据结构与算法 -- 链表
- linux 解析pdf下载工具,Linux高级系统级性能分析工具-perf.pdf
- mysql按月进行表分区
- Spring Boot(六)集成 MyBatis 操作 MySQL 8
- 罗德里格斯(Rodrigues)旋转方程推导
- python3.7安装pyqt4_Windows下PyQt4的安装(本文已过期)
- 蔚来打通京津冀都市圈高速换电网络
- Oracle DBHelper
- 超实用的shell脚本--一键获取进程所有信息
- 设计模式(二)--单例模式
- 二:SpringMVC知识整理
- 友情链接监控软件报表
- JVisualVM监控
- iconfont阿里矢量图标库使用说明
- fx3u4ad一adp说明书_FX3U-4AD-PT-ADP用户手册FX3U-4AD-PT-ADP使用说明书 - 三菱
- 递归算法转换成非递归算法
热门文章
- 吸顶灯怎么固定天花板_什么是吸顶灯?吸顶灯的材质和其与吊顶灯的区别分析...
- layUI数据表格可编辑表格单元格值修改之后获取修改前的值
- 【NOIP2007】【Luogu1093】奖学金
- php中sisson用法,session用法
- JAVA多线程→进程与线程、线程周期、实现线程Thread、start()sleep()join()、线程互斥synchronized()锁当前对象this或方法、线程同步wait()notify()
- android 获取程序名,Android_Android获取应用程序名称(ApplicationName)示例,MainActivity如下: 复制代码 代码 - phpStudy...
- 后序遍历二叉树(迭代 vs 递归)
- SSM之SpringMVC框架
- jquery选择器之基本选择器
- bzoj 4765: 普通计算姬(分块+树状数组)