0

我收到了一个关于使用 RIA 服务(使用 Silverlight 4.0)插入具有依赖实体的实体的问题。

假设我的(sql)数据库中有一个名为“Beer”的实体和一个名为“Supplier”的实体,关系为:Beer 1 - n Supplier。一种啤酒有多个供应商。

现在有以下用例:用户输入一种新啤酒,假设有 5 个供应商。

在 silverlight 视图上,我现在得到了两个DomainDataSource's。在啤酒上,DomainDataSource我添加并提交新啤酒,在供应商上,DomainDataSource我提交现在的供应商,其中包含将它们链接到啤酒的外键。

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

我知道我可以简单地链接SubmitChanges()使用该OnSubmitted事件。但是这个解决方案非常......好吧......蹩脚。它产生了一些非常丑陋的代码。

感谢您的众多想法!

4

1 回答 1

1

不幸的是,没有办法强制同一 ChangeSet 中的更新顺序。

但是,如果所有新供应商都使用新啤酒提交到服务器(一个很大的 IF),您可以在 Update 方法中手动检查 ChangeSet:

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 方法,否则当它存在于 ChangeSet 中时,RIA 会抛出一个异常,但该方法应该什么都不做:

public void UpdateSupplier(Supplier supplier)
{
    // do nothing
}
于 2010-10-20T16:42:11.880 回答