C# 实体框架-将结果异步保存到数据库

C# 实体框架-将结果异步保存到数据库,c#,entity-framework,C#,Entity Framework,我有一个web服务,每隔几秒钟就会被调用一次,它会做很多事情,然后执行批量插入,目前调用SaveChanges()平均需要半秒钟。我希望异步保存所有更改,因为这样我可以每秒多次调用我的web服务,并且只需缓冲任何数据库更改,以便由石英计时器保存,这将提高性能 我注意到,在执行web服务函数之后,如果没有对实体数据库模型对象调用“SaveChanges”,任何挂起的数据库更改都将回滚 我是否可以将更改异步保存到数据库中,以及如何执行此操作?原则上,您可以使用.NET中提供的任何异步方法来实现此目的

我有一个web服务,每隔几秒钟就会被调用一次,它会做很多事情,然后执行批量插入,目前调用SaveChanges()平均需要半秒钟。我希望异步保存所有更改,因为这样我可以每秒多次调用我的web服务,并且只需缓冲任何数据库更改,以便由石英计时器保存,这将提高性能

我注意到,在执行web服务函数之后,如果没有对实体数据库模型对象调用“SaveChanges”,任何挂起的数据库更改都将回滚


我是否可以将更改异步保存到数据库中,以及如何执行此操作?

原则上,您可以使用.NET中提供的任何异步方法来实现此目的。如果您可以使用.NET4.5,那么我建议您看看异步/等待方法,因为它们非常容易使用。Entity framework不支持async/await from the box,但您可以使用类添加简单的包装器。

PS:我计划使用quartz.net在异步计时器上调用保存更改,但我愿意接受建议。如果我使用这些方法中的任何一种,我的实体更改是否会在web服务线程完成后立即恢复?如果在ASP.NET中使用await关键字,则在完成所有等待的任务之前,线程不会真正完成。所以你不应该有这样的问题。看看这个公认的答案:嗯,这可能是个问题——web服务调用似乎在短时间后超时。在检查应用程序的日志时,我发现了很多异常,表明“线程被中止”,这是我异步执行数据库事务的动机。使用异步/等待模式,情况不应该如此,因为等待任务的线程被ASP运行时重用。请检查我给的链接!