5
私はSector
名付け、以下の抽象クラスを持っている:Entity Frameworkコア:派生型からDbSetを動的に取得する方法
public abstract class Sector
{
public string ID {get; set;}
public string Name {get; set;}
public Sector(){}
}
そして第二のクラス、GICSSector
、ウィッヒはSector
から継承:
public class GICSSector: Sector
{
public virtual ICollection<GICSIndustryGroup> IndustryGroups {get; set;}
}
私は私のDbContext
でDbSet
次き:
public DbSet<GICSSector> GICSSectors {get; set;}
ロードするための汎用メソッドを作成しようとしています。d CSVファイルから、ATA、その場でオブジェクトを作成し、私の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: 'そのようなテーブル:セクター'。
私はtypeof(T)
または使用myEntity.GetType()
と種類を確認した場合、私は同じ期待される結果が得られます。MyNamespace.GICSSector
GICSSectors?
どうすれば修正できますか?
注:このメソッドは、Sector
を継承するクラスのみの処理には使用されない汎用のメソッドです。
はTableAttributeでGICSSectorクラスに注釈を付けますか? – MarkB
私は流暢なAPIを使用して、私は質問 –
を更新してから流暢なAPIを使用してテーブル名を設定しますか? (私の答えを参照してください) – MarkB