2011-10-22 63 views
6

中是一件好事为什么在EF4,Linq2SQL或任何其他数据映射技术中支持POCO如此重要?我明白OO意义上的POCO的概念,但是当涉及到ORM的时候,我还缺少其他什么东西?为什么POCO在EF4,nHiberate

编辑:我只是将我的一个POCO个人定义ORM的的背景: 这是一个类,是相对于所生成,增加或注释的类开发商手工编码通过一个ORM映射工具(如Visual Studio的EF4设计器)。

如果我错了,请纠正我。

回答

2

“POCO”表示该框架对实体对象没有不必要的或违反直觉的约束 - 不需要使用代码生成器,也不需要扩展框架提供的基类,广泛注释属性或必须为大多数情况下,编写的代码不同于始终存储在内存中的类。这保持了模型类之外的数据的持久性,并减少了认知开销。

将来自NHibernate或EF Code First的POCO定义与Visual Studio为无EF代码优先的EF生成的代码进行比较,并问问自己哪一个您更愿意阅读和维护。 (当周围例如新的源代码戳。)

+0

好点。在进行分离/可维护的方式和快速/代码生成方式之间是否存在权衡? – Brendan

+0

在EF-CF中,您通常需要遵循几个最合理的约定,以便“自动”运作。如果您需要更多的控制权,您必须研究正确的注释以覆盖这些约定。在使用代码生成时,您正在与视觉设计师合作,而属性面板会向您显示您可以一目了然的自定义内容,而不必查看文档并将混乱再次引入不太简单的COS- 。 – millimoose

2

通常你不希望你的代码依赖于某种ORM技术。 POCO最小化这种依赖性。这只是解耦一般原理的一个化身。

0

实体框架使您可以使用自定义数据类一起 与您的数据模型,而无需进行任何修改数据 类本身。

这意味着您可以在数据模型中使用“普通旧”CLR对象(PO​​CO),例如现有域对象。这些映射到数据模型中定义的实体的POCO数据类支持大部分相同的查询,插入,更新和删除行为,作为由实体数据模型工具生成的实体类型。

+1

EF说它支持POCO? – Brendan

+0

是的,如果您使用“代码优先”化身,Entity Framework支持POCO。 – StriplingWarrior

+0

@StriplingWarrior实体框架在当前代码首次发布之前支持POCO。我甚至会说,就POCO而言,首先使用EF代码 - 而不是EF模型 - 首先得不到很多好处。两者同样可行。但如果你进入RAD,完全忘记纯粹的POCO ......他们需要在EF中进行大量额外的工作和耐心。 – Brett