2010-12-06 2 views
2

Я реализовал наследование с полем дискриминатора, поэтому все мои записи находятся в одной таблице. Мой базовый тип - Person (также имя таблицы), а Driver и Passenger наследуют его. Я получаю экземпляры правильного типа (Драйвер и Пассажир), когда я выполняю запрос в контексте объекта для Лица. Пример:Наследование EF4 и хранимые процедуры

var q = from d in ctx.Person 
     select d; 

Но я также создать функцию, которая вызывает хранимую процедуру и отображенный вывод функции к типу лица. Но теперь я получаю список Person, а не драйверы или пассажиры, когда я выполняю этот метод.

Кто-нибудь знает, как это решить или это ошибка в EF4?

ответ

1

AFAIK, вы не можете использовать отображение дискриминатора (например, TPH) при работе с сопоставлениями хранимых процедур.

Хранимая процедура должна быть сопоставлена ​​сложному типу или настраиваемому объекту (например, POCO), сопоставление не может быть условным.

Что вы можете сделать, это сопоставить его с обычным POCO, но затем проект, который приводит к набору соответствующего производного типа (ручная дискриминация).

например:

public ICollection<Person> GetPeople() 
{ 
    var results = ExecuteFunction<Person>(); // result is ObjectResult<Person> 
    ICollection<Person> people = new List<Person>(); 

    foreach (var result in results) 
    { 
     if (result.FieldWhichIsYourDiscriminator == discriminatorForDriver) 
     { 
     people.Add((Driver)result); 
     } 

     // other discriminators 
    } 

} 

Если ваш всегда ожидает коллекцию одного типа (например только драйверы), то вам не нужен цикл Еогеасп, вы можете просто добавить диапазон. Вышесказанное на случай, если вы ожидаете смешанную сумку разных типов людей.

Было бы интересно увидеть другие ответы, и если есть лучший способ, но, но выше должно работать.

+0

Проблема в том, что мое поле дискриминатора не отображается на объекте, и я хотел бы сохранить его таким образом, потому что мы не хотим раскрывать это свойство разработчикам, которые используют нашу библиотеку. Поэтому я боюсь, что мне понадобится собственное решение :-( – 2010-12-07 07:15:41

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