使用RIA服务插入实体和从属实体

时间:2010-10-12 17:11:02

标签: silverlight entity-relationship wcf-ria-services domaindatasource

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

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

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

在银光视图中,我现在有两个DomainDataSource。关于啤酒DomainDataSource我添加并提交新啤酒,并在供应商DomainDataSource上提交现在的供应商,其中包含将其与啤酒相关联的外键。

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

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

感谢您的众多想法!

1 个答案:

答案 0 :(得分:1)

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

但是,如果所有新供应商都使用新啤酒(大型IF)提交给服务器,您可以在Upddate方法中手动检查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方法,否则RIA会在ChangeSet中存在异常,但该方法应该什么都不做:

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