2

我從數據庫生成Visual Studio中的實體數據模型。外鍵約束解釋問題

但是,我注意到它不會從某些外鍵生成關係和導航屬性。當外鍵密鑰與禁用選項Enforce Foreign Key Constraint一起定義時發生,如下面的展示(來自SSMS)。

有什麼辦法可以解決這個問題嗎?不幸的是我不能改變我的數據庫模式。

enter image description here

+4

禁用的FK不是FK,我會和你的dbas討論這個問題。 – HLGEM 2011-05-19 17:06:41

回答

1

您可以從設計人員手動添加它們,但它可能會產生一些後果,具體取決於您使用的實體框架的版本。

如果您只是從工具箱添加關聯,則默認情況下會創建獨立關聯。獨立協會必須映射到數據庫對應方。這意味着您必須手動打開EDMX並通過修改SSDL來欺騙EF(您將手動添加與SSDL部件的關係,這可能是相當困難的任務 - 遵循SSDL參考:AssociationSetAssociation元素)。現在,您可以將關係映射到設計器的「映射詳細信息」窗口中(您還必須修改實體,因爲在使用獨立關聯時FK屬性不能映射到實體,並且在多對多關聯的情況下必須刪除聯結表的實體)。 EF會相信這個關係存在於數據庫中。一旦手動修改SSDL,就不能再使用更新數據庫。它會刪除您的所有手動更改。

如果您使用EFv4,則可以使用foreign key association(這兩種類型之間的完全區別是described here)。外鍵關聯未映射,但不能用於定義多對多關係。

如果數據庫中的數據不強制執行關係(由於FK被禁用,可能會發生此問題),則會出現此問題。在這種情況下,您的應用程序將無法工作,除了修復數據庫中的數據完整性或從模型中刪除關聯外,將無法解決此問題。

最適合您的解決方案是打開數據庫中的FKs!

+0

+1感謝您的信息。 – Func 2011-05-23 15:38:45

0

不幸的是你要添加這些手工模型。這是OR映射的力量。模型可能與數據庫看起來不同(更好)。

+0

我可以試試,但如何? – Func 2011-05-19 17:32:58

+0

右鍵單擊設計圖面上的實體,然後選擇添加 - >關聯。 – 2011-05-19 19:58:53