2

這可能嗎?在EF 4.1數據庫中使用存儲庫模式第一種方法

有沒有任何例子?我的搜索已證明目前爲止沒有成果...

我使用這種方法的原因是因爲我必須堅持使用遺留數據庫爲我的MVC 3應用程序,但有一些相當複雜的關聯和繼承層次結構,所以我想EF生成映射,而不是我手動執行映射。我想使用Repository模式進行單元測試。 任何意見讚賞。

回答

2

如果您只是搜索「存儲庫模式實體框架4.1」或其他東西,而忘記了「數據庫優先」這個術語,那麼您的搜索將會非常成功。如果您手動編寫類(Code First)或通過DbContext生成器(數據庫/模型優先)生成它們並不重要。最後你的倉庫將使用這些類。除了您的模型的DbSets之外,沒有生成器也會爲您編寫一個有意義的存儲庫,它們是通用存儲庫的專業化版本。您必須根據模型類和您的業務需求手動編寫它。

因此,不管您遵循代碼優先還是數據庫/模型優先方法,它都不會影響存儲庫的設計。

關於存儲庫模式與EF和單元測試,我建議看這是一個警告和出發點,並跟隨大量的鏈接在這個問題的答案:

Repository Pattern with Entity Framework 4.1 and Parent/Child Relationships

+0

謝謝Slauma。只是爲了澄清一些事情......我不想尋找一些東西來生成我的存儲庫,我可以在許多示例的幫助下自己做。關鍵是我沒有時間使用代碼優先的方法,並且手寫遺留數據庫的所有映射,關聯等。這就是爲什麼我使用數據庫第一種方法。這樣我就可以生成DbContext並讓Repository使用它。感謝這個鏈接,它幫助我清除了一些誤解。 – empo

2

你仍然可以使用代碼的第一個樣式如果你想:代碼優先讓你從現有的數據庫進行反向工程,讓你開始。或者如果你已經有了一個EDMX,你可以用T4模板生成你的代碼優先的類(與EF 4.1一起打包)。或者,再次使用T4模板生成POCO,並將數據庫優先作爲策略。

但我認爲即使使用數據庫優先風格,您仍然可以輕鬆實現存儲庫模式。我認爲你的主要問題將依賴於一些實體框架DLL,如果你這樣做(你可以決定不是問題)。

0

我知道這個帖子是晚了一天,可能是一美元的短。但是到目前爲止,我已經在數據庫優先實現了Repository模式,因此在我的控制器中創建了一個DbContext的實例並將其傳遞到了我的Repository實例中。然後我確保我的存儲庫中的方法在必要時返回我的對象​​的類型。

我以這種方式使用Repository時遇到了兩個主要問題。 首先,我的控制器上的默認Dispose方法有問題。由於我在存儲庫中調用了DbContext,因此我必須繼承IDisposable並在其中實現Dispose方法。 我用這個教程爲例 http://csharppulse.blogspot.in/2013/09/learning-mvc-part-6-generic-repository.html

我遇到的下一個問題是當它來的時候更新我的對象。 因爲我已經通過了DbContext,我的對象已經存在。所以我不得不用我的更新方法和邏輯來看看它是否已經存在。 我用這篇文章來幫助那 An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key

相關問題