2013-02-14 77 views
2

我有一個包含超過100個dable的數據庫。我決定將EF模型分成三個不同的模型。有幾個表格出現在多個模型中。使用EF 5.X DbContext Generator後,我得到了POCO類。建議:CLR類型到EDM類型的映射不明確,因爲多個CLR類型與EDM類型匹配

該模板生成重複的類(出現在多個模型中的類),但具有不同的名稱空間。試圖查詢該子裏的一個後,我得到了以下錯誤:

The mapping of CLR type to EDM type is ambiguous because multiple CLR types match the EDM type 

面臨這樣的問題,我相信以後我有兩個選擇:

  1. 編輯CSDL,MSL,SSDL文件重命名的實體。在這種情況下,我會將上下文名稱作爲前綴附加到實體上。
  2. 編輯EF 5.x DbContext生成器以編輯將生成的POCO類的名稱。在這種情況下,我還會將上下文名稱作爲前綴附加到POCO類。

我的問題如下:我應該關注哪個選項?根據選擇的選項我需要做什麼。如果沒有任何選項是有效的,你建議我做什麼?

+0

這個問題沒有「最好」的答案。您必須找到最適合您需求的解決方案。你沒有提到的另一種方法是修改生成器,以便不再創建已經存在的類。 – 2013-02-14 19:11:09

+0

我知道這個問題沒有具體的答案,但任何建議都會有所幫助。你知道我怎樣才能實現編輯DbContext生成器模板,所以它不會創建已經存在的類?我試圖找出它,但不能理解模板背後的所有代碼。 – razp26 2013-02-15 22:44:45

回答

1

如果您編輯t4模板(選項2),所有的類都將受到影響。通過編輯類名(您可以在設計器表面中完成),您只能更改那些在更多上下文中通用的類。因此,如果重疊的類很少,我會選擇選項1.我在類似的情況下也是這樣,其中一些表包含在多個上下文中(業務,授權,報告...) ,並且只有該類具有其原始名稱的上下文才適用於該類上的CUD操作。另外,我不喜歡我所有的課都有前綴。

+0

這個解決方案似乎非常有用,但我仍然需要面對另一個問題。因爲我將db模型分解爲三個不同的模型,我使用csdl文件中的「using namespace」來引用另一個模型的實體。有了這個,我不能重命名實體的名稱,因爲它們不適合其他模型中的名稱。任何想法? (因爲性能,我拆分了模型,我不知道這是否適用於EF 5) – razp26 2013-02-15 21:42:50

+0

這聽起來像是你不應該做的事情。我們在這裏是否在同一軌道上?我在業務上下文中討論了一個'User'實體,並且在授權上下文中提供了'AuthorizationUser'實體。兩者都映射到同一張表,但除此之外,它們沒有任何關係。 – 2013-02-15 22:08:30

+0

我瞭解你。就我而言,你推薦我做什麼?我幾天沒有找到任何解決方案,因此一直困擾着我。 – razp26 2013-02-15 22:18:58

-1

我刪除了.edmx文件並重新創建它。
這解決了這個問題。不知道這是否有助於你。