Entity framework 实体框架4和公共属性

Entity framework 实体框架4和公共属性,entity-framework,poco,Entity Framework,Poco,我正在从事一个项目,我正在使用EntityFramework4作为我的ORM。我正在实现POCO类。我在EF4和POCOs中看到的每个示例都使用公共setter实现所有属性。这是我使用EF4的POCO类的唯一方法吗?我的所有设置器都需要公开吗?使用POCO生成器 它们是虚拟的,用于更改跟踪(如果这是您想要的) 这取决于您如何使用实体 “POCO”实体是一种谎言(在任何框架中)。真正的POCO可能具有私有或非虚拟状态,并且没有序列化规定,因此无法进行更改跟踪。在O/R映射中,您唯一能做的就是将

我正在从事一个项目,我正在使用EntityFramework4作为我的ORM。我正在实现POCO类。我在EF4和POCOs中看到的每个示例都使用公共setter实现所有属性。这是我使用EF4的POCO类的唯一方法吗?我的所有设置器都需要公开吗?

使用POCO生成器

它们是虚拟的,用于更改跟踪(如果这是您想要的)


这取决于您如何使用实体

“POCO”实体是一种谎言(在任何框架中)。真正的POCO可能具有私有或非虚拟状态,并且没有序列化规定,因此无法进行更改跟踪。在O/R映射中,您唯一能做的就是将它们具体化

所以当人们谈论映射“POCO”时,通常会有某种形式的妥协来允许变更跟踪。他们不是真正的“POCO”;他们是“所谓的POCO”

妥协的一种方法是将所有持久状态公开。然后,您可以通过快照进行更改跟踪

另一种折衷方法是使所有持久状态都受保护/虚拟。然后,您可以通过代理进行更改跟踪。这些财产不必是公共的


EF还不支持参数化构造函数,因此构造函数注入(可能是针对“纯”POCO的最佳解决方案)现在不是一个选项。

我理解为什么属性被标记为虚拟,但为什么属性的设置器必须是公共的?我不希望外部对象修改对象上的ID。那么如何设置属性?这就是我要问的问题。我的属性是对象标识符,一旦加载/创建对象,就不应该修改这些属性。如果我使用EF 4和POCO类,这似乎是不可能的。您可以更改T4模板以将所有属性设置为私有,但我怀疑它是否有效,因为加载/创建对象时,它必须设置这些属性。您是否希望使用POCO生成器生成类?