实体框架逻辑实体错误

3

我希望在我的模型中有一个人物实体。没有相应的表和鉴别器。我只是想将其作为其他一些实体共享的普通基类(我想定义一个具有公共功能的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,将其设置为用户和联系人实体的基类,然后添加了我的属性,并设置了 dbo.Users 和 dbo.Contacts 的 PK Id、FirstName 和 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个回答

1

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

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


最后一句话是问题所在。由于这些表没有连接,这不会成立。我该如何解决这个问题? - Jeff
你不需要在表之间建立连接,只需确保它们的键不会冲突即可。 - Ladislav Mrnka
这些是包含大量数据的现有表,每个表都有一个种子为1的主键(PK)。我该如何确保这一点? - Jeff
除非您修改数据,否则您无法使用继承。 - Ladislav Mrnka
感谢您的回答。这是Entity Framework的又一大胜利。 - Jeff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接