2

我想在現有的SQL Server基礎結構上設置一個EDM,並遇到了一個問題。實體框架不能解決與複合主鍵的PK-FK關係?

EDM將而不是解決複合外鍵的PK-FK關係。

我的數據庫表結構看起來是這樣的(名稱更改爲保護無辜者):

  • 我有一個包含名爲PerID(PK)
  • 我有一個包含一個OFFICE表中的INT列一個人的表一個名爲OffID(PK)的INT列
  • 我使用名爲OFFICEPONSONS的表將這些表綁在一起,從而在人員和辦公室之間創建多對多關係。該表有兩個INT列,PerID和OffID,它們一起構成一個複合主鍵。
  • 我有一個名爲OFFICELOCATION的表,它包含兩個INT列,LocID和OffID。這兩列包含一個複合主鍵。此外,OffID也是OFFICE表的FK。
  • 最後,我有一個名爲OFFICEPERSONSLOCATION的表。該表有三個INT列:PerID,OffID和LocID。所有三列包含一個複合主鍵。 LocID和OffID提供與OFFICELOCATION的FK關係,並且OffID和PerID向OFFICERSONS提供FK關係。

到目前爲止我和誰?希望我還沒有失去你。當所有事情都說完之後,我的結構看起來像這樣: Database structure diagram

這個結構在SQL Server中很好。在電火花?沒那麼多。它不會允許我構建OFFICEPERSONSLOCATION和OFFICERSERSONS之間的關係。我得到以下錯誤:

Error 6037: Foreign key constraint 'FK_OFFICEPERSONSLOCATION_OFFICEPERSONS' has been omitted from the storage model. Column 'OffID' of table 'Model.Store.OFFICEPERSONSLOCATION' is a foreign key participating in multiple relationships. A one-to-one Entity Model will not validate since data inconsistency is possible.

咦?數據不一致?!?怎麼樣?

如何讓我的實體框架認識到這一點?

+0

我意識到實體框架通常不代表交叉參考表,而是在沒有交叉參考表的情況下使用多對多關係鏈接兩個表。這是否與我試圖將交叉引用表與另一個交叉引用錶鏈接起來? – 2013-02-27 20:53:37

+0

我被告知我的EF版本可能與它有關。不知道我正在運行什麼版本,但我認爲它早於EF4。我正在運行VS2010。 – 2013-02-27 21:37:50

回答

1

我同意這是實體框架的問題,而且問題很蠢。即使您將UPDATE CASCADE設置爲「無操作」,也不會像您可以創建不一致,但不會,它聲稱您可以以某種方式進行操作。

在任何情況下,在這種情況下,如果你願意用代理鍵而不是複合鍵,就可以解決這個問題,因爲要改變ID號的唯一地方是在主表。

在這種情況下,OffID可能是「不一致」,但通過使用OFFICEPERSONS和OFFICELOCATIONS表中的ID(因此在OFFICEPERSONSLOCATION中引用),您不得不在其主表中管理OffId。

+0

感謝您的回答;不幸的是,在我發佈這個問題幾天後,我當時正在爲公司工作的公司解僱了我。所以除非我再次遇到這種情況,否則我想我永遠不會知道這是否是答案。 – 2014-02-18 17:03:25

+1

對不起。但是,您可以在最近的實體框架中避免此問題,但如果您考慮此問題,則在其中一箇中間表中更改辦公室ID會導致不一致。 OfficePersonsLocation Office ID會更改爲Office Persons還是Office Location? DB不知道。使用代理鍵時,OffID只存儲在主表中,因此ID始終保持一致。 – Mark 2014-02-18 20:25:45

+0

誠然,雖然在該環境中,Office ID永遠不會改變。 – 2014-02-19 13:52:05