Entity Framework 4.1 Code First: получить все сущности с определенным базовым классом

У меня есть 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();

Что мне не хватает?

7
задан davehauser 28 April 2011 в 19:01
поделиться