什么是POCO的实体框架

时间:2010-04-20 03:50:28

标签: c# .net entity-framework poco

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

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

4 个答案:

答案 0 :(得分:45)

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

持久性无知意味着,在业务逻辑层或更高层运行的代码中的任何内容都不会对数据库的实际设计,您正在运行的数据库引擎,以及检索对象的方式和时间一无所知从或坚持到数据库。对于MEF,通过处理POCO并使用LINQ执行查询(即,不要求用户创建任何SQL查询来检索所需对象)来实现持久性无知。

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

答案 1 :(得分:4)

POCO =普通的旧CLR对象。

普通的旧CLR(即C#或VB)对象意味着我在编写程序时可以说C#或VB,而不必担心像

这样的深奥数据库语言
UPDATE MYTABLE SET MYFIELD1 = @MYPARAMETER1, MYFIELD2 = @MYPARAMETER2 BLAH BLAH

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

答案 2 :(得分:1)

POCO类是不依赖于任何框架特定基类的类。它就像任何其他正常的.net类一样,它被称为“普通的旧CLR对象” 这些POCO实体(也称为持久性无知对象)支持大多数与EntityObject派生实体相同的LINQ查询。

答案 3 :(得分:0)

POCO =普通的旧CLR对象

POCO福利:

技术不可知论是一种幸福:这个概念通常围绕PI(持久性无知),但不仅如此。持久性无知意味着应该清除您的实体与框架(通常是ORM)强加给您的任何与持久性相关的代码约束。这是,例如,如果您有属性级别映射,其中这些属性不属于您的域,但只是因为某些框架希望它们在那里,那么您的域不是持久性无知的。 Sidar said here