我开始使用sqlite在UWP应用中使用efcore。我已经声明了要存储在数据库中的类。然后,我声明了各种DBSET和配置覆盖:
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");
}
}
在软件包管理器控制台中,我去:
Add-Migration 2017-06-23
它创建代码,然后构建数据库。但是,该代码缺少一些顶级表。其中有些在那里,但有些不在,我看不到/弄清楚是什么原因引起的。没有产生错误,我找不到一个模式来确定为什么缺少表不见了。
更多信息:
我的代码中定义了29个类。迁移代码创建24个表。
的5个"缺失"类的类别,其中4个源自主题,而主体又从结论中得出。第五是结论类。由于迁移代码"合并"了每个派生类的属性,因此结论类没有自己的表,我并不感到惊讶,因为没有直接将其用作类。
除了结论类别外,其他4个类仅在DBSET属性中引用(而不是在其他类别的属性中使用(。如上所述,文档类是从另一个类得出的,因此它不是派生的类是常见因素。
不是某些类是部分类。
我找不到有关类中的属性的任何内容,这是一个常见因素。例如,该人类的班级列出了几次,但是代理类也是 dos 出现在迁移代码中。
关于我可以寻找什么或这是一个已知问题的任何建议?
要澄清,伊万提供的答案是,ef core看到了从主题类中得出的四个类,并为主题类构建一个表格,其中包括所有这些属性派生的类。然后,在主题类中添加了一个歧视列,该列指示了哪个派生类是适用的。
http://www.learnentityframeworkcore.com/inheritance/table-per-hierarchy是解释它的好文章。
设计我以前从未遇到的数据库表的有趣方法。我生活和学习:(