nHibernate Session Per Request在会话结束前删除并提交
本文关键字:删除 提交 结束 会话 Session Per Request nHibernate | 更新日期: 2023-09-27 18:28:44
我在c#中使用了一个网格视图,并试图删除一行。我使用的nHibernate与会话每个请求。我的问题是,当我删除并执行行命令时,我可以删除数据库中的记录,但当我尝试重新加载数据源时,因为删除尚未提交,我似乎在同一会话中获取原始数据。
有人能告诉我处理这种情况的最佳策略是什么吗?
非常感谢!Sid
您应该运行两个事务。在WebForms中,您的代码可能如下所示:
using (var transaction = Session.BeginTransaction())
{
var foo = Session.Load<Foo>(fooId);
Session.Delete(foo);
transaction.Commit();
}
using (var transaction = Session.BeginTransaction())
{
gridView.DataSource = Session.List<Foo>(fooId);
gridView.DataBind()
transaction.Commit();
}
正如Radim Kohler所说,如果你在MVC中用更现代的RESTful方式来做这件事,你应该让客户端对你的API进行两次调用——一次Delete调用,然后是List调用。不过本金是一样的——你需要两笔交易。
我不太确定为什么NHibernate在您的场景中不自动刷新,但如果您根本没有打开交易,那么您可能会发现NHibernat的自动刷新功能无法正常工作。