2016-08-12 70 views
0

按照我以前的项目设计师。如何将实体对象与实体框架分开?

  • 业务服务层
    • 业务逻辑在这里。
    • 可以访问 “实体” 和 “数据访问层”
  • 数据访问层
    • SQL操作在这里制造。
    • 可以访问 “实体DTO”
  • 实体层
    • 所有数据库表DTO在这里。
  • 表示层
    • 可以访问企业和实体
    • 无法访问数据访问层
    • 查看

现在添加实体框架,我想跟进相同的建筑。

  • 业务服务层
    • 业务逻辑在这里。
    • 可以访问 “实体” 和 “数据访问层”
  • 数据访问层
    • SQL操作在这里制造。
    • 实体框架下面(的.edmx)
  • 实体层
    • 我想使用实体框架类(EntityObject)在这里。所以不需要重写所有的DTO,但要确保CRUD不应该由此完成。不应该包括的ObjectContext /的DbContext
  • 表示层
    • 可以访问企业和实体
    • 无法访问数据访问层(实体框架)
    • 查看
+0

当您调用'dbContext.SaveChanges()'时,会发生CRUD。只要这只在数据访问层完成,你应该是好的。 –

+0

@GeorgPatscheider我的意思是上下文不应该存在.. –

+0

但是上下文允许你执行sql操作。在我们的架构中,我们将业务层和数据访问层(业务逻辑直接与DbContext和实体结合)结合起来。 –

回答

0

有几件事我想带出来:

  1. 数据访问层 - 如果依赖于edmx,那么您的应用程序将紧密结合使用实体框架。如果可能,创建设计的方式是DAL与实体层作为抽象对话,而不知道下面实现了哪个ORM(基于接口的设计)。将来您可以用相对较少的努力引入其他ORM。

  2. 为什么业务服务层需要引用实体层。理想情况下应该有参考,并且只能访问DAL。

  3. 与表示层相同的注释2。

+0

我正在访问实体填充数据在对象Presenter ..->发送到企业 - >业务做多个业务逻辑转发实体到DAL - > DAL将做CRUD .. –

+0

实体意味着EF类或它是POCO。演示者和业务人员无法理想地访问EF类。至少,演示者不能确定。 –

+0

数据访问层实现必须知道EF,因为这是它自己的实现细节。从数据层抽象EF毫无意义。检查图层的名称:数据访问层。 –