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();