我開始在帶有SQLite的UWP應用程序中使用EFCore。我宣佈了我想要存儲在數據庫中的類。然後我宣佈各種DbSets和OnConfiguring覆蓋:EFCore/UWP在添加遷移時缺少一些表格
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");
}
}
在Package Manager控制檯,然後我去:
Add-Migration 2017-06-23
,它創造的代碼,然後建立數據庫。但是,該代碼缺少一些頂級表。他們中的一些人在那裏,但有些人沒有,我不能看/找出是什麼原因造成的。沒有錯誤產生,我無法找到一個模式,以確定爲什麼丟失的表丟失。
更多信息:
有我的代碼中定義的29類。遷移代碼創建24個表。
在5個「缺失」類中,其中4個來源於Subject,而這個Subject來自結論。第五個是結論類。由於遷移代碼將每個派生類的屬性「合併」,因此我並不感到驚訝的是,結論類沒有自己的表,因爲沒有直接使用它作爲類。
除了結論類以外,其他4個類只在DbSet屬性中引用(而不是在其他類的屬性中使用)。如上所述,Document類是從另一個類派生的,所以它不是派生類是共同的因素。
這並不是說某些類是部分類。
我無法找到任何有關類屬性的常見因素。例如,Person類有List幾次,但Agent類也是這樣,並且確實出現在遷移代碼中。
關於我能找什麼或者如果這是一個已知問題的任何建議?
做一些類繼承其他? –
@IvanStoev是的,但恐怕不是答案。我已經添加了更多信息來顯示某些派生類確實出現在遷移代碼中。 –
問題是,如果某些基類是通過'DbSet'公開的,或者是從某個實體的導航屬性引用的,或者被用作'modelBuilder.Entity'調用的通用參數(而不是簡單的實現繼承),EF將會認爲它是一個實體,並將使用TPH策略(即創建帶有鑑別器的單個表)。例如,4個缺失的類可能已被合併到一個「Subject」表中。使用Discriminator列檢查表格的遷移。 –