【问题标题】:Why can't the child/dependent side be determined for this one-to-one relationship?为什么不能确定这种一对一关系的孩子/依赖方?
【发布时间】:2020-06-18 09:17:49
【问题描述】:

我收到以下常见错误:

无法确定“Person.UserAccount”和“UserAccount.Person”之间的一对一关系的子/依赖方。要识别关系的子/依赖方,请配置外键属性。如果这些导航不应该是同一关系的一部分,请在不指定相反的情况下配置它们。详情请见http://go.microsoft.com/fwlink/?LinkId=724062

在我的例子中,UserAccount 是 Person 的从属,它们具有一对零/一的关系,外键是字段 Id。我设置如下:

modelBuilder.Entity<Person>()
            .HasOne(e => e.UserAccount)
            .WithOne(e => e.Person)
            .IsRequired()
            .HasForeignKey<UserAccount>(e => e.Id);

我尝试了很多其他组合,通读文档和其他问题,但无论如何它都无法确定孩子/依赖方。

UserAccount 类:

[Table("UserAccount")]
public class UserAccount : EntityBase
{
    public int Id { get; set; }

    public Person Person { get; set; }

}

人物类:

    [Table("PERSON")]
public partial class Person : EntityBase
{
    public Guid Id { get; set; }

    [Key]
    public int PersonId { get; set; }

    public UserAccount UserAccount { get; set; }

}

发生了什么事?我错过了什么?

【问题讨论】:

  • 你能显示你的类(Person 和 UserAccount)代码吗?
  • 你去@charbel,我已经删除了与问题无关的数据。如果有什么遗漏请告诉我

标签: c# entity-framework-core foreign-keys relationship


【解决方案1】:

在您的 PERSON 表中,您有 2 个属性可能是导致 EF 核心混淆的外键属性。 您可以尝试在UserAccount 类中添加[ForeignKey("PersonId")]

[Table("UserAccount")]
public class UserAccount : EntityBase
{
    public int Id { get; set; }

    [ForeignKey("PersonId")]
    public int PersonId {get;set;}
    public Person Person { get; set; }

}

编辑: 尝试相应地重命名您的属性。

【讨论】:

  • 我试过了,但是没有用,但是我现在意识到我在输出中遇到了这些错误:---------------- >外键属性未按惯例配置,因为最佳匹配 {'Id' : Guid} 与当前主键 {'Id' : int} 不兼容。如果已指定显式配置,则可以忽略此消息。
  • 为什么需要public Guid Id { get; set; }
  • 这是数据库中的另一个字段。我试图重命名字段以使它们相应地匹配,并且错误消失了,尽管现在当它查询数据库时它永远挂起,但我想这是向前迈出的一步,所以我想如果你改写你的答案,我可以给它有效。
  • 这是不久前的事了,我猜你现在已经解决了所有问题,但上面的 ForeignKey 属性不应该是“Person”,而不是“PersonID”吗?
猜你喜欢
  • 1970-01-01
  • 2022-01-02
  • 2019-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-23
  • 1970-01-01
  • 2018-06-26
相关资源
最近更新 更多