У меня есть общая реализация репозитория поверх Linq2SQL. В основном, он использует таблицу на контекст данных, чтобы получить IQueryable, а затем запускать запросы над ним:Общая проблема репозитория Linq2SQL с наследованием
private readonly IQueryable _queryable;
private readonly DataContext _context;
public Repository(DataContext context)
{
_context = context;
_queryable = context.GetTable().AsQueryable();
}
Проблема с наследованием. Если у меня есть две наследуемые таблицы, генерируется исключение:
[InheritanceMapping(Code="1", Type=typeof(Staff))]
[InheritanceMapping(Code="2", Type=typeof(Resident), IsDefault=true)]
public class Person { }
public class Resident : Person { }
public class Staff : Person { }
Теперь при создании Repository создается исключение:
System.InvalidOperationException: Не удалось получить таблицу для наследования подтипа «персонала», попробуйте таблицу человека.
Теперь история здесь не заканчивается. Я могу переключиться на использование репозитория для запросов, но когда дело доходит до сохранения объектов, мне нужно использовать производный тип (например, «Персонал») или другое исключение, поэтому я получаю два разных экземпляра репозитория: один для сохранения и операции обновления, а другой для запросов, в то время как одного должно быть достаточно.
Любая помощь очень ценится.
Вы когда-нибудь сталкивались с этой проблемой? У меня такая же проблема с аналогичной иерархией наследования. – Grasshopper 2012-06-14 20:10:59