2010-07-19 2 views
1

J'essaie d'utiliser des types hérités avec EF, qui a été tout frais et gravy jusqu'à maintenant.Entity Framework plusieurs types hérités simultanés

J'ai un type de base (Person) et deux types qui héritent de la personne (Employee & Customer). Je rencontre un problème quand je veux qu'une personne soit un employé et un client en même temps. Par exemple:

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"); 
} 

Si je mapper une personne à un employé et un client « Personne client » renvoie toujours false jusqu'à ce que je supprimer le mappage des employés de la personne.

Et je ne suis pas sûr de ce que cela s'appelle ... mais il y a une table par type (Personne est une table, Client est une table, et Employé est une table dans la DB).

Répondre

2

Vous ne pouvez pas faire cela car vous ne pouvez pas avoir plusieurs héritages.

Dans vos tables DB Customer et Employee, je suggère une clé foriegn dans la table Person. Ensuite, dans votre modèle d'objet, le client et l'employé seraient une propriété Person.

Comme vous simplement vouloir itérer si elles sont des clients ou de LINQ simplement l'utilisation de l'employé sur les collections qui devraient être sur le contexte Entité

+0

Sucky :( Lot de code pour changer maintenant. Merci pour votre aide –

0

Peut-être la classe client pourrait avoir une propriété (essentiellement un pointeur) appelé EmpObj (de type Employee) pouvant pointer vers l'objet Employee instancié. Si elle est nulle, le client donné ne sera pas également un employé. Vous pouvez faire la même chose dans la classe Employee et lui donner une propriété appelée CustObj qui pointe sur l'objet client instancié pour l'employé donné.

Clair comme de la boue? Essentiellement, ce que vous demandez ici est de savoir si un client est également un employé, et vice-versa. Si une personne est un client et un employé, alors vous devriez avoir des instances des deux classes pour représenter cette personne. Il s'agit simplement de sensibiliser les clients et les employés les uns aux autres.

+0

Je vois ce que vous essayez de dire ici maintenant, mais je pense que cela est plus confus que tout va revenir à l'utilisation des propriétés de navigation pour obtenir l'employé Je pensais que c'était cool au début (puisque toutes les propriétés étaient disponibles dans un objet qui rendait le code plus clair), mais évidemment dans ce cas, ce n'est pas la meilleure solution .. Merci pour votre Aidez-moi –

Questions connexes