3

我即將開始使用實體框架代碼優先開始使用ASP.Net MVC 4 Web應用程序。由於數據庫已經存在,我使用Code First的能力來執行反向工程以生成我的域類。實體框架代碼優先 - 反向工程

然後我希望將這些域類放入我自己的解決方案中的一個單獨的項目中,以保持它們的持久性無知。但是,當我運行該工具對數據庫進行反向工程時(使用Entity Framework Power Tools),我發現創建了域類,但也創建了一個名爲Mapping的文件夾,其中包含每個域類的映射類,然後使用Fluent API映射表格屬性。這很好。

但是,我也發現,映射類依賴於對實體框架的引用,我只是想知道這是否被認爲是不好的做法?通常,當我創建POCO類時,它們完全是持久性的無知,即根本沒有提及該項目中的實體框架。

您的想法?

謝謝。

回答

5

您可以將POCO類保留在一個項目中,而映射保留在另一個項目中。只需添加對POCO類所在項目的引用即可。另一種方法是創建一個數據訪問層並在那裏移動映射。這樣你有三個項目。您的主要MVC項目,包含映射和對EntityFramework的引用的模型項目和數據訪問層。

例如,您的解決方案可能是這樣的:

1. Web User Interface (MVC) 
2. Business layer 
3. Unit of Work/Repository 
4. Data access layer (Mapping from EF Reverse Engineering) 

所有四個項目都獲得了第五個項目,領域模型(從EF逆向工程模型)。你的1與2,2通信,3與3通信,3與4通信。所有這四個都有一個對域模型的引用,所以你不必在層之間執行任何類型的域模型轉換。順便說一句,我忽略了服務層,但是如果你有Web服務或REST,你可以將它放在另一個項目中,但是我們不要涉及太多的細節。

+0

真的很好的答案。謝謝你。 – tgriffiths

+0

歡迎您! :-) –