2010-10-27 70 views
1

我首先處理代碼.NET 4,我遇到了1對1關係的問題。基於聲明的約束,導航屬性是必需的

breifing數據庫: -POccurrence -Id

-POccurrenceRiskAssessment -OccurrenceId

在我的課Poccurrence我有一個名爲RiskAsessment屬性的類型POccurrenceRiskAssessment的。並非所有的發生都有風險評估,因此它需要爲空。 我試圖

modelBuilder.Entity<POccurrence>().HasOptional(item => item.RiskAssessment).HasConstraint((o, r) => r.OccurrenceId == o.Id); 

但是這給了我

'RiskAssessment' 在類型 'AM.Pris.Classes.POccurrence' 一直 配置可選聲明的導航屬性。基於 聲明的約束,導航 屬性是必需的。或者使一些 從屬關鍵屬性爲空或 根據需要配置導航。

如果我嘗試

modelBuilder.Entity<POccurrence>().HasRequired(item => item.RiskAssessment).HasConstraint((o, r) => r.OccurrenceId == o.Id); 

我得到

參照完整性約束髮生 衝突:一個主鍵 屬性,是引用 完整性約束的一部分,不能改變 當從屬對象不變時 除非它被設置爲 作爲協會的主要目標。必須跟蹤 主體,並且 未標記爲刪除。

我不知道該怎麼做。我甚至試圖刪除數據庫中的真實關係,但似乎沒有任何區別。任何想法?我想它是我正在尋找的HasOptional的第一次嘗試,但我如何使它成爲nullalbe?

回答

0

你有沒有考慮過把它轉換成Table Per Type繼承方案,其中POccurrenceRiskAssessment:POccurrence?這樣你只需要查詢POccurrenceRiskAssessment。