0
假设我有一个客户正在填写网站的数据。使用的基础持久性是Nhibernate。nhibernate和asp.net的有状态会话
现在的一系列事件是这样的
- 用户填写了表格。
- 他提交表格。
- nhibernate sessionfactory创建并通过客户对象将其保存到数据库。
- 数据库使用nhibernate的本地生成器提交会话对象
- 但是在服务器的响应到达客户端之前发生了一个事故。与客户端的连接关闭。
- 客户端看到页面未找到错误或请求超时错误。并有一个困境,他尚未注册。
- 所以他再次按下刷新按钮。并且相同的数据集(尽管已提交给数据库)已发送到服务器以进行数据库提交。
- 服务器看到数据并再次向不同的id注册同一个客户。
- 所以问题就像。现在相同的客户条目已被重复两次,导致连接中断。
现在有人可以告诉我如何进入这种情况。因此,即使客户提交,他只能识别一个条目并提交,即使响应已被切断并按下了刷新按钮?
第4点可以请你给一个虚拟的例子代码?我其实并不了解这个概念,但还没有实现,我没有使用任何MVC,只是简单的asp.net 3.5,所以如果你可以使用一个控制器方法,如果你可以提供一个虚拟代码。这将是一个非常有用的:(对不起,询问优惠,但真的不知道如何实施 – Joy 2011-06-16 04:42:03
不必控制器 - 编辑说高层次的方法 - 例如在Page_Load。因此,Page_Load应打开交易,检查数据库查看用户是否已经注册,如果没有,保存新的用户详细信息,然后提交事务和Response.Redirect到指示注册成功的页面。 – BonyT 2011-06-16 08:54:52
你的意思是我应该实现ihttpModule,然后使用一些有点context.beginrequest事件内部做它的工作..然后检查会话是否已经存在..它只会更新该会话,否则它会说用户已经存在。 ..之后,当其context.endrequest事件时,它将简单地清除本地会话。这是你想说的方式吗?我搜索了一下,发现这个链接到了你所说的情况。 http://adammatusiak.blogspot.com/2010/03/binding-fluent-nhibernate-session-to.html – Joy 2011-06-17 04:08:36