【问题标题】:EF 4.1 Table-per-HierarchyEF 4.1 表每层次结构
【发布时间】:2011-10-14 15:15:53
【问题描述】:

我正在尝试从http://msdn.microsoft.com/en-us/library/dd793152.aspx 实现一个简单的 TPH 示例。我有两张桌子:

[PersonID] [int] IDENTITY(1,1) NOT NULL,
[PersonTypeID] [int] NOT NULL,
[Name] [varchar](50) NOT NULL,
[HourlyRate] [int] NULL

人物类型

[PersonTypeID] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](50) NOT NULL

在 EF 设计器中,我按照教程创建了一个名为 Employee 的新实体,并将 Person 指定为基本类型。然后将 HourlyRate 属性移动到 Employee。在 Mapping Details 窗口中,我将实体映射到 Person 表,并将 HourlyRate 属性正确映射到正确的 DB 字段。然后我将 Person 设置为 abstract。

如果我现在构建它而不在 Employee 实体中指定条件和鉴别器,它构建得很好。如果我按照教程并将 HourlyRate 指定为条件并使用“Is”“Not Null”作为鉴别器,它构建得很好。

但是我想使用 PersonTypeID 作为判别器,并且 Employee 的 PersonTypeID 应该为 1。所以我选择 PersonTypeID 作为条件字段,“=”作为运算符,1 作为值。当我构建时,VS 告诉我它是成功的,但在错误窗口中也有一些东西。

错误 3032:从行开始映射片段时出现问题 798:条件成员“Person.PersonTypeID”的条件不是 'IsNull=False' 已映射。要么删除条件 Person.PersonTypeID 或将其从映射中删除。

我在另一篇文章中读到我需要删除 Person 实体中的 PersonType 导航属性。所以我尝试了,但仍然遇到同样的错误。

我认为我之前可以在另一个项目中使用它,但我不确定这个项目发生了什么变化。我能想到的唯一不同的是我最近更新到了 EF 4.1。

这是我在设计器中设置的

非常感谢任何建议!

【问题讨论】:

    标签: entity-framework-4.1


    【解决方案1】:

    我想通了。将 PersonType 实体添加到设计器会导致所有问题。关键是删除 PersonType 导航属性以及 PersonTypeID 属性。但是由于我包含了 PersonType 实体,因此删除 PersonTypeID 会破坏外键约束。

    不包括 PersonType 实体,我可以删除 PersonTypeID,一切都编译成功。

    【讨论】:

      猜你喜欢
      • 2013-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多