2010-07-19 62 views
1

我想使用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"); 
} 

如果我一个人映射到员工和客户,“人是客户”总是返回false,直到我从身上取出了员工的映射。

我不确定那叫什么......但是每种类型都有一个表(Person是一张表,Customer是一张表,Employee是DB中的一张表)。

回答

2

你不能这样做,因为你不能有多重继承。

在您的数据库客户和员工表中,我会建议在Person表中输入foriegn键。然后在你的对象模型中,Customer和Employee将会有一个Person属性。

当你只是想遍历无论是客户还是对这些藏品员工只使用LINQ这应该是对实体上下文

+0

的代码苏茨基:( 地块的改变现在。感谢您的帮助 – 2010-07-19 20:10:50

0

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

清澈如泥?

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

+0

我看你是想现在在这里说什么,但是我觉得这不仅仅是要回用的导航性能,以获得员工更加混乱和Customer对象,而不是继承的类型,我认为它起初很酷(因为所有的属性在一个对象中提供了一些更加整洁的代码),但显然在这种情况下它不是最好的解决方案。帮帮我 – 2010-07-19 20:23:50