我有三个参与者:用户,角色和权限。 有两个控制器: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对象实体。
答案 0 :(得分:4)
这不能直接回答您的问题,但它仍然可能是一个解决方案 - 如何通过ViewModel收集所有信息,以便最终得到一个控制器操作,从ViewModel获取信息,创建角色和用户同时(即在同一请求期间),不需要杂乱的会话内容。
也许不是你想要的答案,但我已经做了类似的事情,而且它运作得很好。