2013-03-21 117 views
1

我有兩個包含2個主鍵列的表。它們的結構是:一對一映射,首先有多個主鍵列實體框架代碼

public class X 
{ 
    public int Id {get;set;} 
    public int line {get;set;} 
} 

public class Y 
{ 
    public int Id {get;set;} 
    public int line {get;set;} 
} 

它們與一對一的關係有關。

如何首先映射實體框架代碼中的2個表以反映它們之間的關係。

表Y是可選的,但表X是必需的。

謝謝先進。

+0

我總是想知道一對一表關係是什麼點。如果這種關係是一對一的,爲什麼不能有一個表/類? – 2013-03-21 11:38:23

+1

@BenRobinson我總是懷疑起初它可能與安全問題有關。有些用戶不允許或沒有足夠的權限查看其他表格上的某些細節,這就是爲什麼他們將其分開。 – 2013-03-21 11:42:09

回答

0
public class X 
{ 
    [Key] 
    public int ID { get; set; } 
    public int line {get; set;} 

    public virtual Y Y { get; set; } 
} 

public class Y 
{ 
    [Key] 
    public int ID { get; set; } 
    public int line {get; set;} 

    public virtual X X { get; set; } 
} 

和添加配置,

modelBuilder.Entity<X>() 
      .HasOptional<Y>(u => u.ID) 
      .WithOptionalDependent(c => c.ID) 
      .Map(p => p.MapKey("ID")); 
+0

這些表與2個主鍵相關。我如何配置兩者?在你的例子中,你只使用Id Key列。 – Shpongle 2013-03-21 12:30:17

1

如果我的理解沒錯,也許這是你在找什麼:

public class X 
{ 
    [Key, ForeignKey("Y"), Column(Order=0)] 
    public int ID { get; set; } 
    [Key, ForeignKey("Y"), Column(Order=1)] 
    public int line { get; set; } 

    public virtual Y Y { get; set; } 
} 

public class Y 
{ 
    [Key, Column(Order=0)] 
    public int ID { get; set; } 
    [Key, Column(Order=1)] 
    public int line { get; set; } 

    public virtual X X { get; set; } 
} 

隨着Key屬性你說EF那些屬性將是你的表的關鍵。添加ForeignKey屬性,向EF提供信息,告訴它哪個導航屬性表示它是外鍵的關係。最後,Column屬性告訴EF X的哪個屬性應匹配Y上的哪一個屬性。如果我誤解了你的問題,請讓我知道,這樣我就可以改變我的答案。

相關問題