【发布时间】:2011-08-24 15:48:48
【问题描述】:
我听说带有实体框架的 POCO 有缺点,但我不能 100% 确定它们是什么。我听说更改跟踪存在问题。主要缺点是什么以及解决方法是什么?我正在考虑在即将到来的项目中使用 POCO 实体,并希望做好充分准备。
谢谢!
【问题讨论】:
标签: .net entity-framework frameworks entity poco
我听说带有实体框架的 POCO 有缺点,但我不能 100% 确定它们是什么。我听说更改跟踪存在问题。主要缺点是什么以及解决方法是什么?我正在考虑在即将到来的项目中使用 POCO 实体,并希望做好充分准备。
谢谢!
【问题讨论】:
标签: .net entity-framework frameworks entity poco
失败取决于您要编写的应用程序的类型。 POCO 从架构的角度来看非常棒,因为它们不会引入对实体框架的依赖。变更跟踪的问题可以分为两个独立的部分:
分离实体不仅是 POCO 的问题。这是 EF 甚至整个 ORM 概念中的一个全球性问题(但其他 API 可能有更好的工具来处理这个问题)。关键是 ORM 负责持久化对实体所做的更改。为此,它提供了一些更改跟踪机制,但这些更改跟踪机制仅在 ORM 知道实体时才起作用。一旦你分离一个实体(如果 EF 调用 Detach 或处置 ObjectContext 或创建实体而不从数据库加载它 - 在 Web 应用程序和 Web 服务中很常见)EF 不知道更改并且一旦你想保存实体,您必须告诉 EF 发生了什么变化。这是easy to do in case of single entity,但在整个对象图的情况下是pretty big challenge。这可以通过STEs 部分解决,但I don't think that STEs are good solution 可以解决这个问题 - 它们仅在某些情况下有用。
性能问题也与变更跟踪有关。有几份报告显示,如果 EF 想要跟踪实体中的更改,则需要很长时间来初始化更改跟踪(当 entity is loaded from database 或 attached to the context 时)。仅当您计划使用大型数据集时,此问题才很重要。
仍然有很多成功的项目使用 POCO,并且大多数项目可能永远不会遇到这些问题。
【讨论】: