我正在尝试使用带有EF的继承类型,直到现在它都已经很酷了。
我有一个基类型(Person)和两个继承人(Employee& Customer)的类型。当我希望一个人同时成为一名员工和一名客户时,我遇到了一个问题。例如:
Person person = db.Persons.Single(p => p.id == id);
if (person is Employee)
{
Console.WriteLine("Person is an employee");
}
//True only if person is Employee == false
if (person is Customer)
{
Console.WriteLine("Person is a customer");
}
如果我将Person映射到Employee和Customer,则“Person is Customer”始终返回false,直到我从该person中删除Employee映射。
我不确定这是什么叫...但是每个类型都有一个表(Person是表,Customer是表,Employee是DB中的表)。
答案 0 :(得分:2)
由于您无法进行多重继承,因此无法执行此操作。
在您的DB Customer和Employee表中,我建议在Person表中输入密钥。然后在您的对象模型中,Customer和Employee将有一个Person属性。
由于您只想迭代他们是客户还是员工,只需在应该在实体上下文中的那些集合上使用linq
答案 1 :(得分:0)
也许Customer类可以有一个名为EmpObj(类型为Employee)的属性(本质上是一个指针),它可以指向实例化的Employee对象。如果它为null,那么给定的Customer也不会是Employee。您可以在Employee类中执行相同的操作,并为其指定一个名为CustObj的属性,该属性将指向给定Employee的实例化Customer对象。
清除泥土?
基本上你在这里问的是要知道客户是否也是员工,反之亦然。如果一个人是客户和员工,那么你真的应该有两个类的实例来代表那个人。这只是让客户和员工彼此了解的问题。