EF 5代码首先是可选的一对一映射,访问模型上的外键字段

时间:2013-12-04 16:55:53

标签: entity-framework ef-code-first entity-framework-5 code-first

这个问题基本上是关于EF4 CTP的this question重复,但特定于EF 5。

我设置了POCO

public class ClassPrinciple
{  
    public int ClassPrincipleID { get; set; }

    public virtual ClassDependent ClassDependent{ get; set; }

}

public class ClassDependent
{  
    public int ClassDependentID { get; set; }

    public virtual ClassPrinciple ClassPrinciple{ get; set; }

}

在我的模型构建器中,我创建了这样的可选一对一映射

modelBuilder.Entity<ClassPrinciple>().HasOptional(p => p.ClassDependent)
                .WithOptionalDependent(s => s.ClassPrinciple);

这会在ClassPrinciples表上创建一个名为ClassDependent_ClassDependentID的列。我希望能够通过ClassPrinciple模型上的属性引用此列中的数据,但我似乎无法这样做。我在此问题顶部链接的网页说明:

  

EF通常仅支持在您的实体上公开FK属性   一:很多关系(除非FK也是PK)。这是   有点人为,但EF的副作用不支持非PK   独特的约束。我们正致力于支持独特的约束   对于EF而言,它不会出现在我们的第一个代码RTM中   第一

     

很抱歉没有更好的答案,因为确实没有解决方法   在这个阶段。

这仍然是这种情况还是有办法解决这个问题。我已经尝试了流畅的api映射到各种组合的列和数据注释,但没有成功。

1 个答案:

答案 0 :(得分:0)

使用此代码:

public class ClassPrinciple
{  
  public int ClassPrincipleID { get; set; }

  public int ClassDependentId { get; set; }

  [ForeignKey("ClassDependentId")]
  [InverseProperty("ClassPrinciple")]
  public virtual ClassDependent ClassDependent{ get; set; }

}

public class ClassDependent
{  
   public int ClassDependentID { get; set; }

   [InverseProperty("ClassDependent")]
   public virtual ClassPrinciple ClassPrinciple{ get; set; }

 }