【问题标题】:The entity type 'Child' requires a primary key to be defined实体类型“子”需要定义主键
【发布时间】:2018-03-24 23:24:14
【问题描述】:

使用 Entity Framework Core 2 我有以下实体:

public class Parent {
  public Int32 Id { get; set; }
  public virtual Child Child { get; set; }
}

public class Child {
  public Int32 ParentId { get; set; }
  public virtual Parent Parent { get; set; }
}

我希望父母和孩子建立一对一的关系。

我希望 ParentId 是实体 Child 的 FK 和 PK ...

所以我尝试了以下配置:

builder.Entity<Parent>().ToTable("Parents");
builder.Entity<Parent>().Property(y => y.Id).UseSqlServerIdentityColumn();    

builder.Entity<Child>().ToTable("Childs");
builder.Entity<Child>().HasOne(x => x.Parent)
                       .WithOne(x => x.Child)
                       .HasForeignKey<Child>(x => x.ParentId);

但我收到以下错误:

The entity type 'Child' requires a primary key to be defined.

知道如何解决这个问题吗?

【问题讨论】:

  • 像往常一样,当 PK 名称不符合约定时 - builder.Entity&lt;Child&gt;().HasKey(x =&gt; x.ParentId);
  • 我之前尝试过,但我一直收到同样的错误......
  • 再试一次? :) 应该管用。没有它就无法工作。
  • 是的,毕竟它有效。我错过了将其中一个实体添加到模型中。您可以添加您的答案以便我标记它吗?

标签: entity-framework-core


【解决方案1】:

这个问题与人际关系没有任何共同之处。

只是ParentIdkey property name conventions不匹配,因此需要用数据注解来指定

public class Child
{
    [Key]
    public Int32 ParentId { get; set; }
    public virtual Parent Parent { get; set; }
}

或流畅的 API

builder.Entity<Child>().HasKey(x => x.ParentId);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-23
    • 2021-11-27
    • 2018-08-13
    • 2019-09-13
    • 2022-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多