2012-02-07 57 views
5

我正在尋找解決方案,並且可能很多人都必須面對這個問題。在多個edmx文件(實體框架4.0)之間共享模型

我很抱歉我正在研究一個包含近400個表格的應用程序。 應用程序由七個類庫項目(StudentInfo,庫,費用等)組成,每個項目都有自己的代碼生成策略=默認的.edmx文件(包含50個表格)和 引用類庫項目的單個Web應用程序項目。
大約有15個表格,這些表格很常見,並將出現在每個類庫項目中的.edmx文件中。所有.edmx文件中的類/模型的命名空間都是相同的(Campus)。

我創建了一個部分類,即學校(這是公用表/模型之一),其中包含一些方法。

但是會引發下面的編譯時錯誤 'D:\ Project \ Campus \ CampusStudent \'和'D:\ Project \ Campus \ CampusLibrary \ bin \ Debug \ CampusLibrary.dll'

其他成員建議的解決方案
1)爲每個.edmx文件分別命名空間。
2)對模型使用不同的名稱,即StudentSchool,LibrarySchool等
這兩個解決方案都會迫使我在每個類庫項目中使用它的方法來複制公共類。 任何人都可以幫助我嗎?

+0

我想問題是否真的需要所有edmx文件中存在的15個表。難道你不能按邏輯分割模型以消除冗餘? – 2012-05-15 18:16:13

回答

6

如果您正在使用POCO T4模板來生成當前實體,可能會有一種方法。 EF中的POCO可以是任何名稱空間中的任何類,它們與您的EDMX中的實體具有相同的名稱,並且具有與EDMX中的實體相同名稱的所有屬性(包括獲取者和設置者的相同類型和可訪問性)。

在另一個程序集中定義15個共享類(必須遵循POCO規則),並在所有庫項目中引用它。一旦你有這個程序集創建你自己的版本的POCO T4模板,它不會爲這些共享實體創建新的類文件,而是使用引用程序集中的類。

另一種選擇是手動創建和維護所有這400個類和EF上下文類型。如果您僅使用代碼映射(又稱代碼優先)並且您不會遇到這些問題,那麼這就是您將要執行的操作。

+0

感謝您的回覆。我會盡力實施它。 – 2012-02-07 08:59:49

+0

尊敬的Ladislav,您是否有示例應用程序或鏈接到可以幫助我實現它的資源。其實我無法應用你的建議來創建POCO T4模板**,它不會爲這些共享實體創建新的類文件,而是使用引用程序集**中的類,因爲我不是非常精通EF – 2012-02-08 07:17:57

+0

對不起,我沒有一個例子。您只需創建不能創建的實體名稱的靜態硬編碼集合。該集合將直接在模板中定義。在爲實體生成代碼的模板部分中,驗證實體名稱在集合中不存在。您還需要修改用於在其他實體中生成導航屬性的代碼,以使用引用程序集中的正確類型。 – 2012-02-08 07:52:13