EF Fluent API映射0..1到0..1的关系

时间:2012-09-08 00:59:39

标签: entity-framework code-first fluent

大家好我对EF Fluent API(Code First:P)有疑问。在我的模型中我有

public class TABLE_A
{
   public virtual long Id {get; set;}
   .... 
   public virtual TABLE_B MyTableBRef {get; set;}
}


public class TABLE_B
{
   public virtual long Id {get; set;}
   .... 
   public virtual TABLE_A MyTableARef {get; set;}
}

我应该如何将0..1映射到0..1关系?

在TABLE_B上的数据库中,我有一个引用TABLE_A的PK的列(FK)。

1 个答案:

答案 0 :(得分:0)

如果您使用的是TABLE_B PK以外的列,则无法在双方都拥有导航属性。

public class TABLE_A
{
   public virtual long Id {get; set;}
}


public class TABLE_B
{
   public virtual long Id {get; set;}
   .... 
   public virutal TABLE_A MyTableARef {get; set;}
}

public class MyContext : DbContext
{
    public DbSet<TABLE_A> As { get; set; }
    public DbSet<TABLE_B> Bs { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<TABLE_B>()
           .HasRequired(b => b.MyTableARef)
           .WithMany()
           .Map(b => b.MapKey("FK_Column_name));
    }
}

如果TABLE_B的PK也是TABLE_A的FK,那么您可以使用双方都具有导航属性的共享PK映射。

修改

您可以按如下方式使用共享PK映射

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<TABLE_B>()
       .HasRequired(b => b.MyTableARef)
       .WithOptional(a => a.MyTableBRef);
}

Id的{​​{1}}也是TABLE_B的FK。