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

Inheritance 在TPT映射EF4.1中添加不同子类型的多个继承实例,inheritance,entity-framework-4,entity-framework-4.1,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<Cu

给定型号:

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();
当我尝试将用户添加到person 1时

context.Set<Customer>().Add(new User { Id = 1, Password = "0" });
context.SaveChanges();
context.Set().Add(新用户{Id=1,Password=“0”});
SaveChanges();
实体框架忽略Id=1并创建一个新的人。 如何让它工作

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

这毫无意义,因为客户和用户不指给某人,而是一个人。如果您有一个类型为
Customer
的对象和另一个类型为
User
的对象,则没有称为
Person
的第三个标识。只有两个标识,并且都具有从
Person
基类继承的属性

如果您的领域中存在这样的情况,即一个人可以同时是客户和用户,那么使用继承层次结构对此进行建模并不是理想的方法。在这两个类中,最好都有一个指向某人的引用,如下所示:

公共类人物
{
公共int Id{get;set;}
}
公共类客户
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共int PersonId{get;set;}
公众人物{get;set;}
}
公共类用户
{
公共int Id{get;set;}
公共字符串密码{get;set;}
公共int PersonId{get;set;}
公众人物{get;set;}
}
context.Set<Customer>().Add(new User { Id = 1, Password = "0" });
context.SaveChanges();