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()应该/应该在每个请求的末尾出现-不应在正在运行的请求中的某个位置手动调用它。
否则我真的很困。
没有找到相关结果
已邀请:
1 个回复
娠侈脚惮顽