在TPT Mapping EF4.1中添加不同子类型的多个继承实例

时间:2011-10-17 16:55:54

标签: inheritance entity-framework-4 entity-framework-4.1

鉴于模型:

public abstract class Person 
{
    public int Id {get;set;}
}

public class Customer : Person 
{
    public string Name {get;set;}
}
public class User : Person 
{
    public string Password {get;set;}
}

我需要添加引用同一个人的客户用户

context.Set<Customer>().Add(new Customer { Name = "X" });
context.SaveChanges();

现在我的数据库中有2个条目

Persons
Id: 1

Customers
Id: 1
Name: X

当我尝试将用户添加到此人

context.Set<Customer>().Add(new User { Id = 1, Password = "0" });
context.SaveChanges();

实体框架忽略 Id = 1 并创建一个新人。 如何让这个工作?

1 个答案:

答案 0 :(得分:2)

  

“我需要添加一个客户和一个引用同一个人的用户”

这没有任何意义,因为客户和用户不推荐给某人,他们 一个人。如果您有类型为Customer的对象和另一个类型为User的对象,则没有名为Person的第三个标识。只有两个身份,并且都具有从Person基类继承的属性。

如果您的域中存在这样的情况:一个人可以成为客户,而用户同时使用继承层次结构进行建模则不是理想的方法。你最好在两个指向一个人的类中都有一个引用,如下所示:

public class Person 
{
    public int Id {get;set;}
}

public class Customer
{
    public int Id {get;set;}
    public string Name {get;set;}
    public int PersonId {get;set;}
    public Person Person {get;set;}
}

public class User
{
    public int Id {get;set;}
    public string Password {get;set;}
    public int PersonId {get;set;}
    public Person Person {get;set;}
}