В моем контексте EF у меня есть иерархия классов, управляемая таблицей на основе иерархического подхода.EF - Извлечение всех записей таблицы определенного типа для каждой иерархии
Поэтому у меня есть базовый абстрактный класс и куча классов, которые вытекают из него:
public abstract class BaseClass
{
[Required]
public int Id {get; set;}
...
}
public abstract class ExtendedClass1 : BaseClass
{
...
}
public abstract class ExtendedClass2 : BaseClass
{
...
}
Классов настроены следующим образом:
public class ExtendedClass1Configuration :
EntityTypeConfiguration<ExtendedClass1>
{
...
this.Map(m => m.Requires("Discriminator").HasValue("ExtendedClass1"));
}
Чтобы получить доступ к базе данных я использую хранилище , основанный на общем хранилище:
public abstract class Repository<TEntity> : IRepository<TEntity> where TEntity: BaseClass
{
protected DbContext context;
DbSet<TEntity> GetSet()
{
return this.context.Set<TEntity>();
}
public virtual void Add(TEntity entity)
{
this.GetSet().Add(entity);
}
...
}
public class BaseClassRepository : Repository<BaseClass>, IBaseClassRepository
{
...
}
Я хочу добавить метод к своему репозиторий, который будет извлекать все классы определенного подтипа (например, все записи типа ExtendedClass1
).
Я попробовал несколько подходов следующим образом, без особого успеха:
public IEnumerable<BaseClass> GetByType(Type type) {
return context.Set<BaseClass>().OfType<type>();
}
Это дает мне следующую ошибку компиляции:
The type or namespace name 'type' could not be found
Другой подход, который я пытаюсь сейчас это что-то вроде этого:
public IEnumerable<TBaseClass> GetByType() where TBaseClass : BaseClass {
return context.Set<BaseClass>().OfType<TBaseClass>();
}
Что я делаю неправильно? Как я могу это реализовать?
'OfType();' что это, черт возьми? (если не ошибка) –
Will
Проверьте эту строку на методе GetByType: return context.Set() .OfType (); Это должен быть контекст возврата. Установить () .OfType (); Имя типа не является переменной. –
Эта строка не компилируется, это только, чтобы сообщить вам различные подходы, которые я пытаюсь @Will – user449689