2012-04-21 69 views
0

我使用EF代碼首先映射到一個現有的DB2數據庫。這是一對多的關係,不幸的是我不能輕鬆創建視圖或更改架構。EF代碼首先國外關鍵問題

父表的模式具有以下鍵:

Type (char(1)) 
ServiceDate (datetime) 
FormNumber (varchar(8)) 

子表(詳細信息)具有下列鍵

ServiceDate (datetime) (also a foreign key to ServiceDate on the parent table) 
FormNumber (varchar(8)) (also a foreign key to ServiceDate on the parent table) 
SpecificServiceDate (datetime) 
LineNumber (varchar(8)) 

我想用流利的映射創建關係。如果我做的:

.HasMany(e => e.Details).HasForeignKey(e => new {e.ServiceDate, e.FormNumber}); 

...我得到一個錯誤說的密鑰不匹配的主鍵。想法如何設置這個?謝謝。

編輯

OK,EF本身並不支持這一點。有沒有一種解決方法來延遲加載數據?

這是隻讀的,如果有差別。

+1

我甚至不知道如何將工作。如果您有FormNumber = 1,ServiceDate = 1/1/2013,Type = A和FormNumber = 1,ServiceDate = 1/1/2013,Type = B,會發生什麼?細節無法唯一地選擇哪個記錄是父項。我不能相信DB/2在它不是唯一標識的時候會允許這種外鍵關係。 – 2012-04-21 19:08:31

+0

這是關閉一箇舊的AS400系統,主表實際上是一個UNION視圖,並且外鍵比其他任何更常規。不好玩。 :-( – bryanjonker 2012-04-21 19:10:29

+1

EF並不支持視圖,尤其是EF會將任何不可空的字段視爲複合主鍵的一部分,您可能無法在此處創建關係。 – 2012-04-21 19:19:15

回答

1

遺憾的是不可能的。 EF中的關係與數據庫中的規則相同。如果您的父表在主鍵中有三列,則您的從屬表必須在外鍵中具有相同的三列。

我不知道,如果你可以定義DB2這樣的關係中無標記ServiceDateFormNumber作爲唯一鍵(在這種情況下,就沒有任何理由要在PK Type爲好),但你絕對不能把它定義在EF的藍色打印SQL服務器。無論如何,EF目前不支持形成關係的唯一鍵。