DbSet<T>
同じ基本クラスから派生するすべてのタイプで異なるを設定したDbContextがあります。
public class Foo : Entity { }
public class Bar : Entity { }
MyDbContext : DbContext
{
public DbSet<Foo> Foos { get; set; }
public DbSet<Bar> Bars { get; set; }
}
Entity
次のように、1つのクエリで基本クラスを持つすべてのエンティティを取得することは可能ですか?
DbContext.Set<Entity>(); // doesn't work
DbSet<Entity>
DbContextに明示的なものを導入しようとしましたが、データベース内のすべてのエンティティに対して1つの大きなテーブルが作成されます。
追加の質問:これが何らかの形で機能する場合、インターフェイスのクエリはどうですか?
編集:
Ladislav Mrnkaのリンクの指示に従い、次のようにマッピングを行いました。
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();
私は何が欠けていますか?