我對存儲庫模式很陌生,但到目前爲止,我喜歡我如何使用它。我在Codeplex上發現了這個implementation。我現在的問題是:如何使用數據存儲庫
我是否正確使用存儲庫模式?
和
誰能提供下我的例子更好的解決方案?
這裏是一個例子(我使用poco),在那裏我已經在過程中提前關閉了一個關閉的位置。一些UI交互後,我要更新的位置屬性(如姓名)和相關的用戶(包括添加和刪除):
using (var repo = RepositoryHelper.GetLocationRepository())
using (var repo2 = RepositoryHelper.GetUserRepository(repo.UnitOfWork))
{
repo.Add(location);
repo.UnitOfWork.Context.ObjectStateManager.ChangeObjectState(location, EntityState.Modified);
foreach (var user in location.Users)
{
repo2.Add(user);
if (user.Id != 0)
{
repo2.UnitOfWork.Context.ObjectStateManager.ChangeObjectState(user, EntityState.Unchanged);
}
}
foreach (var user in _remove.Where(user => user.Id != 0))
{
repo2.Delete(user);
}
repo2.UnitOfWork.Commit();
}
的例子是工作,雖然我如何到了很迷茫附加命令。如果對象來自另一個環境,我認爲它會被使用?!但是,如果我嘗試,我總是會得到一個異常,該對象正在被另一個上下文使用。並且可以說,我正在分離位置,之後我無法訪問Users集合。
另一個問題(我認爲它與此密切相關):我一直在讀,數據庫連接應儘可能短。因此,我將IDisposable接口添加到存儲庫,所以我可以像ObjectContext一樣使用它們。然而,我發現了一些例子(我認爲也在wpf應用程序框架中),這不是通常的方法。那麼,我應該遵循什麼樣的話?
親切的問候,
亞光
我需要一點時間來思考第一部分。但關於第二個:這意味着,可以在視圖模型的構造函數中創建一個上下文(並且在處理視圖模型時進行處理)是可以的? – Matthias 2011-03-10 13:38:14
我們在談論WPF嗎?如果是這樣,我不能回答它,因爲我不是WPF開發人員,我從來沒有使用過WPF或MVVM。但是,如果將常見的WinForms與MVP(模型 - 視圖 - 演示者)模式結合使用,最佳做法是爲每個演示者提供單個上下文。 – 2011-03-10 13:40:22
第一部分:對不起,但我有點困惑。我想強調,這是我第一次使用存儲庫模式,所以上面的代碼只是我的一個起點。我認爲你的意思是說我正在使用國家經理?除了我發現的所有樣本都以某種方式使用存儲庫。 – Matthias 2011-03-10 13:43:54