EF 4.1每层次表

时间:2011-10-12 18:24:51

标签: entity-framework-4.1

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

PERSON

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

PersonType

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

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

如果我现在构建它而没有在Employee实体中指定条件和鉴别器,那么它构建正常。如果我按照教程并指定HourlyRate作为条件并使用“Is”“Not Null”作为鉴别器,则构建正常。

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

  

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

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

我以为我能够在另一个项目之前让它工作但是我不确定这个改变了什么。我能想到的唯一不同的是我最近更新到EF 4.1。

这是我在设计师中设置的

enter image description here

非常感谢任何建议!

1 个答案:

答案 0 :(得分:0)

我明白了。将PersonType实体添加到设计器中会抛弃所有内容。关键是删除PersonType导航属性以及PersonTypeID属性。但由于我包含了PersonType实体,因此删除PersonTypeID会破坏外键约束。

通过不包含PersonType实体,我可以删除PersonTypeID,并且所有内容都成功编译。