2013-12-15 70 views
1

好了,我是新來的實體框架......實體框架5,多型號,同一實體

我有它的一些500表的現有SQL數據庫,而我們在考慮的過程作爲我們的主要數據訪問層,從Linq-> SQL移動到實體框架。我們還想考慮更多的領域驅動設計方法,這些方法使用單獨的數據上下文管理應用程序的關鍵區域(即銷售,市場營銷,工作,運輸等)。

如果我們採用諸如「客戶」之類的公共實體,則會出現在多個模型中。到目前爲止,我的示例應用程序中有兩個模型。實體框架非常聰明,只能創建一個客戶類(我們使用默認的Poco T4模板來生成類),但是當我嘗試運行該項目時,出現以下錯誤:「名稱爲'Customer'的多個類型存在於EdmItemCollection在不同的命名空間中基於約定的映射需要唯一的名稱,而不考慮EdmItemCollection中的命名空間「。

所以我正確地認爲實體框架不允許「客戶」存在於多個模型中?如果我真的希望客戶出現在多個模型中,我是否必須開始創建不同版本的客戶類來處理它?

如果這是一個愚蠢的問題,可以提前道歉,但我對EF來說是比較新的。

謝謝...

+0

但是,你當然可以有兩個相同的模型,它們不應該重疊。如果它們重疊,那麼EF將無法找到使用哪一個。 – KrishnaDhungana

回答

1

你說你正在創建有界上下文的DDD。在有界的上下文中,您可以創建多個上下文,其中包含一個或多個相關實體。爲什麼你想創建多個同名的模型?

檢查朱莉·勒曼的鏈接以供參考:

http://msdn.microsoft.com/en-us/magazine/jj883952.aspx

很抱歉,如果我是斷章取義。但是,根據我在這種情況下的經驗,我們必須創建兩個不同的上下文,如「MarketingModelContext」和SalesModelContext。 MarketingModelContext將擁有與marketingmodel以及客戶實體相關的所有dbset。同樣,SalesModelContext將擁有與SalesModel以及客戶實體相關的所有數據集。通過這種方式,您將只創建一個客戶實體或POCO,可以獨立使用兩個上下文。這就是Julie Lerman所說的有界環境。它將幫助您分離上下文,關注並幫助您獲得更好的性能,因爲只有需要的上下文(較少的實體)才能加載。上面的文章將幫助你。

希望我已經回答了您的問題。

+0

所以這裏是我在哪裏。我有一個項目提供兩種模型。一個包含與我的營銷活動相關的表格和一個與銷售相關的表格。這些模型具有不同的名稱,即「MarketingModel」和「SalesModel」,但實體Customer對於兩者都是通用的。因此,我假設每個模型都包含與所討論系統的特定部分相關的實體是合乎邏輯的。我有道理嗎? – NickTaylor

+0

請檢查上面編輯的答案。 –

+0

Bibek,我同意你評論中的所有內容。我有兩個模型,其中都包含客戶實體。這實際上是我開始我的原始問題的地方。實體框架仍然不喜歡在多個模型中擁有Customer實體。對不起,如果我錯過了這一點。 – NickTaylor