RIA と EF を使用して単一の DomainContext で複数のテーブルをクエリする Silverlight 4 アプリケーションがあります。BUGroup、BUGroupBuilding、および vwBusinessUnit。
UI は基本的に BUGroup エンティティ セットをロードし、別の BUGroup を選択すると、次のように子テーブルがロードされます。
次のように、[Manage Buildings] ボタンの子ウィンドウに渡す DomainContext があります。
ManageBuildingsChildWindow ManageBuildingscw = new ManageBuildingsChildWindow();
ManageBuildingscw.Closed += new EventHandler(ManageBuildingscw_Closed);
ManageBuildingscw.DataContext = null;
ManageBuildingsViewModel ManageBuildingsViewModel = new ManageBuildingsViewModel();
ManageBuildingscw.DataContext = ManageBuildingsViewModel;
そして、次のように子ウィンドウビューモデルに子ウィンドウコンテキストをロードしています:
GetBUGroupResult = SecurityDomainContext.Current.Load(SecurityDomainContext.Current.GetBUGroupsCustomQuery(), LoadBehavior.RefreshCurrent, false);
GetBUGroupResult.Completed += new EventHandler(GetBUGroupResult_Completed);
GetBUGroupResult のイベント ハンドラは次のとおりです。
void GetBUGroupResult_Completed(object sender, EventArgs e)
{
GetBUGroupBuildings = SecurityDomainContext.Current.BUGroupBuildings.Where(w => w.BUGroupID == BUGroupID).ToList();
GetBUGroupResult.Completed -= new EventHandler(GetBUGroupResult_Completed);
}
各 BUGroupBuilding をデータグリッドの削除リンクにバインドすると、データベースから削除されます。建物の管理ボタンをクリックして子ウィンドウを呼び出すと、初めて正常に読み込まれます。5 つの建物がある場合、5 つの建物を読み込みます。問題は、いくつかの建物を削除した後、2 回目以降にロードするときです。ロード後も古い DomainContext を保持します。GetBUGroupsCustomQuery() の Load で LoadBehavior を RefreshCurrent に設定してみます。
グループに 5 つの建物があり、削除リンクを使用して親ウィンドウで 2 つを削除したので、現在は 3 つあるとします。子ウィンドウを呼び出します。まだ5を示しています。
ここで、GetBUGroupsCustomQuery() の DomainServices を中断すると、正しい 3 つの値が返されます。
しかし、GetBUGroupResult_Completed イベント ハンドラーの間、まだ 5 つの建物が表示されています。loadbehavior を指定して current を更新しても、DomainContext が更新されないようです。入力はありますか?