【问题标题】:Entity Framework 4 and Public PropertiesEntity Framework 4 和公共属性
【发布时间】:2010-05-05 21:51:28
【问题描述】:

我正在做一个项目,我正在使用 Entity Framework 4 作为我的 ORM。我正在实施 POCO 课程。我在 EF 4 和 POCO 中看到的每个示例都使用公共设置器实现所有属性。这是我可以将 POCO 类与 EF 4 一起使用的唯一方法吗?我所有的二传手都需要公开吗?

【问题讨论】:

    标签: entity-framework poco


    【解决方案1】:

    这取决于你如何使用你的实体。

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

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

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

    另一种妥协的方法是使所有持久状态受保护/虚拟。然后您可以通过代理进行更改跟踪。属性不必公开。

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

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 我明白为什么属性被标记为虚拟但是为什么属性的设置者必须是公共的?我的对象上有我不希望外部对象修改的 ID。
      • 那属性怎么设置?
      • 这就是我要问的问题。我有作为对象标识符的属性,一旦加载/创建对象就不应修改。如果我使用的是 EF 4 和 POCO 类,这似乎是不可能的。
      • 您可以更改 T4 模板以将所有属性设为私有,但我怀疑它是否会起作用,因为在加载/创建对象时,它必须设置这些属性。
      • 这是您希望使用 POCO 生成器生成类的方式吗? rogeralsing.com/2009/05/21/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-15
      • 1970-01-01
      • 1970-01-01
      • 2016-03-20
      相关资源
      最近更新 更多