ef核心一对一关系,同时保持两个实体中的键

时间:2018-07-24 06:27:59

标签: c# ef-code-first one-to-one ef-core-2.1 .net-core-2.1

我在应用程序中使用ef core 2.1,并试图将两个实体之间的关系设置为一对一关系。同时,我想在两个实体中都保留外键。假设类如下:

class Principal
{
   int Id
   int PropA
   int PropB

   int DependentId
   virtual Dependent Dependent
}

class Dependent
{
   int Id
   int PropC
   int PropD

   int PrincipalId
   virtual Principal Principal
}

并且使用流利的api,例如:

builder.Entity<Principal>()
   .HasOne(a => a.Dependent)
   .WithOne(b => b.Principal)
   .HasForeignKey<Dependent>(c => c.PrincipalId);

在这种情况下,Dependent.PrincipalId是唯一的,而Principal.DependentId不是唯一的。我希望两者都是独一无二的。知道如何实现吗?

1 个答案:

答案 0 :(得分:2)

在表之一(从属表)上标记其主键上的ForeignKey属性。 EF从中推断出一对一:

class Principal
{
   int Id
   int PropA
   int PropB

   //int DependentId   ----> here
   virtual Dependent Dependent
}

class Dependent
{
   [ForeignKey("Principal")]
   int PrincipalId

   //int Id  ----> here
   int PropC
   int PropD

   virtual Principal Principal
}

并删除您的fluent api