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
}
}
Если вы всегда ожидаете коллекцию одного типа (например, только драйверы), то вам не понадобится цикл foreach, вы можете просто добавить диапазон.Выше приведено на тот случай, если вы ожидаете смешанную сумку разных людей.
Было бы интересно увидеть другие ответы, и если есть лучший способ - но вышеприведенное должно сработать.