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

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

问题描述:

我有三个实体:用户,角色和权限。 有两个控制器:UserController和RolePermissionController。所有控制器都由Nhibernate Session包装。如何配置Nhibernate不在当前会话中保存对象

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

但是当我用存在的Permission填充新角色(我通过Nhibernate从数据库中获得),然后去创建用户控制器新对象角色,而无需调用Session.SaveOrUpdate或任何其他方法。

我试图用集中退出后,填补我的新角色与权限同时存在:

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

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

+0

我猜你在映射中设置了从权限到角色级联。 – Vadim 2011-05-11 14:12:52

+0

我不这么认为。 Nhibernate会话中的问题,而不是级联中的问题。 – 2011-05-13 17:42:51

+0

你确定你正在调用Evict()的会话对象与RolePermissionController中使用的是相同的吗?我会使用.GetHashCode()来确定它是同一个对象。 – 2011-05-20 15:21:05

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

也许不是你要找的答案,但我做了类似的这种方式,它工作得很好。