2015-05-21 22 views
0

我在3個表之間有1對1的關係。當主鍵包含2個鍵與實體框架時創建1對1關係

父表有2個主鍵(複合鍵)。讓我們將它們命名爲StudentId1和StudentId2。

什麼是相關的表,我會把

[Key, ForeignKey("Student")] 
    public int StudentId { get; set; } 

我不只有一個屬性!

我應該這樣做嗎?將StudentId1StudentId2寫爲相關表的關鍵屬性沒有任何意義。

RelatedTable:

[Key, ForeignKey("Student")] 
public int StudentId1 { get; set; } 

[Key, ForeignKey("Student")] 
public int StudentId2 { get; set; } 

傳統的樣本:

public class Student 
{ 
    public Student() { } 

    public int StudentId { get; set; } 
    public string StudentName { get; set; } 

    public virtual StudentAddress StudentAddress { get; set; } 

} 



public class StudentAddress 
{ 
    [Key, ForeignKey("Student")] 
    public int StudentId { get; set; } 

    public virtual Student Student { get; set; } 
} 
+0

請告訴我分開學生和地址的,如果你不想要的點有一個一對多的關係?您可以將Address類的屬性放在Students類的屬性旁邊。 –

+0

擁有Student和StudentAddress實體有什麼意義?同樣的問題。但仍然存在這種情況。分離邏輯數據? – Pascal

回答

1

不應該Column(Order = X)工作?

public class Student 
{ 
    [Key, Column(Order = 0)] 
    public int StudentId1 { get; set; } 

    [Key, Column(Order = 1)] 
    public int StudentId2 { get; set; } 

    public virtual StudentAddress StudentAddress { get; set; } 
} 


public class StudentAddress 
{ 
    [Key, ForeignKey("Student"), Column(Order = 0)] 
    public int StudentId1 { get; set; } 

    [Key, ForeignKey("Student"), Column(Order = 1)] 
    public int StudentId2 { get; set; } 

    public virtual Student Student { get; set; } 
} 

+0

我必須使用:public virtual Student Student {get;組; }在StudentAddress上?我從來不想加載StudentAddress,只是一個學生,並通過虛擬studentAddress相關地址 – Pascal

+0

我認爲你必須通過數據註釋來知道'ForeignKey'引用哪個模型類,否則你將不得不設置密鑰使用流利的API。 – jjj