nHibernate Session-Per-Request在会话结束前删除并提交

时间:2014-11-02 17:36:36

标签: c# gridview nhibernate

我在c#中使用gridview并尝试删除一行。 我正在使用nHibernate with session-per-request。 我的问题是,当我删除并执行行命令时,我可以删除db中的记录但是当我尝试重新加载数据源时,因为删除还没有提交但我似乎在同一会话中获取原始数据。

有人能告诉我处理这种情况的最佳策略是什么?

非常感谢! SID

1 个答案:

答案 0 :(得分:1)

您应该运行两个交易。在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在你的场景中没有AutoFlush,但如果你根本没有打开一个交易,那么你可能会发现NHibernate的AutoFlush功能不起作用应该。