我正在使用c#中的网格视图,并且正在尝试删除一行。我正在使用nHibernate和session-per-request。我的问题是,当我删除并执行row命令时,我可以删除db中的记录,但当我尝试重新加载数据源时,因为删除尚未提交,所以我似乎是在同一会话中获取原始数据。
谁能告诉我处理这种情况的最佳策略是什么?
非常感谢!侧边
发布于 2014-11-03 05:07:01
您应该运行两个事务。在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方式来做这件事,你应该让客户端对你的应用编程接口进行两次调用--一次删除调用,然后是一次列表调用。不过,本金是一样的-您需要两个事务。
我不太确定为什么NHibernate在您的场景中不能使用AutoFlush,但是如果您根本没有打开事务,那么您可能会发现NHibernate的AutoFlush特性不能正常工作。
https://stackoverflow.com/questions/26702277
复制相似问题