我有以下课程
public class Person
{
public virtual int Id { get; set; }
}
public class Employee : Person
{
public virtual int EmployeeProperty { get; set; }
}
public class Customer : Person
{
public virtual int CustomerProperty { get; set; }
}
从概念上讲,同一个人既可以是员工,也可以是客户。此外,Person可以在没有Employee或Customer记录的情况下存在。使用Table Per Subclass如何使其工作。
现在看来,我没有办法让NHibernate以这种方式工作。如果我创建一个Person,然后尝试使用现有的Person Id创建一个Employee,NHibernate仍然会尝试插入Person。有没有办法让NHibernate意识到我已经有了一个Person而只想添加Employee记录?
如果可能的话,我宁愿不去Table Per Class或Table Per Hierarchy。
答案 0 :(得分:3)
你的模特不正确。如果一个人可以 一个客户和一个员工,那么你不应该使用继承(一个员工是一个人),但是组合(一个员工有一个[相应的]人或一个人有 - 员工[角色])
答案 1 :(得分:0)
这在OO的实践中不起作用。您可能希望遵循一条路线,该路线表明某人具有作为客户的角色,并且还具有成为员工的角色。
这是一个简单的例子,说明为什么这不能用于一般的OO术语。
Person a = new Employee();
Customer b = (Customer)a; // exception