Entity Frameworkコア:派生型からDbSetを動的に取得する方法

c# entity-framework entity-framework-core

質問

私はSectorという名前の次の抽象クラスを持っています:

public abstract class Sector
{
    public string ID {get; set;}
    public string Name {get; set;}
    public Sector(){}
 }

Sectorから継承した第二のクラス、 GICSSector Sector

public class GICSSector: Sector
{
   public virtual ICollection<GICSIndustryGroup> IndustryGroups {get; set;}
}

私は私のDbContext以下のDbSetを持っています:

public DbSet<GICSSector> GICSSectors {get; set;}

私は、CSVファイルからデータを読み込み、その場でオブジェクトを作成し、次にSQLLiteデータベースにオブジェクトを格納する汎用メソッドを記述しようとしています。

public static void UpdateEntitiesFromCSV<T>(MyContextFactory factory, string fileName) where T : class
{
    var entities = new List<T>();

    // ... Load entities from the CSV
    // ... Create the objects and add them to the list

    // Add the objects to the database

    using (var db = factory.Create(new DbContextFactoryOptions()))
    {
         var set = db.Set<T>();

         foreach(T e in entities)
         {
             set.Add(e);
         }

         db.SaveChanges();
    }

}

私は流暢なAPIを使ってテーブルを管理しています:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    //...

    // GICSSector    
    modelBuilder.Entity<GICSSector>().HasKey(s => new { s.ID }); 
    modelBuilder.Entity<GICSSector>().Property(s => s.ID).HasMaxLength(2);      
    modelBuilder.Entity<GICSSector>().Property(s => s.Name).IsRequired();     
    modelBuilder.Entity<GICSSector>().Property(s => s.Name).HasMaxLength(50);
}

コードを実行すると、次の例外が発生します。SQLiteエラー1: 'no such table:Sectors'

typeof(T)またはmyEntity.GetType()を使用して型をチェックすると、同じ結果が得られますMyNamespace.GICSSector

なぜEF Coreが期待通りのGICSセクターではなく、 "Sectors"(ベースタイプ)というテーブルにそれを格納したいのですか?

どうすれば修正できますか?

:このメソッドは、 Sectorから継承したクラスのみの処理には使用されない一般的なメソッドです。

受け入れられた回答

使用するテーブルを明示的にEFに伝える:

[Table("GICSSectors")]
public class GICSSector: Sector
{
    public virtual ICollection<GICSIndustryGroup> IndustryGroups {get; set;}
}

または流暢なAPIを使用する:

modelBuilder.Entity<GICSSector>().ToTable("GICSSectors");   


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ