EFCORE/UWP缺少一些添加迁移的表



我开始使用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是解释它的好文章。

设计我以前从未遇到的数据库表的有趣方法。我生活和学习:(

最新更新