NHibernate和AJAX场景中的每次会话会话:需要手动刷新吗?

| 我们的应用程序面临一个非常奇怪的问题,直到现在我还没有解决该问题的选择: 该应用程序在每次会话会话体系结构中使用NHibernate(3.1.x),这意味着在每个ASP / IIS请求的开始/结束时,打开/关闭+刷新/提交带有新事务的NHibernate会话。 现在,我们在应用程序中有了一个邮箱,其中包含一个简单的mailgrid: 用户首次进入邮箱时,将首次填充mailgrid(start-Request创建一个新的NHibernate会话/事务,从DB加载内容,在end-Request上,该会话关闭) 在删除邮件时出现问题: (1) 邮件的删除不会通过完整的页面重新加载/刷新来实现,而是会调用Web服务,该服务会在删除消息后返回新呈现的HTML网格。 此网络服务通过执行简单的操作来删除邮件
T_Mails m = T_Mails.GetMailByID( 12345678 );
m.Status = MailStatusDeleted;
NHibernateSession.Update( m );
(2) 调用此命令以更新邮件之后,该函数还重新呈现更新的mailgrid-通过查询表T_Mails的最后5行(一个邮箱页面仅包含5行!)来完成此操作。然后,这是给定用户的邮箱的当前内容。 现在的问题是: 由于这两个调用都发生在Web服务的同一功能中(因此在同一会话/事务作用域中),因此我们要删除(在步骤1中)的邮件不会被删除,因为NHibernateSession.Update(m )无法访问数据库。 如果在调试会话期间通过MSSQL ManagementStudio打开表,则可以看到邮件的状态未持久化到数据库。 我对此问题的简单解决方案是: 在更新邮件和从表中重新加载内容之间进行手动NHibernateSession.Flush()调用? 但是:这将破坏每次会话会话模式,因为NhibernateSession.Flush()应该/应该在每个请求的末尾出现-不应在正在运行的请求中的某个位置手动调用它。 否则我真的很困。     
已邀请:
        您应该进行2次ajax调用-第一个将删除项目,第二个将在刷新第一个查询时刷新列表。请确保您以相同的顺序拨打电话。以下是使用jQuery的示例代码
$.ajax({
    url: \'Mail/Delete\',
    data: { mailId: someId },
    success: function (data) {
        $.ajax({
            url: \'Mail/Refresh\',
            success: function (data) {
                //here you should put new list into list container
            }
        });
    }
});
    

要回复问题请先登录注册