我在使用存儲庫模式的數據層中首先使用實體框架代碼。我目前正在設計我的WCF Web服務來連接到數據層,我只是對如何與數據層進行連接感到困惑。在EF WCF服務中使用上下文和存儲庫
在我的數據層測試項目中,我爲每個測試創建了一個新的DbContext類,並將其包裝在一個使用塊中,在此創建存儲庫類,傳入上下文作爲構造函數參數。然後我可以調用存儲庫上的方法來獲取數據。
這是正確的一開始,然後我做同樣的WCF服務方法?
例如,我會
public class UserService : IUserService
{
public bool CheckEmailAvailability(string email)
{
try
{
using (var context = new MyDbContext())
{
var repository = new UserDataRepository(context);
var emailAvailable =
repository.GetItems().Count(
u => u.EmailAddress.Equals(email, StringComparison.InvariantCultureIgnoreCase)) == 0;
return emailAvailable;
}
}
}
}
還是我使用上下文/存儲庫的概念錯了嗎?
這也讓我覺得在這裏使用DI會很方便,所以我可以在WCF服務測試項目中模擬數據上下文/資源庫對象。這是通常做的事情,如果是這樣,有沒有人有任何鏈接到這個例子或教程?
我一直在討論有哪些方法來獲取上下文和存儲庫,並且認爲只有代碼處理存儲庫才更有意義。問題是如果你不得不對結果進行查詢,例如你在存儲庫上有一個名爲GetItems()的方法。在此範圍內,您可以在使用塊中創建上下文,從EF中選擇並將結果作爲Queryable()返回。您可以不查詢調用方法中的項目作爲上下文已處理 – NZJames
啊,我明白了。我必須承認,我已經忘記了與EF的特殊皺紋。在我使用EF進行數據庫定義的最後一個項目中,最初的選擇將從存儲庫中的EF中進行(例如,通過emailaddress選擇或全選)並作爲集合解析,然後業務邏輯將使用linq來執行還有什麼,它與返回的集合想要的。根據我的經驗,很多時候EF比它的價值更麻煩,像SimpleData這樣的替代品更容易處理。我希望這有幫助。 – Stark