更新WCF RIA服务问题

时间:2010-07-09 17:24:40

标签: c# silverlight linq-to-sql silverlight-4.0 wcf-ria-services

在通过WCF RIA服务进行更新后,我遇到了刷新页面数据的问题。

我在页面上有一个ComboBox和一个Button。用户从ComboBox中选择一个项目,然后单击Button。这会对数据库中的项进行软删除(设置“Active”= false)。但是,我希望在更新完成后将其从ComboBox中删除。这就是我的问题所在。

InventorySystemDomainContext context = new InventorySystemDomainContext();

private void btnDelete_Click(object sender, RoutedEventArgs e)
{
    Cigarette c = cboCigarette.SelectedItem as Cigarette;
    c.Active = false;

    SubmitOperation so = context.SubmitChanges();
    so.Completed += delegate (object s, EventArgs es)
    {
        LoadComboBox();
    }
}

private void LoadComboBox()
{
    cboCigarettes.DataSource = null;
    cboCigarettes.DataSource = context.Cigarettes;
    context.Load(context.GetCigarettesQuery());
}

单击“删除”按钮时,所有代码都会运行。但是,已删除的项目仍在ComboBox中(即使记录已在数据库中更新)。如果我刷新页面,该项目将从ComboBox中消失。

有什么想法吗?

PS:我从内存中写了这段代码,因为我没有代码。所以我可能忘了一条线,但我想我得到了所有相关的线。

2 个答案:

答案 0 :(得分:3)

您是否尝试将ComboBox.ItemsSource设置为从Load方法返回的Entities集合? EntitySets(context.Cigarettes)是聚合的(它们包含来自多个加载的数据),而LoadOperation.Entities则不包含(它只包含来自它所代表的加载的数据)。

答案 1 :(得分:0)

接受的解决方案的问题是该集合现在已断开连接,这与添加和删除绑定项目的内置优雅相混淆。

或许更好的解决方案是在软删除后分离有问题的实体

InventorySystemDomainContext context = new InventorySystemDomainContext();

private void btnDelete_Click(object sender, RoutedEventArgs e)
{
    Cigarette c = cboCigarette.SelectedItem as Cigarette;
    c.Active = false;

    SubmitOperation so = context.SubmitChanges(OnCigaretteSaved, null);
}

private void OnCigaretteSaved(SubmitOperation so)
{
    context.Cigarettes.Detach(context.Cigarettes.Where(item => item.Active == false).First());
}

private void LoadComboBox()
{
    cboCigarettes.DataSource = null;
    cboCigarettes.DataSource = context.Cigarettes;
    context.Load(context.GetCigarettesQuery());
}