什么是POCO的实体框架

pdi*_*ddy 32 .net c# entity-framework poco

使用POCO有什么好处?我不明白持久性无知的含义,这是什么意思?poco对象不能暴露像Save这样的东西?我无法绕过这个POCO,周围有很多嗡嗡声.

与EF生成的实体和POCO有什么区别?

Dat*_*han 45

POCO代表"Plain Old C#Object"或"Plain Old CLR Object",取决于你询问的对象.如果框架或API声明它在POCO上运行,则意味着它允许您以惯用方式定义对象模型,而无需使对象继承特定的基类.一般来说,在POCO上工作的框架允许您更自由地控制类的设计和实现,因为它们对正常工作的要求较少.

持久性无知意味着,尽可能地,在业务逻辑层或更高层运行的代码中的任何内容都不了解数据库的实际设计,您正在运行的数据库引擎,或者何时或何时从中检索或保留对象到数据库.在MEF的情况下,通过处理POCO并使用LINQ执行查询(即,不要求用户创建任何SQL查询来检索所需对象)来实现持久性无知.

这是一个悬而未决的问题,但人们普遍认为,在大多数情况下,域对象(或业务对象 - 无论哪种方式,上面提到的POCO)都应该不了解持久性逻辑.意思是MyBusinessObject.Save(),您有一个IO管理器或适配器类,而不是调用,然后调用Manager.Save(MyBusinessObject).通过这种方式,您可以避免在业务对象上暴露持久性语义 - 您可以通过这种方式更好地分离关注点.

  • 但是使用EntityFramework生成的实体,我们确实已经将生成的类从ObjectContext继承到表示实体的持久性和类.我正在阅读有关EF 4.0的msdn杂志上的文章,并且有一篇关于POCO的文章,在文章中,作者从头开始创建对象......我们不能使用生成的实体吗?他们不是POCO吗? (5认同)
  • EF默认使用`EntityObject`作为其所有实体的基类 - >绝对不是POCO.*但是*:使用EF4,你可以选择打开POCO支持,在这种情况下你的类不是从任何特定的基类派生的,不需要实现任何特定的接口,也不需要任何属性要么 - >纯POCO. (2认同)
  • 请参阅此处了解用于EF的TOP自动生成POCO http://blogs.msdn.com/adonet/pages/walkthrough-poco-template-for-the-entity-framework.aspx (2认同)