Entity framework core EFCore/UWP缺少一些带有Add迁移的表
我开始在带有SQLite的UWP应用程序中使用EFCore。我已经声明了要存储在数据库中的类。然后,我声明了各种dbset和onconfig覆盖: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
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