我希望(Win 应用程序)SaveChanges
的ObjectContext
异步保存更改,在用户能够继续工作时为用户显示一个选取框(或可控?)进度条(我可以轻松实现)。
我基本上想覆盖SaveChanges
.ObjectContext
有没有人考虑过这个?
我希望(Win 应用程序)SaveChanges
的ObjectContext
异步保存更改,在用户能够继续工作时为用户显示一个选取框(或可控?)进度条(我可以轻松实现)。
我基本上想覆盖SaveChanges
.ObjectContext
有没有人考虑过这个?
Entity Framework 本身目前不支持异步操作。主要是因为它是建立在 ADO.NET 之上的,而 ADO.NET 也不支持。默认情况下,ADO.NET 甚至不是线程安全的。
您可以使用上面的委托方法或将其包装到任务中。但是即使提供者支持它也不会使用任何异步调用。此外,在此“后台”操作期间,您不应对 ObjectContext 执行任何操作(查询、添加对象等),因为这可能会导致状态损坏。
与多线程相关的你可以阅读这篇文章。它更老了,但想法仍然有效。
编辑 2013-04-17:
EF6(下一个版本,在撰写本文时目前处于 alpha 阶段)将支持异步操作,即您请求的SaveChangesAsync
. 它还扩展了 ADO.NET 模型,因此如果提供程序本身支持异步执行,它将真正是异步的(否则回到以前的行为,因为没有更好的(明智的)可做的事情)。
在 2013-03-12 编辑:
由于有些人开始对这个答案投反对票,我猜出于某种原因,这个解决方案不再好。
请不要因此而否决答案。总是从温和的评论开始,说明你为什么不喜欢这个答案。
我相信您需要使用Asynchronous Delegates。它基本上是这样工作的:
您从要异步调用的方法创建一个委托;
你打电话BeginInvoke
给代表,开始通话;
您可以做任何其他需要做的事情(例如,为选取框设置动画);
您可以等待异步调用完成,或者检查是否已完成,如果未完成则继续为选取框设置动画;