【问题标题】:Entity Framework 5.0 and Inheritance实体框架 5.0 和继承
【发布时间】:2013-08-25 23:51:15
【问题描述】:

我有几个这样的类设置:

成员 (摘要)

  • 属性1
  • 属性 2(等)

组织成员:成员

  • 属性3
  • Property4(等)

PrivateMember:会员

  • 物业5
  • 属性6(等)

然后我有三个结构相同的数据库表 - 两种类型的成员实体共有的数据存储在 Member 表中,特定于 OrganizationMember 的数据存储在相应的表中,特定于 PrivateMember 的数据存储在相应的表中. Member 表的 Id 与其他两个表的 Id 相同,因为它是 1-1 关系 - 只是一种分类,其中每种类型都有特定的东西。在这里可能无关紧要,但没有什么可以直接成为成员 - 它们必须是两种类型之一。

当我设置我的映射时(使用 Fluid - 使用 EF 的所有内容都是手工编码的,没有设计器和 EDMX 文件),如果我告诉 OrganizationMember 忽略从 Member 继承的属性,我会得到“你不能在属性上使用 Ignore 方法” [PropertyName]' 在类型 '[TypeName]' 上,因为此类型继承自映射此属性的类型 '[BaseType]'。要从模型中排除此属性,请在基本类型上使用 NotMappedAttribute 或 Ignore 方法。错误。但是,当我告诉它不要忽略从 Member 继承的那些属性时,它会引发错误(“从 [...] [TypeName] 开始的映射片段的问题正在映射到表 Member 中的相同行。映射条件可用于区分这些类型映射到的行。”)。这里真正令人沮丧的部分是错误的属性根本不应该为任何一个实体映射 - 它们是我整体框架设计的一部分,但根本没有数据库相关性,也不存在。

我会认为这是一个非常标准的设置,但 EF 确实不是很好。有什么建议吗?

【问题讨论】:

    标签: c# entity-framework inheritance entity-framework-5 poco


    【解决方案1】:

    本文描述了继承类型的映射。它列出了处理映射到继承的不同方法,具体取决于您想要实现的目标。

    http://msdn.microsoft.com/en-us/data/jj591617.aspx#2.5

    【讨论】:

    • 这看起来完全像我所追求的。我会进一步审查它,如果是这样,我会将其标记为已接受。感谢您的快速回复!
    • 映射继承类型有点棘手......所以如果您无法弄清楚,请发布您的映射代码示例,也许我们可以提供帮助。
    • 花了一些功夫,但我让它工作了。 Member 类使用了一个名为 Address 的密封类,其目标是拥有一个公共的 Address 对象来共享所有需要它的东西(而不是向每个单独的类添加所有地址特定的属性)。事实证明 EF 不喜欢你这样做,即使你明确告诉它这些属性的去向。感谢您为我指明正确的方向!
    【解决方案2】:

    在 Code-First 中可以使用三种不同的方法来表示继承层次结构:Table Per Hierarchy、Table Per Type 和 Table Per Concrete class。 Here is details.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-19
      • 2010-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多