2010-12-06 3 views
0

У меня есть общая реализация репозитория поверх 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: Не удалось получить таблицу для наследования подтипа «персонала», попробуйте таблицу человека.

Теперь история здесь не заканчивается. Я могу переключиться на использование репозитория для запросов, но когда дело доходит до сохранения объектов, мне нужно использовать производный тип (например, «Персонал») или другое исключение, поэтому я получаю два разных экземпляра репозитория: один для сохранения и операции обновления, а другой для запросов, в то время как одного должно быть достаточно.

Любая помощь очень ценится.

+0

Вы когда-нибудь сталкивались с этой проблемой? У меня такая же проблема с аналогичной иерархией наследования. – Grasshopper 2012-06-14 20:10:59

ответ

0

Я думаю, что это потому, что вы классы Staff и Resident не наследуйте от класса Person.

+0

Спасибо, что указали, что это была опечатка. Я исправил вышеприведенный фрагмент кода. – 2010-12-06 10:24:58

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