EFCore / UWP缺少一些使用Add-Migration的表

时间:2017-06-23 16:33:55

标签: entity-framework-core

我开始在SQLite的UWP应用程序中使用EFCore。我已经声明了我想要存储在数据库中的类。然后我宣布了各种DbSet和OnConfiguring覆盖:

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个来自主题,而主要来自结论。第五个是结论课。由于迁移代码“合并”了每个派生类的属性,因此我不会对结构类没有自己的表感到惊讶,因为没有将它直接用作类。

  • 除了Structural类之外,其他4个类仅在DbSet属性中引用(而不是在其他类的属性中使用)。如上所述,Document类派生自另一个类,因此它不是派生类,这是常见因素。

  • 并不是某些类是部分类。

  • 我无法发现类中属性的任何相关因素。例如,Person类有几次List,但Agent类也是如此, 出现在迁移代码中。

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

1 个答案:

答案 0 :(得分:2)

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

http://www.learnentityframeworkcore.com/inheritance/table-per-hierarchy是一篇很好的解释文章。

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