【问题标题】:Inserting an entity and dependent entities using RIA Services使用 RIA 服务插入实体和依赖实体
【发布时间】:2010-10-21 00:42:11
【问题描述】:

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

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

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

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

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

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

感谢您提出的所有想法!

【问题讨论】:

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


    【解决方案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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-14
      • 2011-01-04
      • 1970-01-01
      • 2014-10-30
      • 1970-01-01
      相关资源
      最近更新 更多