2

我有一个 Silverlight 4 应用程序,它使用带有 EF 的 RIA 来查询单个 DomainContext 中的多个表。BUGroup、BUGroupBuilding 和 vwBusinessUnit。 在此处输入图像描述

UI 基本上加载了 BUGroup 实体集,我可以选择不同的 BUGroups,它会像这样加载子表: 在此处输入图像描述

我有一个 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 个建筑物。问题是当我在删除一些建筑物后第二次或其他时间加载它时。即使在加载之后,它也会保留旧的 DomainContext。我什至尝试在 GetBUGroupsCustomQuery() 的负载上将 LoadBehavior 设置为 RefreshCurrent

假设我在一个组中有 5 个建筑物,我使用删除链接在父窗口上删除了 2 个,所以现在我有 3 个。调用子窗口。它仍然显示 5。 在此处输入图像描述

现在我对 GetBUGroupsCustomQuery() 的 DomainServices 进行了休息,我得到了正确的 3 值 在此处输入图像描述

但是在 GetBUGroupResult_Completed 事件处理程序期间,我仍然看到 5 个建筑物。看起来我的 DomainContext 没有刷新,即使我指定了 loadbehavior 来刷新当前。任何输入?

在此处输入图像描述

4

2 回答 2

1

你也可以这样做:

var c = SecurityDomainContext.Current;
var group = c.BUGroups.Single(w => w.BUGroupID == BUGroupID);    
c.Refresh(RefreshMode.StoreWins, group.BUGroupBuildings);
GetBUGroupBuildings = group.BUGroupBuildings.ToList(); 

RefreshMode.StoreWins这样可以保证检索到数据库的当前状态。

于 2012-06-07T14:15:59.663 回答
1

我遇到了与此类似的问题,并通过将数据加载到上下文中然后分离实体集合中不在新返回对象集合中的任何对象的解决方法来解决。在您的加载操作中尝试这样的事情:

SecurityDomainContext.Current.Load<YourObjectType>(
    SecurityDomainContext.Current.GetBUGroupsCustomQuery(),
    LoadBehavior.MergeIntoCurrent,
    loadOperation =>
    {
        var results = context.Comments.Where(
            entity => !loadOperation.Entities.Contains(entity)).ToList();
        results.ForEach(entity => context.Comments.Detach(entity));
    }, null);

我不确定您是否需要替换<YourObjectType>为返回的实体类型,或者您是否可以删除该部分,但这至少应该让您接近。

于 2012-06-06T19:18:35.020 回答