【发布时间】:2011-06-04 20:09:06
【问题描述】:
使用一个比另一个有什么优势?我知道 POCO 课程更理想,但它们值得过度杀伤吗?我们是否应该一直使用 POCO,或者您是否应该更喜欢实体框架类?
【问题讨论】:
标签: .net entity-framework-4 poco
使用一个比另一个有什么优势?我知道 POCO 课程更理想,但它们值得过度杀伤吗?我们是否应该一直使用 POCO,或者您是否应该更喜欢实体框架类?
【问题讨论】:
标签: .net entity-framework-4 poco
我使用 POCO 的原因是关注点分离,即我不希望我的前端必须知道我的后端是如何工作的。因此,如果我想从 Linq To Sql 更改为 EF 或 N Hibernate,我不必修改我的前端代码。
【讨论】:
EF 默认类都继承自 EF 基类,而 POCO 没有(因此得名)。从 EF 基类继承时,更改跟踪背后的逻辑对您隐藏,所有逻辑都存储在保存对您的对象的引用的上下文中。如果您在连接状态下工作,这是首选,即您在拥有实体的同时拥有上下文。这通常是您构建“胖”客户端的情况,因此客户端和数据库是仅有的两层。
另一方面,如果您正在使用 Web 服务/Web 表单,则您传递的实体没有上下文并且必须自己跟踪状态 - 那么 POCO 是更好的选择,因为它们有将跟踪对象更改为可以转移的属性,直到您决定将更改应用于上下文并保存。另一个好处是您的客户端不必是 .NET,也不必具有 EF .dll 来反序列化您的对象。
【讨论】:
如果您想要干净的架构、松散耦合和最高的可测试性,请使用 POCO。
如果你不关心这些东西,那就不要使用它们。
就我个人而言,这些是任何应用程序中最重要的东西(尤其是需要长期维护的东西),因此我总是使用 POCO。
考虑到这一点,POCO 要求您实施某种更改跟踪机制,这可能很棘手。但这是一次性设置,值得付出努力。
我在项目之间共享的自定义 DLL 中有这个逻辑 - 所以我不必一次又一次地这样做。
有关为什么 POCO 在一般意义上(不是 EF/.NET 特定)重要的更多信息,请参阅我的回答 here。
【讨论】:
System.Data.Entity,不依赖 EF。如果您使用 EF 生成的类,那么您的类库将“绑定”到 EF。如果我想移动到另一个 ORM(或 DAL),我可以重新使用我的 POCO 类。 EF 生成的类不能这样说。这不仅仅是关于 other 项目的松散耦合,它是关于 POCO 和实体框架本身之间的松散耦合。它允许一个真正的“领域模型”。
请看以下文章:
【讨论】: