2010-07-19 2 views
1

Я пытаюсь использовать унаследованные типы с EF, который до сих пор был всем классным и соленым.Entity Framework одновременные множественные унаследованные типы

У меня есть базовый тип (Лицо) и два типа, которые наследуют человека (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"); 
} 

Если я сопоставить Человек с сотрудником и клиентом, «Человек является Клиент» всегда возвращает ложь, пока не удалите отображение Employee с человека.

И я не уверен, что это называется ... но есть таблица за тип (Person - это таблица, Customer - это таблица, а Employee - таблица в БД).

ответ

2

Вы не можете сделать это, так как вы не можете иметь множественное наследование.

В ваших таблицах клиента и сотрудника DB я предложил бы ключ foriegn в таблицу Person. Тогда в вашей объектной модели Клиент и Сотрудник будут иметь свойство Person.

Как вы просто хотите перебрать, являются ли они клиентами или просто использовать LINQ работника на тех коллекциях, которые должны быть на Entity контексте

+0

Sucky :( Лота кода теперь изменится. Спасибо за вашу помощь –

0

Возможно, класс Клиента может иметь свойство (по существу указатель) под названием EmpObj (типа Employee), который может указывать на экземпляр объекта Employee. Если он равен нулю, то данный Клиент также не будет Работником. Вы можете сделать то же самое в классе Employee и дать ему свойство CustObj, которое указывает на экземпляр объекта Customer для данного Сотрудника.

Очистить как грязь?

По существу, вы просите здесь знать, является ли Клиент также сотрудником, и наоборот. Если человек является Клиентом и Работником, тогда у вас действительно должны быть экземпляры обоих классов для представления этого лица. Это просто вопрос информирования Клиента и Сотрудника друг о друге.

+0

Я понимаю, что вы пытаетесь сказать, здесь и сейчас, но я думаю, что это более запутанное, чем просто вернуться к использованию навигационных свойств, чтобы получить Работник и объекты Customer вместо унаследованных типов. Сначала я подумал, что это было классно (поскольку все свойства, доступные в одном объекте, которые сделали некоторый более четкий код), но, очевидно, в этом случае это не лучшее решение. Спасибо за ваше Помогите –

Смежные вопросы