2013-05-06 76 views
1

我想用以下設置創建一個協會性質:在實體框架中,如何在代碼中創建關聯屬性?

public class ClassType1{ 
    [Key] 
    public int type1_ID { get;set; } 
    public int type2_ID { get;set; } // In database, this is a foreign key linked to ClassType2.type2_ID 
    public ClassType2 type2Prop { get;set; } 
} 

public class ClassType2{ 
    [Key] 
    public int type2_ID { get;set; } 
} 

我的問題是type2Prop無法找到它的foregin關鍵。它試圖尋找「type2Prop_ID」,它不存在,當它真的應該尋找「type2_ID」。這是我得到的錯誤:

{"Invalid column name 'type2Prop_ID'."} 

如何告訴它哪個屬性用作ClassType2的鍵?

+0

您使用EF代碼第一? – Floremin 2013-05-06 18:45:32

+0

我這麼認爲,但我不確定。這是我們這個行業的問題。我從未接受EF的正規教育,因爲當我回到學校時,EF還沒有存在! – Bill 2013-05-06 19:12:04

回答

3

嘗試ForeignKeyAttributetype2Prop:您還可以用它在重構,證明的方式流利的API(也就是說,如果你在未來改變你的屬性的名稱

using System.ComponentModel.DataAnnotations.Schema; 

public class ClassType1 
{ 
    [Key] 
    public int type1_ID { get; set; } 

    public int type2_ID { get; set; } // In database, this is a foreign key linked to ClassType2.type2_ID 

    [ForeignKey("type2_ID")] 
    public virtual ClassType2 type2Prop { get; set; } 
} 

public class ClassType2 
{ 
    [Key] 
    public int type2_ID { get;set; } 
} 

,編譯器將讓你知道你也必須改變映射)。對於這樣的簡單情況,這有點醜陋,但它也更加健壯。在你DbContext類,你可以添加類似:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<ClassType1>().HasRequired(x => x.type2Prop) 
            .WithMany() 
            .HasForeignKey(x => x.type2_ID); 
} 
+0

是的,看起來不錯。 – Bill 2013-05-06 19:11:16

0
public class ClassType1{ 
    [Key] 
    public int type1_ID { get;set; } 
    [ForeignKey("type2Prop")] 
    public int type2_ID { get;set; } // In database, this is a foreign key linked to ClassType2.type2_ID 
    public ClassType2 type2Prop { get;set; } 
} 

public class ClassType2{ 
    [Key] 
    public int type2_ID { get;set; } 
} 
+0

請在答案中添加更多內容。通常不鼓勵使用僅有代碼的答案。 – gunr2171 2013-05-06 18:49:48

相關問題