EF Core一对一关系单向

时间:2018-03-02 13:42:32

标签: entity-framework-core

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

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正常工作?

1 个答案:

答案 0 :(得分:5)

  

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

没有。错误在于FK映射:

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

通过这种方式,您告诉EF它应该使用Class1Id的{​​{1}}属性作为Class1的PK和FK,在这种情况下Class2属性{ {1}}不会被威胁为FK,而是像任何其他简单属性一样。

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

Class2