【问题标题】:EF Core one-to-zero relationship one wayEF Core 一对零关系的一种方式
【发布时间】:2018-03-02 13:42:32
【问题描述】:

只能以一种方式创建一对一关系吗?

public class Class1
{
   [Key]
   [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
   public int Class1Id { get; set; }
   ...
}

public class Class2
{
   [Key]
   [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
   public int Class2Id { get; set; }

   public int? RelationshipId { get; set; }

   public virtual Class1 Relationship { get; set; }

   ...
}

而配置是这样的

public void Configure(EntityTypeBuilder<Class2> builder)
{
   builder.ToTable("...");

   builder.HasOne(m => m.Relationship)
     .WithOne()
     .HasForeignKey<Class1>(a => a.Class1Id);
}

但是当我尝试检查 Class2 实例中的关系时,我得到了一些错误。 RelationshipId 有一个值,Relationship.Class1Id 有一个不同的值。 Relationship.Class1Id 与 Class2Id 具有相同的值。

Class1 是否还需要具有 Class2 类型的属性才能使 EF Core 正常工作?

【问题讨论】:

    标签: c# entity-framework-core


    【解决方案1】:

    Class1 是否还需要具有 Class2 类型的属性才能使 EF Core 正常工作?

    没有。错误在于 FK 映射:

    .HasForeignKey<Class1>(a => a.Class1Id)
    

    这样你告诉EF它应该使用Class1Class1Id属性作为Class2的PK和FK,在这种情况下Class2RelationshipId属性不被视为FK , 但与任何其他简单属性一样。

    相反,您应该指定关系 (1) 的 FK 属性在 Class2 上并且 (2) 称为 RelationshipId

    builder.HasOne(e => e.Relationship)
        .WithOne()
        .HasForeignKey<Class2>(e => e.RelationshipId);
    //                   ^                 ^
    //                  (1)               (2)
    

    【讨论】:

    • 非常感谢。我想我对使用 Author 和 AuthorBiography 的示例感到困惑并混合了这些类
    猜你喜欢
    • 2019-07-25
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 2021-07-21
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    相关资源
    最近更新 更多