【问题标题】:Which are the differences and similarities of POCOs, Trackable Entities and EntityObjectsPOCO、Trackable Entities 和 EntityObjects 的区别和相似之处是什么
【发布时间】:2011-01-06 03:34:32
【问题描述】:

虽然我有一些 .net o/rm 概念,但我对 EF4 用语中的三个术语感到困惑:可跟踪实体、EntityObjects 和 POCO。

1) 你能说出它们的区别吗?

2) 你能说出它们的相似之处吗?

3) 什么时候应该使用它们?

4) 什么时候不应该使用它们?

5) 是否可以在项目中混合使用它们的组合?,(即假设您已经编写了很多代码来管理实体对象,那么实现 POCO 是否容易?)

谢谢

【问题讨论】:

    标签: entity-framework orm ado.net entity-framework-4 poco


    【解决方案1】:

    让我试试:

    • EntityObject 是实体框架基类;默认情况下,当您创建一个新的实体框架模型时,这是表示您的表的所有类都将从该类继承的类。它包含执行所有 EF 魔术所需的所有逻辑和代码。

    • POCO 是普通的旧 CLR 对象 - 只是你拥有的普通对象,不依赖于 EF,只是普通类

    • 可跟踪实体基本上是“立体模型上的 POCO” - POCO 类具有跟踪其状态(未修改、已修改等)的附加功能,因此它们可以跨多个层发送(以及back) 并在最后几乎像常规 EntityObjects 一样使用

    最容易使用的是 EntityObject 后代 - 你只需使用它们,一切都很好并且可以工作。但是:这样做会将您与 Entity Framework 紧密绑定,这可能是一个架构问题。

    仅使用 POCO 是“最纯粹的”——您只处理普通类,而 EF 会在“幕后”发挥所有魔力——但需要一些额外的代码和努力才能使其正常工作。

    可跟踪(或自我跟踪)实体似乎是两者之间的一个很好的折衷方案,但我对所有机制和内部工作原理的了解还不够多,因此无法就此给出任何合理的建议。

    所以我会推荐:

    • 从常规 Entity Framework 数据模型、可视化设计器等开始,使用 EntityObject 后代,然后开始使用 EF 及其工作原理

    • 如果您觉得有必要,在您对 EF 有基本了解后,更详细地探索 POCO 或 STE(自跟踪实体)

    【讨论】:

    • +1,这是一个很好的答案。非常类似于我想回答的问题。
    • POCO 和 EntityObject 是否都可以通过 ObjectContext 进行管理?假设我在操作 POCO 的业务层中:我需要什么来持久化对 POCO 所做的更改?我需要将它们转换为 DAL 中的 EntityObjects 并保留它们的更改吗?
    【解决方案2】:

    以下是有关 EntityObject、可跟踪实体和 POCO 之间差异的一些附加信息。

    1) EntityObject 是用于旧版 EF 应用程序的实体基类。您应该不惜一切代价避免它,因为它将您的实体与 EF 紧密耦合,这是一件坏事。并且有了 EF POCO 支持,这完全没有必要,因为 EF 现在提供了许多相同的功能而无需基类。

    2) POCO 类不知道持久性问题。它们不需要从基类派生或具有特殊属性。它们独立于数据访问 API,例如 EF。

    3) Trackable Entities 是一种 POCO 类,具有一个或两个用于设置实体状态的附加属性:未更改、已添加、已修改、已删除。虽然这些属性通常与持久性有关,但它们将实体耦合到任何特定的持久性框架,包括可跟踪实体。相反,它们使后端的一些持久性框架能够解释和应用这些属性,这些属性非常轻量级且独立于框架。

    Trackable Entities 的主要优点是替代 Microsoft 现已失效的 Self-Tracking Entities,它允许您在一个事务中通过一次往返 WCF 或 Web API 来持久化对相关对象图的更改服务。例如,如果您有一个包含多个详细信息的订单,其中一些已添加、修改或删除,则订单和详细信息可以一次性发送,并且所有更新都会自动进行。

    可追踪实体还有其他好处,尤其是在生产力方面。它以一组 NuGet 包和 Visual Studio extensions(2012 年、2013 年)的形式实现,让您可以在很短的时间内构建 N 层解决方案。

    干杯, 托尼

    【讨论】:

      猜你喜欢
      • 2010-12-21
      • 2012-03-17
      • 2011-12-30
      • 2010-09-27
      • 2015-08-04
      • 1970-01-01
      • 2014-05-22
      • 1970-01-01
      • 2015-09-09
      相关资源
      最近更新 更多