代码之家  ›  专栏  ›  技术社区  ›  Dänu

使用RIA服务插入实体和依赖实体

  •  0
  • Dänu  · 技术社区  · 14 年前

    我有一个关于使用RIA服务(使用Silverlight4.0)插入具有依赖实体的实体的问题。

    假设我在我的(SQL)数据库中有一个名为“beer”的实体和一个名为“supplier”的实体,它们之间有一种关系: 啤酒1-n供应商 . 一种啤酒有多个供应商。

    现在有以下用例:用户输入一个新的啤酒,比如说,有5个供应商。

    在Silverlight视图上,我现在有两个 DomainDataSource 关于啤酒 域数据源 我添加并提交新啤酒和供应商 域数据源 我提交了现在的供应商,其中包含一个将他们与啤酒联系起来的外国密钥。

    我的问题是:我如何才能确保啤酒先被提交,然后再被依赖(记住外销)的供应商提交?

    我知道我可以简单地把 SubmitChanges() 使用 OnSubmitted 事件。但这个解决方案很不错…好。。。瘸腿的它产生了一些非常难看的代码。

    谢谢你的无数想法!

    1 回复  |  直到 14 年前
        1
  •  1
  •   robertkroll    14 年前

    不幸的是,无法强制相同变更集中的更新顺序。

    但是,如果所有新供应商都用新啤酒提交给服务器(一个大的if),您可以手动检查upddate方法中的变更集:

    public void UpdateBeer(Beer beer)
    {
        foreach(ChangeSetEntry changeSetEntry in ChangeSet.Entries)
        {
            if (changeSetEntry.Entity.GetType() == typeof(Supplier))
            {
                Supplier supplier = (Supplier)changeSetEntry.Entity;
                UpdateSupplierInternal(supplier);
            }
        }
    
        DataContext.Beers.Attach(beer, ChangeSet.GetOriginal(beer));
    }
    

    这将调用一个单独的方法来更新供应商。您仍然需要一个updateSupplier方法,或者RIA在变更集中存在异常时会抛出异常,但该方法不应执行任何操作:

    public void UpdateSupplier(Supplier supplier)
    {
        // do nothing
    }