首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nhibernate和ISession

Nhibernate和ISession
EN

Stack Overflow用户
提问于 2009-07-11 05:09:32
回答 2查看 839关注 0票数 1

假设我有一个简单的视图,其中显示了产品名称以及它是否已停产。我正在从Northwind数据库中提取数据。我在NHibernate中使用了一个简单的模型视图模式和一个DAO模式。当表单加载时,我的UI带有一个加载按钮和一个保存按钮。如果我点击了Load按钮,而不是在后面的代码中,我只需将调用传递给我的展示者来加载数据。呈现者调用DAO来获取数据并用数据填充视图。然后我按下保存按钮。我的代码再一次将调用传递给展示者。展示者需要拥有在加载时创建的会话对象,以执行乐观并发、更改跟踪等操作。

所以我的问题是,我应该在哪里创建我的ISession对象,以便它可以执行更改跟踪和乐观并发?

EN

回答 2

Stack Overflow用户

发布于 2009-07-11 05:39:33

HTTP是无状态的。您的工作单元仅存在于服务器端。至于单击'Load‘,那么您的UOW只是检索记录并映射到您的视图模型。“保存”和工作单元在你访问服务器时开始-而不是在加载过程中,在浏览器中编辑,然后返回到服务器。

在实现方面,您不应该将ISession保存在内存中(在本例中为ASP.Net session对象),这肯定是耗尽内存和非托管ado.net资源的快速方法。有些人选择在begin_request中将ISession与HTTP上下文相关联,并在end_request上进行处置,当然可以更细粒度,但在所有情况下,它都不会再存在了。

在一个简单的系统中,点击“保存”后,您将需要使用一个ID (隐藏字段或其他字段)将产品从数据库中拉出,从Request.Form设置属性,然后在数据库中更新。

至于并发性。如果您在隐藏字段中记录时间戳或增量版本

代码语言:javascript
复制
<input type="hidden" name="version" value="12"/>

有更复杂和复杂的方法,但通常你不能/不应该在你的asp.net会话对象中粘贴ISession。

票数 0
EN

Stack Overflow用户

发布于 2009-12-29 06:38:34

既然你使用的是MVP,我就假设这是一个桌面应用程序,而不是web应用程序。与"Persistent Conversation“一样,UnitOfWork是一个很好的模式。Ayende最近在building a desktop application with nhibernate上写了一篇很棒的文章,所以我一定会看一看。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1113002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档