SQLiteを持つUWPアプリケーションでEFCoreを使用し始めました。私はデータベースに保存したいクラスを宣言しました。EFCore/UWPにAdd-Migrationのテーブルがありません
Add-Migration 2017-06-23
、それは、データベースを構築するためのコードを作成します。私はそれから行く、パッケージマネージャコンソールで
public class DatabaseContext : DbContext
{
public DbSet<Person> People { get; set; }
public DbSet<Relationship> Relationships { get; set; }
public DbSet<SourceDescription> SourceDescriptions { get; set; }
public DbSet<Agent> Agents { get; set; }
public DbSet<Event> Events { get; set; }
public DbSet<Document> Documents { get; set; }
public DbSet<PlaceDescription> PlaceDescriptions { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Filename=Testing.db");
}
}
:私は、その後、様々なDbSetsとOnConfiguringオーバーライドを宣言しました。しかし、そのコードにはいくつかのトップレベルのテーブルがありません。それらのうちのいくつかはそこにありますが、いくつかはそうではなく、私はこれを引き起こしていることを見る/把握できません。エラーは生成されず、欠落している表が欠けている理由を判別するためのパターンを見つけることができません。
詳しい情報:
私のコードで定義された29個のクラスがあります。マイグレーション・コードは24個の表を作成します。
5つの「欠落」クラスのうち、4つはSubjectから派生しており、これは結論から導かれます。 5番目は結論クラスです。マイグレーションコードはそれぞれの派生クラスのプロパティを「マージ」するため、クラスとして直接使用することはないため、結論クラスに独自のテーブルがないことに驚くことはありません。
結論クラスを除いて、他の4つのクラスは(他のクラスのプロパティで使用されるのではなく)DbSetプロパティでのみ参照されます。上記のように、Documentクラスは別のクラスから派生しているため、共通の要素であるクラスは派生しません。
一部のクラスは部分クラスではありません。
一般的な要因であるクラス内のプロパティについては、何も発見できません。たとえば、PersonクラスにはListが2,3回ありますが、Agentクラスにも同様の意味があり、はとなります。
私は何を探すことができますか、これは既知の問題ですか?
いくつかのクラスは他を継承していますか? –
@IvanStoevはい、それは答えではありません、私は恐れています。派生したクラスの一部が移行コードに表示されることを示すために、いくつかの情報を追加しました。 –
いくつかの基本クラスが 'DbSet'を介して公開されている場合、またはいくつかのエンティティのナビゲーションプロパティから参照されている場合や、(単純な実装継承とは対照的に)' modelBuilder.Entity'呼び出しの汎用引数として使用されている場合、EFはそれがエンティティであるとみなし、TPH戦略(つまり、弁別子付きの単一の表を作成する)を使用します。たとえば、欠落している4つのクラスが 'Subject'テーブルに統合されている可能性があります。Discriminatorカラムを使用してテーブルの移行を確認します。 –