我有一个关于使用RIA服务(使用Silverlight 4.0)插入具有依赖实体的实体的问题。
假设我的(sql)数据库中有一个名为“Beer”的实体和一个名为“Supplier”的实体,其关系为:啤酒1 - n供应商。一种啤酒有多个供应商。
现在有以下用例:用户输入一个新的啤酒,比如5个供应商。
在银光视图中,我现在有两个DomainDataSource
。关于啤酒DomainDataSource
我添加并提交新啤酒,并在供应商DomainDataSource
上提交现在的供应商,其中包含将其与啤酒相关联的外键。
我的问题是:如何确保首先提交啤酒以及之后提交依赖(记住外键)供应商?
我知道我可以使用SubmitChanges()
事件简单地链接OnSubmitted
。但这个解决方案非常......好吧......蹩脚。它使一些非常难看的代码。
感谢您的众多想法!
答案 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
}