2011-04-21 133 views
6

我不想使用外鍵關聯公司類型(將持有外鍵ID的成員),但更喜歡使用導航屬性。所以我刪除了CompanyTypeId。在 命名空間 「http://schemas.microsoft.com/ado/2008/09/edm」 具有不完整的內容元素「校長」:刪除外鍵屬性導致異常

我得到這個例外是涉及實體公司與CompanyType之間的關係:

錯誤5。列表 預計可能的元素: 'PropertyRef'命名空間 'http://schemas.microsoft.com/ado/2008/09/edm'。

enter image description here

我怎樣才能刪除這些ID的從波蘇斯沒有得到例外呢?

+0

您嘗試將它們移除的順序是什麼? – Genzume 2011-04-21 22:13:24

+0

@泰勒費拉羅:你是什麼人? – Naor 2011-04-21 22:19:09

+1

通常情況下,您不能刪除CompanyTypeId,除非您刪除約束,將其作爲ID的外鍵。一旦該限制被刪除,那麼您可以從Company中刪除CompanyTypeId。 – Genzume 2011-04-21 22:21:08

回答

8

這是Foreign key association and Independent association之間的差異。兩個關聯都使用導航屬性,但只有外鍵關聯也使用FK屬性。您可以按照@Robbie提到的方式全局刪除它們,也可以手動更改所選關係的類型。

  • 選擇實體框架設計者的關係
  • 在屬性中刪除參照約束
  • 轉到Mapping窗口和映射關係

這裏是我的測試應用程序的一個屏幕截圖OrderOrderLine實體之間的一對多關係:

enter image description here

正如您所見,OrderLine實體中沒有OrderId,關係的參照約束爲空。還指定了關係的映射。

但是您不能永遠刪除IdCompanyType。 ID(PK)是強制性的。您只能在其屬性中更改其可訪問性。

+0

非常好的解釋@拉迪斯拉夫。 +1 – 2011-04-22 08:28:09

+0

如果我從Company實體中刪除CompanyTypeId,該如何插入(確定CompanyTypeId)? – Naor 2011-04-25 21:28:37

+0

@Noar:你必須指定導航屬性'company.CompanyType = ...;' – 2011-04-25 21:33:24

4

當你在你的模型從您的數據庫會詢問進口,如果你想:

「在模型中包含外鍵列」 你需要將其關閉。

enter image description here

+0

如果我將從實體數據模型中刪除外鍵約束 - 讓ef知道加載導航屬性? – Naor 2011-04-22 00:44:01

+0

Entity Propertys仍將被創建,它在FK列上不會是:) – 2011-04-22 00:58:54

+0

從基於EF繼承的錯誤障礙中拯救。謝謝。 – 2013-07-24 15:31:20