我们正在将asp.net核心应用程序(在完整的.net框架上运行)从asp.net 2.0 / ef核心2.0升级到asp.net 2.1 / ef核心2.1。 我感到惊讶的是,进行次要更新会令人头疼……
无论如何,在升级到2.1并在不对模型进行任何代码更改的情况下添加迁移后,EF会创建一个迁移,以将我们使用的(唯一的)自有类型移动到单独的表中。 为什么? [documentation] [1]另有说明:
使用关系数据库时,按惯例映射拥有的类型 和所有者在同一张桌子上。
我们可以通过添加ToTable()并传递父实体的名称来解决此问题,但我们不明白为什么首先需要这样做。
之前:
builder.Entity<Chart>().OwnsOne(c => c.BarLineOptions);
之后:
builder.Entity<Chart>().OwnsOne(c => c.BarLineOptions).ToTable("Chart");
我们还尝试使用新的OwnedAttribute删除此流利的配置,但这会导致相同的问题,因此我们确实需要流利的配置来调用ToTable()
更新:如果不创建迁移,则在启动应用程序时会出现异常,说明表BarLineOptions不存在