实体框架同时存在多个继承类型

时间:2010-07-19 19:37:47

标签: c# entity-framework .net-4.0

我正在尝试使用带有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中的表)。

2 个答案:

答案 0 :(得分:2)

由于您无法进行多重继承,因此无法执行此操作。

在您的DB Customer和Employee表中,我建议在Person表中输入密钥。然后在您的对象模型中,Customer和Employee将有一个Person属性。

由于您只想迭代他们是客户还是员工,只需在应该在实体上下文中的那些集合上使用linq

答案 1 :(得分:0)

也许Customer类可以有一个名为EmpObj(类型为Employee)的属性(本质上是一个指针),它可以指向实例化的Employee对象。如果它为null,那么给定的Customer也不会是Employee。您可以在Employee类中执行相同的操作,并为其指定一个名为CustObj的属性,该属性将指向给定Employee的实例化Customer对象。

清除泥土?

基本上你在这里问的是要知道客户是否也是员工,反之亦然。如果一个人是客户和员工,那么你真的应该有两个类的实例来代表那个人。这只是让客户和员工彼此了解的问题。