У меня есть DbContext с настроенным разные DbSet
со всеми типами, которые являются производными от одного и того же базового класса:
public class Foo : Entity { }
public class Bar : Entity { }
MyDbContext : DbContext
{
public DbSet<Foo> Foos { get; set; }
public DbSet<Bar> Bars { get; set; }
}
Возможно ли получить все сущности, которые имеют базовый класс Entity
, в одном запросе, например :
DbContext.Set<Entity>(); // doesn't work
Я попытался ввести явный DbSet
в DbContext, но в результате получается одна большая таблица для всех сущностей в базе данных.
Дополнительный вопрос: Если это каким-то образом сработает, как насчет запросов интерфейсов?
Изменить:
Я выполнил инструкции по ссылке Ладислава Мрнки и сделал следующие сопоставления:
MyDbContext : DbContext
{
public DbSet<Entity> Entities { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// Foo
modelBuilder.Entity<Foo>().Map(x =>
{
x.MapInheritedProperties();
x.ToTable("Foo");
})
.HasMany(x => x.Tags).WithMany();
modelBuilder.Entity<Foo>()
.Property(x => x.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
// Bar
// same thing for Bar and a bunch of other Entities
base.OnModelCreating(modelBuilder);
}
}
Это теперь выдает ошибку
Свойство «Id» не является объявленным свойством для типа «Foo». Убедитесь, что свойство не было явно исключено из модели с помощью метода Ignore или аннотации данных NotMappedAttribute. Убедитесь, что это допустимое примитивное свойство.
Я также пытался явно задать ключ для свойства Id
:
modelBuilder.Entity<Foo>().Map(x => {...})
.HasKey(x => x.Id)
.HasMany(x => x.Tags).WithMany();
Что мне не хватает?