说明:
我在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方法的方法,我用[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将在客户端创建一个实体方法,使我能够这样做:
private void btnShake_Click(object sender, RoutedEventArgs e)
{
Chemical chem = (ListBox)sender.SelectedItem as Chemical;
chem.ShakeChemical(22);
db.SaveChanges();
}
问题:
我的问题是如何使最后两个示例像LoadOperation一样异步工作?在第一个例子中,我可以在Load方法上使用回调来响应操作完成,但我不知道如何使其他两个函数异步,我不希望我的UI在调用期间阻塞。
修改
我现在看到第二个示例的方法有一个带Action参数的重载,所以我确实有第二个例子的回调。但是,问题仍然存在于第三个例子中。
答案 0 :(得分:0)
我假设第三种情况是以某种方式更新化学物体?如果是这种情况,那么只需查看RIA服务的“命名更新”方法。希望这有帮助