2015-02-09 78 views
1

我有兩個代碼拳頭波蘇斯(特派員和案例):定義一個對一個在EF代碼首先用流利的API

public class Appointee 
{ 
    public int ID { get; set; } 
    public string ProfileID { get; set; } 
    public int? CaseID { get; set; } 
    public string FistName { get; set; } 
    public string LastName { get; set; } 
    public DateTime Dob { get; set; } 
    public string Ssn { get; set; } 
    public string GrantNumber { get; set; } 

    public virtual Case Case { get; set; } 
} 

public class Case 
{ 
    [Key] 
    public int CaseID { get; set; } 
    public string ProfileID { get; set; } 
    public int PSCStatusID { get; set; } 

    public virtual Appointee Appointee { get; set; } 
} 

在我們的術語特派員與檔案的代名詞。所以我們Appointtee的[Key]是ProfileID。

被任命者不必分配一個案例,所以我將CaseID設置爲可爲空的int - int ?.

從這我得到的錯誤,類似,EndPoint無法確定案例和被任命人之間。

我認爲問題在案例中。 ProfileID是Appointtee的外鍵,應該是Virtual Appointtee Property的導航屬性。 但我不認爲它理解導航道具不是AppointeeID,而是ProfileID。

所以我把這個在的DbContext:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 
     modelBuilder.Entity<Appointee>().HasKey(a => a.ProfileID); 
     modelBuilder.Entity<Case>().HasKey(c => c.CaseID); 
     modelBuilder.Entity<Case>().HasRequired(c => c.Appointee); 
     modelBuilder.Entity<Appointee>().HasOptional(a => a.Case); 
    } 

現在,我得到:無效的列名稱Appointee_ProfileID「。

如何正確設置它。

+0

我敢打賭,這將有助於:http://stackoverflow.com/questions/7055962/entity-framework-4-1-invalid-column-name – joelmdev 2015-02-10 01:10:14

回答

1

終於解決了這個問題。 這裏有幾件事。 我很習慣使用AutoInc設置代理主鍵,我爲Appointee和Case設置了autoinc ID。

真的,被任命人的關鍵應該是ProfileID。

接下來,在實體框架中,從屬表中的外鍵必須與父表中的主鍵相同,EF將其稱爲原則。

因此,一旦我在我的腦海中得知我的鑰匙都是PK和FK,必須是ProfileID,我做了以下修復。

public class Appointee 
{ 
    [Key] 
    public string ProfileID { get; set; } 
    public string FistName { get; set; } 
    public string LastName { get; set; } 
    public DateTime Dob { get; set; } 
    public string Ssn { get; set; } 
    public string GrantNumber { get; set; } 

    public virtual Case Case { get; set; } 
} 

public class Case 
{ 
    [Key, ForeignKey("Appointee")] 
    public string ProfileID { get; set; } 
    public int PSCStatusID { get; set; } 

    [ForeignKey("ProfileID")] 
    public virtual Appointee Appointee { get; set; } 
} 

請注意Case中的[Key,ForeignKey(「Appointtee」)]屬性,我需要告知EF,Appointtee是原則。