如何配置Nhibernate不在当前会话中保存对象

时间:2011-05-11 09:46:55

标签: asp.net-mvc nhibernate asp.net-mvc-3 c#-4.0

我有三个参与者:用户,角色和权限。 有两个控制器:UserController和RolePermissionController。所有控制器都由Nhibernate Session包装。

当我创建填充角色权限时,用户不存在。所以我将新的Permission对象存储在ASP.MVC会话中。当我在UserController中创建User时,我希望通过权限保存新角色。

但是当我使用存在权限填充新角色时(我通过Nhibernate从DB获得)并转到用户控制器新对象创建的角色,而不调用Session.SaveOrUpdate或任何其他方法。

我在使用现有权限填充新角色后尝试使用Evict:

Microsoft.Practices.ServiceLocation.ServiceLocator.Current.GetInstance<ISession>().Evict(newRole);

但它没有帮助。 所以我想对Nhibernate说 - 不要在这个事务上保存实体(RolePermissionController) - 并保存为连接到UserController中的User对象实体。

1 个答案:

答案 0 :(得分:4)

这不能直接回答您的问题,但它仍然可能是一个解决方案 - 如何通过ViewModel收集所有信息,以便最终得到一个控制器操作,从ViewModel获取信息,创建角色和用户同时(即在同一请求期间),不需要杂乱的会话内容。

也许不是你想要的答案,但我已经做了类似的事情,而且它运作得很好。