什么是POCO的实体框架

.net c# entity-framework poco

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

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

一般承认的答案

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

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

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


热门答案

POCO =普通的旧CLR对象。

普通的旧CLR(即C#或VB)对象意味着我在编写程序的过程中可以说C#或VB,而不必担心像我这样深奥的数据库语言

UPDATE MYTABLE SET MYFIELD1 = @MYPARAMETER1, MYFIELD2 = @MYPARAMETER2 BLAH BLAH

EF生成的实体== POCO(间接)连接到数据库。



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因