我有兩個相關的實體,但傳統sql模式基本上有兩個同一個表的關鍵列(不是2列鍵:見下文)。我需要創建一個關係到'人造鑰匙'列。有沒有辦法在Entity Framework 4.1中聲明性地做到這一點?實體框架4.1 - 非關鍵列之間的關係
Public Class Client
Inherits ModelBase
<Key(), Required()>
Public Property ClientID As Decimal
<Required(), StringLength(50)>
Public Property ClientCode As String
........
Public Class ClientLocation
Inherits ModelBase
........
<Required(), StringLength(50)>
Public Property ClientCode As String
........
<ForeignKey("ClientCode")>
Public Overridable Property Client As Clients.Client
而且我得到的錯誤是:模型生成過程中檢測到
*一個或多個驗證錯誤: System.Data.Edm.EdmAssociationConstraint:在類型所有 屬性參照約束的相關角色必須爲 ,與主體角色中相應的屬性類型相同。 類型的特性「ClientCode」對實體「ClientLocation」不 匹配屬性的類型在 引用約束「ClientLocation_Client」對實體「客戶」「客戶端ID」。*
,因爲它認爲我」米試圖映射ClientLocation.ClientCode> Client.ClientID,當我真的試圖映射ClientLocation.ClientCode> Client.ClientCode ...
有什麼想法?
謝謝!
「* ...傳統sql模式本質上具有2個相同表的鍵列... *」:你的意思是'Client.ClientCode'是一個在數據庫中具有唯一索引的列嗎?或者,那麼「2個關鍵列......但不是組合鍵」?並且你想將'ClientLocation.Client'映射到這個獨特的列'Client.ClientCode'? – Slauma
該表有2個有效密鑰,但第二個不被識別爲密鑰,並且沒有索引。例如,ClientID可以是4,並且ClientCode可以是「FOGCREEK」。兩者不相關或不相關,它們恰好都是獨一無二的。 是的,我需要使用Client.ClientCode映射回原始表,即使它未在我的實體中標記爲鍵。 –
啊,我明白了,那麼'ClientCode'就是一個普通的列。業務邏輯偶然確保了唯一性。恐怕Ladilav的回答是最後的話。 – Slauma