POCO,可追踪实体和EntityObjects的区别和相似之处在哪些方面

时间:2011-01-06 03:34:32

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

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

1)你能说出他们的分歧吗?

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

3)什么时候应该使用?

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

5)是否可以在项目中混合它们的组合?(即假设您已经编写了大量用于管理EntityObjects的代码,是否可以轻松实现POCO?)

由于

2 个答案:

答案 0 :(得分:2)

让我试试:

  • EntityObject 是一个实体框架基类;默认情况下,在创建新的Entity Framework模型时,这是表示表的所有类都将继承的类。它包含了完成所有EF魔法所需的所有逻辑和代码。

  • POCO 是普通的旧CLR对象 - 只是普通的对象,不依赖于EF,只是简单的类

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

最容易使用的是EntityObject后代 - 你只需使用它们,一切都很棒并且有效。但是:这样做会严格地将您绑定到实体框架,这可能是一个架构问题。

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

可跟踪(或自我跟踪)实体似乎是两者之间的一个很大的妥协,但我还没有充分了解所有的机制和内部工作,但却无法给出任何合理的建议。

所以我建议:

  • 从常规的Entity Framework数据模型,可视化设计器和所有人开始,并使用EntityObject后代,并开始使用EF及其工作原理

  • 如果您有需要,在对EF有基本了解的情况下,可以更详细地探索POCO或STE(自我跟踪实体)

答案 1 :(得分:0)

以下是有关EntityObject,Trackable Entities和POCO之间差异的一些其他信息。

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

2)POCO课程不了解持久性问题。它们不需要从基类派生或具有特殊属性。它们提供了与数据访问API的独立性,例如EF。

3)Trackable Entities是一种POCO类,它具有一个或两个用于设置实体状态的附加属性:Unchanged,Added,Modified,Deleted。虽然这些属性通常与持久性有关,但它们将实体耦合到任何特定的持久性框架,包括可跟踪实体。相反,它们在后端启用一些持久性框架来解释和应用这些属性,这些属性非常轻量级且与框架无关。

可追踪实体的主要优势在于它可以替代微软现已解散的Self-Tracking Entities,它允许您在一次往返WCF的过程中持续更改一个交易中相关对象的图形,或者Web API服务。例如,如果您的订单包含多个详细信息,其中一些已添加,修改或删除,则可以一次性发送订单和详细信息,并且所有更新都以原子方式进行。

可追踪实体也有其他好处,特别是在生产力方面。它被实现为一组NuGet包和Visual Studio extensions(2012,2013),可以让您在很短的时间内组合N-Tier解决方案。

干杯, 贝