实体框架POCO

5
使用T4模板在实体框架4.0中创建POCO会失去什么?为什么使用实体框架4.0时默认行为不是创建POCO?
1个回答

3
您失去了一些东西。在ORM中,“纯”POCO的用处有限,因为它不会进行更改跟踪。换句话说,当您改变对象并保存更改到上下文时,希望将更改的属性保存到数据库中。使用“纯”POCO,您可以使用基于快照的更改跟踪来实现这一点,但效率相对较低。您也可以使用运行时代理来完成此操作,但这意味着您必须使跟踪属性public virtual,因此您可能不再拥有“POCO”。此外,使用代理意味着您不知道实例的真实运行时类型。
您还会失去一些方便的属性,例如EntityState
“纯”POCO无法进行延迟加载。同样,您可以使用代理类型解决此问题,但是,如果您使用代理,则实际上没有“纯”POCO。
除此之外,在Entity Framework中使用POCO实体的需求比其他ORM中少。这是因为您始终可以使用LINQ将实体类型投影到POCO实例上,而无需首先实例化实体实例。因此,在Entity Framework应用程序中始终可以使用“纯”POCO,即使您没有以这种方式映射实体。

1
使用非POCO进行单元测试效果很好,对我来说没有任何问题。 - Craig Stuntz
我认为POCO T4模板会为你创建代理。 而且,IPoco是否消除了对EntityState的需求?我觉得楼主的问题真的很有趣... 我希望能看到更多关于这个话题的讨论。 - itchi
IPOCO还不错,但它与POCO不同。在我看来,代理也不是真正的POCO,因为我的“POCOs”并没有将所有内容声明为“public virtual”。 - Craig Stuntz
我明白了。但我认为OP所说的是http://visualstudiogallery.msdn.microsoft.com/en-us/23df0450-5677-4926-96cc-173d02752313,而不是你的“POCOs”。 - itchi
@itchi,POCO的创建方式并不会改变我的答案。毕竟,如果你关心它是如何制作的,那么它就不是真正的“POCO”了,对吧? - Craig Stuntz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接