微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何使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的方法,但它是一个方法,则可以使用[Invoke]属性标记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一样异步工作?在第一个示例中,我可以使用Load方法上的回调来响应操作完成,但是我不知道如何使其他两个函数异步,并且我不希望UI在调用期间阻塞。 编辑: 现在,我看到第二个示例的方法具有Action参数的重载,因此我确实有第二个示例的回调。但是,第三个示例仍然存在问题。     

解决方法

        我假设第三个场景正在以某种方式更新化学对象?如果是这种情况,则只需查看RIA服务的“命名更新”方法即可。希望这可以帮助     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。