【问题标题】:N-Tier Data Layer implementation with Entity Framework 5 Code-First and POCOs?使用 Entity Framework 5 Code-First 和 POCO 实现 N 层数据层?
【发布时间】:2013-10-17 11:27:23
【问题描述】:

似乎将 N 层架构与 EF 一起使用意味着您必须为数据层的加载方法实例化一个新的 DbContext 对象,然后在尝试保存时实例化另一个对象。

这样做的下游含义是,在您保存时,在工作流开始时加载的实体不再处于状态,因此将调用保存到 ObjectStateManager.TryGetObjectStateEntry() 之类的东西会返回 false,在事实上,被保存的实体确实起源于数据库。结果是保存我们的编辑会导致添加。

这似乎是一个相当常见的架构中的一个相当常见的工作流程。有什么明显的我错过了吗?

【问题讨论】:

  • 他们推荐用于 N 层数据访问的 WebAPI 或 WCF 数据服务。我不喜欢这些,所以我设法让DbContextSelf Tracking Entities 一起工作。现在我通过常规 WCF 发送我的实体,它们返回自我跟踪更改,我在我的 ((IObjectContextAdapter)dbContext).ObjectContextApplyChanges() 并致电 SaveChanges()。到目前为止,每个人都很开心。
  • 在我们公司当前的项目中,我们的设置与您相同。 EF5/POCO/3 层; “缺点”是你必须通过你的层传递你的数据。但从长远来看,你的代码会更干净,更易于维护。哦,你失去了延迟加载!
  • @Tico 当您说“传递您的数据”时,您是指将 DbContext 对象连接到您的工作流中,以便您保存在加载实体的同一个实例上?
  • @TIco 延迟加载仍然可以为server-only 操作启用,例如报表查询和繁重的业务逻辑相关数据访问。
  • 是的,类似的。让我试着解释一下。项目结构类似于这张图片(在google上找到):(i.imgur.com/IIhBeX9.jpg)一层有POCO(VO层),另一层是BLL(业务逻辑层),DAL(数据访问层)和UI (随你喜欢)。可以这么说,UI 和 DAL 是“愚蠢的”。逻辑的责任在 BLL 内。所以,你必须查询数据库,传递给 BLL 和 UI(同样的方式)

标签: c# entity-framework n-tier-architecture


【解决方案1】:

您可能有兴趣尝试 N-Tier Entity Framework,它是 CodePlex 上提供的开源软件,可完美满足您的需求。

【讨论】:

    猜你喜欢
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多