如何使RIA DomainContext中的Entity方法异步工作



简介:

我在Silverlight应用程序上有一个RIA服务,它从.Web应用程序生成代码。在服务器端,我使用的是EF4和基于EF4模型的DomainService。

第一个例子:

如果我用自己的方法实现IEnumerable或IQueryable来扩展DomainService,RIA会在其DomainContext类上生成适当的方法。类似这样的东西:

public partial class SymbolicDataService
{
    public IQueryable<Chemical> GetWeightedChemicals(int min, int max)
    {
        // ... some EF query here
    }
}

RIA生成了这个方法,所以我可以在Silverlight端做这样的事情:

private void btnLoad_Click(object sender, RoutedEventArgs e)
{
    SymbolicDataContext db = new SymbolicDataContext();
    var chemicals = db.Load(db.GetWeightedChemicalsQuery(10,24), onChemicalsLoaded, false);
}

然后我在onChemicalsLoaded回调函数中响应加载。

第二个例子:

如果我想要一个不返回IEnumerable或IQueryable但却是void方法的方法,我会用[IInvoke]属性标记DomainService的方法:

[Invoke]
public void FlushChemical(Chemical chemical) 
{ 
    // some code that does what it does (with EF)
}

现在我可以做一些类似的事情:

private void btnLoad_Click(object sender, RoutedEventArgs e)
{
    SymbolicDataContext db = new SymbolicDataContext();
    var chemical = db.GetWeightedChemicals(10,24).FirstOrDefault();
    db.FlushChemical(chemical);
}

第三个示例:

如果我这样做:

public void ShakeChemical(Chemical chem, int timeShaking)
{
    // Shake the chemical until it drops
}

RIA将在客户端创建一个Entity方法,使我能够做到这一点:

private void btnShake_Click(object sender, RoutedEventArgs e)
{
    Chemical chem = (ListBox)sender.SelectedItem as Chemical;
    chem.ShakeChemical(22);
    db.SaveChanges();
}

问题:

我的问题是如何使最后两个示例像LoadOperation一样异步工作?在第一个示例中,我可以使用callback on Load方法来响应操作完成,但我不知道如何使其他两个函数异步,并且我不希望我的UI在调用过程中被阻塞。

编辑:

我现在看到第二个例子的方法有一个带有Action参数的重载,所以我有第二个示例的回调。然而,第三个例子的问题仍然存在。

我假设第三个场景是以某种方式更新Chemical对象??如果是这种情况,那么只需研究RIA服务的"命名更新"方法。希望这能帮助

相关内容

  • 没有找到相关文章

最新更新