【问题标题】:EF Navigation properties with fluent API具有流畅 API 的 EF 导航属性
【发布时间】:2015-08-17 21:20:47
【问题描述】:

我以前从未使用过导航属性,所以我试图了解它们是如何工作的。作为偏好,我更喜欢通过 fluent API 映射它们。有人可以向我解释如何使用 fluent API 建立这种关系吗?

public class FooA
{
    [Key]
    public int FooAID {get;set;}
    [Required]
    public String NameA {get;set;}

}

public class FooB
{
    [Key]
    public int FooBID {get;set;}
    [Required]
    public String NameB {get;set;}

    public int? FooA_FK1 {get;set;}
    public int? FooA_FK2 {get;set;}

    [ForeignKey("FooA_FK1")]
    public virtual FooA Nav_FK1{get;set;}

    [ForeignKey("FooA_FK2")]
    public virtual FooA Nav_FK2{get;set;}
}

/*
Note that FooB has TWO NULLABLE (Optional?) references to FooA objects.
Also, the foreign key names don't follow the convention for EF.

I want to understand the fluent API used to construct this type of relationship.

I have been able to use fluent API to get this set up provided that the items
are required.  When I tried using the .HasOptional() method, I got an exception.

*/

【问题讨论】:

  • 关系是 1:1?

标签: c# entity-framework ef-fluent-api


【解决方案1】:

使用该模型,您将创建两个一对多关系,但两者都是单向的(您没有在关系的一端声明导航属性)。等效的 Fluent Api 配置(在您的上下文中覆盖 OnModelCreating 方法)是:

modelBuilder.Entity<FooB>().HasOptional(fb=>fb.Nav_FK1).WithMany().HasForeignKey(fb=>fb.FooA_FK1);
modelBuilder.Entity<FooB>().HasOptional(fb=>fb.Nav_FK2).WithMany().HasForeignKey(fb=>fb.FooA_FK2);

在此link 中,您将找到有关如何使用 Fluent Api 创建不同类型关系的更多信息。

【讨论】:

    【解决方案2】:

    如果您的外键可以为空,您可以在流畅的 api 关系定义中使用 HasOptional

    HasOptional(a => a.Nav_FK1).WithMany().HasForeignKey(b => b.FooA_FK1);
    
    HasOptional(a => a.Nav_FK2).WithMany().HasForeignKey(b => b.FooA_FK2);
    

    参考:http://www.entityframeworktutorial.net/code-first/configure-one-to-one-relationship-in-code-first.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-22
      • 2014-10-15
      • 2016-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多