实体框架逻辑实体错误

时间:2011-06-08 02:09:46

标签: .net entity-framework entity-framework-4

我想在我的模型中有一个Person实体。没有相应的表格,也没有鉴别符。我只是希望它作为共享的其他实体的公共基类(我想要定义具有共同功能的public partial class Person

所以,例如,我希望:

// this class has no corresponding table in the DB
public partial abstract class Person 
{
    public int Id {get; set;}
    public string FirstName {get; set;}
    public string LastName {get; set;}

    public string DisplayName { get { return string.Format("{0}, {1}", LastName, FirstName); } }
}

// this corresponds to dbo.Users
public partial class User : Person
{

}

// this corresponds to dbo.Contacts
public partial class Contact : Person 
{
}

因此,我创建了一个抽象实体Person,将其设置为User和Contact实体的基类,然后添加了我的属性,并为db.Users和dbo设置了映射。对于PK Id,FirstName和dbo.Contacts LastName属性。

我收到错误:

 3032: Problem in mapping fragments starting at lines 2109
..... are being mapped to the same rows in table .... Mapping conditions can be used to distinguish the rows that these types are mapped to.

我怎样才能使这个工作?

1 个答案:

答案 0 :(得分:1)

您必须在EDMX文件中定义Person实体,并从EDMX中的User继承ContactPersonPerson中定义的任何属性都不能出现在继承的实体中。然后转到映射详细信息并将继承的实体映射到相应的表。

请注意,主键现在必须对所有人都是唯一的 - 不仅仅是派生实体。