2012-09-08 201 views
2

嗨,大家好我有一個關於EF Fluent API(Code First:P)的問題。在我的模型我有EF Fluent API地圖0..1到0..1的關係

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)。

回答

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也是FK到TABLE_A與兩側的導航性能,那麼你可以使用共享PK映射。

編輯:

,可以使用共享PK映射如下

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

TABLE_BId也是FK到TABLE_A

+0

我明白..但如果您使用DBFirst emdx我可以將接口配置爲0 .. 1到0 .. 1和實體都有導航屬性。 數據庫在列FK TABLE_A(使用DBFirst表相等) 如何使用PK與雙方的導航映射屬性共享。 –

+0

@LucianoCastro請參閱編輯答案。 – Eranga

+0

「HasRequired」和「WithMany」如何適合關係0..1到0..1的問題? – Prokurors