【问题标题】:EF Core Code First Migration requires a primary key for a complex typeEF Core 代码优先迁移需要复杂类型的主键
【发布时间】:2019-10-02 18:19:06
【问题描述】:

我有一个包含子类的数据类。它们在DbContext 中使用,如下所示:

public class Foo
{
    [Key]
    public int Key { get; set; }

    public SubFoo SubFoo { get; set; }
}

[ComplexType]
public class SubFoo
{
    public double Value1 { get; set; }
    public double Value2 { get; set; }
}

public class ApplicationDbContext : DbContext
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options) {
    }

    public DbSet<Foo> Foos { get; set; }

}

尝试创建代码优先迁移时,出现错误

实体类型“SubFoo”需要定义一个主键

由于我的类 SubFoo 使用属性 ComplexType 进行装饰,并且 MSDN documentation 明确指出 复杂类型没有键,我有点困惑。

作为mentioned here,我尝试将ComplexType 注释替换为Owned 属性,但没有解决问题。

我是否误解了如何使用复杂类型?

【问题讨论】:

标签: c# entity-framework-core


【解决方案1】:

归根结底,经过长期调查,在执行 Code First 迁移时,EF Core 2.2 尚不支持 ComplexType。

【讨论】:

  • 说明尚不支持的版本会很有用,如果您有相关来源,最好链接到它。将来可能会支持它,所以这个答案会出错。
  • 我想我使用 EF Core 3.1 中的[ComplexType][Owned] 属性而不是 解决了这个问题。虽然有一些缺点,因为它仍然不支持代码中的 [Required] 属性优先(所有列都生成可为空的)。它可以由 EF Core 5.0 上的github.com/dotnet/efcore/pull/21873 修复
猜你喜欢
  • 2016-05-26
  • 2020-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-18
  • 2014-06-28
  • 1970-01-01
  • 2019-04-24
相关资源
最近更新 更多