zoukankan      html  css  js  c++  java
  • (转)Entity Framework 利用T4 分离 Entity 和 DbContext

    原文地址:

    http://www.cnblogs.com/fangrobert/archive/2011/08/22/2150048.html

    通常情况,我们会在项目中新建一个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下载

  • 相关阅读:
    lua继承3
    C 调试
    lua继承
    hdoj_1102Constructing Roads(最小生成树)&& poj_2485Highways
    网络摄像头监控
    hdoj_3336Count the string(KMP)
    逻辑思维训练500题(带答案)
    AC自动机算法
    poj_3080Blue Jeans && poj_3450Corporate Identity(KMP)
    hdoj_1162Eddy's picture(最小生成树)
  • 原文地址:https://www.cnblogs.com/fcsh820/p/2636610.html
Copyright © 2011-2022 走看看