分层架构中的entity framework

我正在使用entity framework的分层架构。 这是我到目前为止所提出的(所有项目除了UI都是类库):

  • 实体 :POCO实体。 完全坚持无知。 没有参考其他项目。 由Microsoft的ADO.Net POCO实体生成器生成。

  • DAL :带有上下文类的EDMX(实体模型)文件。 (t4生成)。 参考文献: Entities

  • BLL :业务逻辑层。 将在此层上实现存储库模式。 参考文献: EntitiesDAL 。 这是填充objectcontext的地方: var ctx=new DAL.MyDBEntities();

  • UI :表示层:ASP.NET网站。 参考: EntitiesBLL +配置文件中实体的连接字符串条目(问题#2)。

现在我的三个问题:

  1. 我的图层处理方法是否正确?
  2. 在我的UI中,我按如下方式访问BLL:
    var customerRep = new BLL.CustomerRepository();
    var Customer = customerRep.GetByID(myCustomerID);

    问题是我必须在我的UI的web.config / app.config中定义实体连接字符串,否则我会得到一个运行时exception。 IS定义UI中的实体连接字符串会破坏图层的区别吗? 或者它是否可以在多层分层架构中访问。

  3. 我应该采取任何额外的步骤来执行chage跟踪,延迟加载等(通过等我的意思是entity framework在传统的1项目,非POCO代码生成中涵盖的function)?

感谢并为这个冗长的问题道歉。

BLL:业务逻辑层。 将在此层上实现存储库模式

我真的不同意这一点。 存储库旨在抽象底层数据存储(SQL Server,XML等)。 这是一个数据层问题,而不是业务问题 – 因此它为什么要在BLL中呢?

我的图层处理方法是否正确?

的种类。 :)这有点主观,但通常你有:

  • 数据
    • 存储库在这里。
  • 商业
    • 业务规则,域逻辑和实体。
  • 介绍
    • UI / Web应用程序。

现在,通常这三个进一步分解。 所以在你的情况下我会:

  1. MyCompany.MyProject.Data(存储库)
  2. MyCompany.MyProject.Business.Services(调用存储库,应用业务规则等)
  3. MyCompany.MyProject.Business.DomainModel(实体)
  4. MyCompany.MyProject.UI(网络应用程序)

我应该采取任何额外的步骤来执行chage跟踪,延迟加载等(通过等我的意思是entity framework在传统的1项目,非POCO代码生成中涵盖的function)?

如果您没有使用POCO(例如您使用默认代码生成)。 然后,您无需担心更改跟踪。

至于延迟加载 – 这是你需要做出的决定。 我个人禁用延迟加载,因为我不希望懒惰的开发人员在他们没有要求时返回一堆记录。

相反,强制调用代码(例如业务/服务) 急切地加载它需要的东西。

如果你使用ASP.NET MVC应用程序,如果你有延迟加载,你的View最终可能会在渲染时调用数据库,打破MVC模式。

1)层对我来说似乎很好

2)不要在UI app.config中看到连接字符串的问题。 必须在某个地方定义。 您可以将DAL.config复制到您创建项目时可能在其中创建连接字符串的应用程序BIN文件夹,但对我来说这似乎不对。 我个人会在你的UI层app.config中管理它

问题是我必须在我的UI的web.config / app.config中定义实体连接字符串,否则我会得到一个运行时exception。

连接字符串总是从正在执行的appDomain的app.config / web.config中获取(这里是你的asp.net app而不是DAL)。 所以,您可以做的是创建一个xml文件,用于在DAL项目中存储设置,并使用dot net framework提供的xml类读取这些设置