Entity framework core EFCore/UWP缺少一些带有Add迁移的表

Entity framework core EFCore/UWP缺少一些带有Add迁移的表,entity-framework-core,Entity Framework Core,我开始在带有SQLite的UWP应用程序中使用EFCore。我已经声明了要存储在数据库中的类。然后,我声明了各种dbset和onconfig覆盖: public class DatabaseContext : DbContext { public DbSet<Person> People { get; set; } public DbSet<Relationship> Relationships { get; set; } public DbSet

我开始在带有SQLite的UWP应用程序中使用EFCore。我已经声明了要存储在数据库中的类。然后,我声明了各种dbset和onconfig覆盖:

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");
    }
}
它创建代码,然后构建数据库。但是,该代码缺少一些顶级表。有些在那里,但有些不在,我看不出/弄清楚是什么导致了这种情况。没有生成错误,我无法找到模式来确定丢失表的原因

进一步资料:

  • 我的代码中定义了29个类。迁移代码创建了24个表

  • 在5个“缺失”类中,有4个是从主语派生的,而主语又是从结论派生的。第五节是结论课。因为迁移代码“合并”了每个派生类的属性,所以我并不奇怪结论类没有自己的表,因为它没有直接作为类使用

  • 除结论类外,其他4个类仅在DbSet属性中引用(而不是在其他类的属性中使用)。如上所述,Document类是从另一个类派生的,因此它不是公共因素的派生类

  • 这并不是说有些类是部分类

  • 我无法发现类中的属性是一个共同因素。例如,Person类多次出现在列表中,而Agent类也多次出现在迁移代码中


关于我可以寻找什么或者这是否是一个已知问题的任何建议?

为了澄清,Ivan提供的答案是EF Core看到了从Subject类派生的四个类,并为Subject类构建了一个表,其中包括这些派生类的所有属性。然后在Subject类中添加一个Discriminator列,该列指示这是用于哪个派生类

这是一篇解释它的好文章


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

有些类继承了其他类吗?@IvanStoev是的,但恐怕这不是答案。我添加了一些更多的信息来显示一些派生类确实出现在迁移代码中。问题是,如果某个基类通过
DbSet
公开,或者从某个实体的导航属性引用,或者用作
modelBuilder.entity
调用的通用参数(与简单实现继承相反),EF将认为它是实体,并将使用TPH策略(即创建带有鉴别器的单表)。。例如,缺少的4个类可能已合并到一个
Subject
表中。请检查带有鉴别器列的表的迁移。@IvanStoev您是正确的-看起来缺少的类已合并到Subject表的定义中。该表上有一个鉴别器列。@IvanStoev啊。…所以我实际上不需要担心这些表是否“丢失”。EF Core将自动对其进行排序,因为鉴别器列标记了派生类型…?这似乎是建议的。
Add-Migration 2017-06-23