3

我希望(Win 应用程序)SaveChangesObjectContext异步保存更改,在用户能够继续工作时为用户显示一个选取框(或可控?)进度条(我可以轻松实现)。

我基本上想覆盖SaveChanges.ObjectContext

有没有人考虑过这个?

4

2 回答 2

3

Entity Framework 本身目前不支持异步操作。主要是因为它是建立在 ADO.NET 之上的,而 ADO.NET 也不支持。默认情况下,ADO.NET 甚至不是线程安全的。

您可以使用上面的委托方法或将其包装到任务中。但是即使提供者支持它也不会使用任何异步调用。此外,在此“后台”操作期间,您不应对 ObjectContext 执行任何操作(查询、添加对象等),因为这可能会导致状态损坏。

与多线程相关的你可以阅读这篇文章。它更老了,但想法仍然有效。

编辑 2013-04-17:

EF6(下一个版本,在撰写本文时目前处于 alpha 阶段)将支持异步操作,即您请求的SaveChangesAsync. 它还扩展了 ADO.NET 模型,因此如果提供程序本身支持异步执行,它将真正是异步的(否则回到以前的行为,因为没有更好的(明智的)可做的事情)。

于 2012-06-03T19:15:03.383 回答
2

在 2013-03-12 编辑:

由于有些人开始对这个答案投反对票,我猜出于某种原因,这个解决方案不再好。

请不要因此而否决答案。总是从温和的评论开始,说明你为什么不喜欢这个答案。


我相信您需要使用Asynchronous Delegates。它基本上是这样工作的:

  1. 您从要异步调用的方法创建一个委托;

  2. 你打电话BeginInvoke给代表,开始通话;

  3. 您可以做任何其他需要做的事情(例如,为选取框设置动画);

  4. 您可以等待异步调用完成,或者检查是否已完成,如果未完成则继续为选取框设置动画;

于 2009-08-04T14:08:53.910 回答