0

我有一个 ASP.NET MVC 应用程序,它使用 NHibernate 将数据持久保存到 SQL Server 数据库中。

在某些情况下,我想将一个条目保存到数据库中(最初由调用控制器上的操作方法触发),但无需阻止调用者。

尝试在数据库中实现“即发即弃”机制是否“安全”,该机制将数据库调用放入任务中,然后在后台调用它,以便控制可以立即返回给调用者?(或者使用 BackgroundWorker 或“async/await”关键字完成相同的事情)我需要一个解决方案,其中 NHibernate 不会被 ASP.NET 试图清理其 ISession 所绊倒,这是每个请求的。我在会话中使用 Autofac 进行生命周期管理。我假设数据库操作的生命周期会比 Web 请求本身的生命周期稍长一些,我不确定这会如何顺利进行。

4

1 回答 1

3

这样做是不安全的;我有一篇关于这个主题的博文。问题是当您没有正在进行的请求时,您的整个 AppDomain 可能会被拆除。另外,考虑一下如果数据库插入由于某种原因失败会发生什么?如果您提前返回,则无法通知客户错误。

可靠的解决方案必须在将成功返回给调用者之前将数据存储在某种持久性位置。这可以直接在数据库中,也可以在某种队列中(稍后由独立的工作人员处理)。

于 2013-08-26T19:36:57.437 回答