我对TPT + EF6有一个很大的疑问。
在我的数据库模型中,我有一个表Person
(我的应用程序中人员的基本信息),我有Supplier
和Consumer
的表格。
我的课程是:
//to table dbo.Person
public class Person
{
public long Id {get; set;} //is pk
public string Name {get; set;}
}
//to table dbo.Supplier
public class Supplier : Person
{
public long Id {get; set;}//is pk and fk
public string ProductName {get; set;}
}
//to table dbo.Consumer
public class Consumer
{
public long Id {get; set;} //is pk and fk
public string budget {get; set;}
}
如果我有一个既是供应商又是消费者的人,我从相同/不同的DBContext
获取记录或从另一个实体导航,那么EF会抛出异常:
EntitySet
Person
中的所有对象都必须具有唯一的主键。但是,类型为Supplier
的实例和类型为Consumer
的实例都具有相同的主键值EntitySet=Person;ID=20
。
有没有办法在TPT继承中指定一个鉴别器? 我该如何解决这个问题?
答案 0 :(得分:0)
我建议您实际需要的模式是每个具体类的表
这可以通过
实现scope :available_for_user, -> (user_id) { joins(:collaborations).where.not(collaborations: {user_id: user_id}) }
请记住将以下内容放入您的dbcontext
public class Person
{
public int Id { get; set; }
public Supplier Supplier { get; set; }
public Consumer Consumer { get; set; }
}
public class Supplier
{
public int Id { get; set; }
public string ProductName { get; set; }
}
public class Consumer
{
public int Id { get; set; }
public string Budget { get; set; }
}