【问题标题】:POCO Vs Entity Framework Generated Classes? [closed]POCO 与实体框架生成的类? [关闭]
【发布时间】:2011-06-04 20:09:06
【问题描述】:

使用一个比另一个有什么优势?我知道 POCO 课程更理想,但它们值得过度杀伤吗?我们是否应该一直使用 POCO,或者您是否应该更喜欢实体框架类?

【问题讨论】:

    标签: .net entity-framework-4 poco


    【解决方案1】:

    我使用 POCO 的原因是关注点分离,即我不希望我的前端必须知道我的后端是如何工作的。因此,如果我想从 Linq To Sql 更改为 EF 或 N Hibernate,我不必修改我的前端代码。

    【讨论】:

      【解决方案2】:

      EF 默认类都继承自 EF 基类,而 POCO 没有(因此得名)。从 EF 基类继承时,更改跟踪背后的逻辑对您隐藏,所有逻辑都存储在保存对您的对象的引用的上下文中。如果您在连接状态下工作,这是首选,即您在拥有实体的同时拥有上下文。这通常是您构建“胖”客户端的情况,因此客户端和数据库是仅有的两层。

      另一方面,如果您正在使用 Web 服务/Web 表单,则您传递的实体没有上下文并且必须自己跟踪状态 - 那么 POCO 是更好的选择,因为它们有将跟踪对象更改为可以转移的属性,直到您决定将更改应用于上下文并保存。另一个好处是您的客户端不必是 .NET,也不必具有 EF .dll 来反序列化您的对象。

      【讨论】:

        【解决方案3】:

        如果您想要干净的架构、松散耦合和最高的可测试性,请使用 POCO。

        如果你不关心这些东西,那就不要使用它们。

        就我个人而言,这些是任何应用程序中最重要的东西(尤其是需要长期维护的东西),因此我总是使用 POCO。

        考虑到这一点,POCO 要求您实施某种更改跟踪机制,这可能很棘手。但这是一次性设置,值得付出努力。

        我在项目之间共享的自定义 DLL 中有这个逻辑 - 所以我不必一次又一次地这样做。

        有关为什么 POCO 在一般意义上(不是 EF/.NET 特定)重要的更多信息,请参阅我的回答 here

        【讨论】:

        • 为什么不使用 EF 生成的类可以实现的接口简单地表示您的“POCO”?然后你的 UI(或上层服务)可以通过只处理接口定义来实现松散耦合和可测试性......并且不需要编写/执行转换函数。
        • @Reddog - 我的 POCO 程序集没有引用 System.Data.Entity,不依赖 EF。如果您使用 EF 生成的类,那么您的类库将“绑定”到 EF。如果我想移动到另一个 ORM(或 DAL),我可以重新使用我的 POCO 类。 EF 生成的类不能这样说。这不仅仅是关于 other 项目的松散耦合,它是关于 POCO 和实体框架本身之间的松散耦合。它允许一个真正的“领域模型”。
        【解决方案4】:
        猜你喜欢
        • 2016-01-28
        • 2011-06-30
        • 2011-04-06
        • 1970-01-01
        • 2013-04-11
        • 1970-01-01
        • 2011-08-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多