【问题标题】:How to make Entity methods in RIA DomainContext work asynchronously如何使 RIA DomainContext 中的实体方法异步工作
【发布时间】:2011-06-01 07:30:21
【问题描述】:

简介:

我在 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 方法,我将 DomainService 的方法标记为 [Invoke] 属性:

[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 将在客户端创建一个实体方法,使我能够做到这一点:

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

问题:

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

编辑:

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

【问题讨论】:

  • 关于如何同步执行第一个示例的任何线索?

标签: silverlight entity-framework asynchronous ria domainservices


【解决方案1】:

我假设第三种情况是以某种方式更新 Chemical 对象?如果是这种情况,那么只需查看 RIA 服务的“命名更新”方法。希望这会有所帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 2018-11-09
    相关资源
    最近更新 更多