2015-07-10 105 views
0

同時節省不爲他們的關係實體框架中定義外鍵

我相信這可能是因爲我有暴露的外鍵屬性的實體,我收到一個間歇性的錯誤

錯誤沒有在我的實體框架數據庫層中正確定義我的關係。

我有一個1定義的表:1的關係這樣:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 


    public FinalisedServices Service { get; set; } 

凡SpproFinalisedServices是一個外鍵。我應該寫它,像這樣:

 public int FinalisedSerivce_Id { get; set; } 

    [ForeignKey("FinalisedSerivce_Id")] 
    public FinalisedServices Service { get; set; } 

或可選擇地會增加虛擬足矣:

public virtual FinalisedServices Service { get; set; } 

我原本認爲實體框架會處理在後臺數據庫中的外鍵。

+0

你看過內部異常嗎?那(通常)顯示EF正在遇到問題的實體和關係。這應該有助於診斷問題。 –

+0

問題只發生在直播系統上。我需要標識內部異常,但希望在它再次發生之前解決它 – michael

回答

1
public virtual ICollection<FinalisedQuoteStaff> JobManagers { get; set; } 

public virtual ICollection<FinalisedQuoteStaff> AllocatedStaff { get; set; } 

這沒有定義一對一的關係。任何時候你包括一個集合,你正在定義一對多或多對多。根據您的其他代碼,我假設您將採用一對多的方式。即多個管理人員和一個服務人員。請檢查這個tutorial。您無需在Finalized Service上明確定義外鍵。這是針對多個外鍵和/或外鍵與外鍵表命名不同的情況。

你也不需要[DatabaseGenerated(DatabaseGeneratedOption.Identity)] - 它是通過配置約定 - 它會默認執行它。如果您將Id字段命名爲奇怪,那麼您需要這樣做。當您將其命名爲「Id」時,它會自動進行。

+0

抱歉,我不應該包含多對多的關係。他們無關的問題,但我想答案是他們不是必需的,而不是我的問題 – michael

+0

你需要發佈你的整個表。如果某些東西是專有的,請更改名稱,只要確保它們是一致的 - 最終的「s」等小事情以及您在這裏命名事物的方式,我相信您知道。 – VSO

+0

@michael:作爲一個例子public finalisedServices Service {get;組; } - 這需要是「FinalizedService」,而不是複數。假設你有一項服務。否則,它需要成爲一個服務集合。 – VSO