Si usás session per request no es recomendable guardar instancias de objetos persistentes en la session de asp.net.
En este caso en particular, lo que se me ocurre es: - para que te funcione el código que tenés creo que deberías hacer que el ciclo de vida de tu session contenga al ciclo de vida de los objetos que con ella manejas (ya sea leer o guardar), es decir no usar session per request sino CpBT. NO te recomiendo esta opción. - Usar DTOs como te recomienda José, yo soy partidario de los DTOs en los casos en que difieren del Domain. - o bien podrías intentar algo como: foreach(var user in Users) { var u = currentRole.Users.Single(x => x.Id = user.Id); currentRole.Users.Remove(u); } y para mejorarlo un poco, yo guardaría solo la lista de Ids en Users. consulta: ¿tenés sobreescrito el Equal y el GetHashCode de User? de todas formas te recomiendo que veas la VAN que te dice José (http://altnethispano.org/wiki/van-2010-12-04-nhibernate-session.ashx) ya que en esta hablamos bastante de los porque de todo lo que te está pasando y si no haces algunos ajustes vas a empezar a tener otros problemas (como el LazyLoadingException que mencionas). saludos. nelo. 2011/3/12 jazavala <ja.zavala.agui...@gmail.com>: > Deberia de usar DTO's para la vista? transformar mis entidades de > negocio a dtos para exponerlos en la interfaz de usuario. > > Entonces por ejemplo si voy a mostrar los datos generales del rol y > usuarios con los que cuenta el rol podria > > crear un dto en el cual sette esto? cada que lo necesite, y mis > objetos y sus relaciones usarlas lazy? > > y por ejemplo si realizo una modificación sobre el currentrole al > terminar el request, mi currentrole no seria ya valido sino yo > necesitaria recrear mi dto segun vaya teniendo modificaciones mi > objeto de negocio > > ?? > > > On 12 mar, 12:38, José F. Romaniello <jfromanie...@gmail.com> wrote: >> Hola, vamos a aclarar dos cosas; >> >> 1- las entidades no siempre funcionan bien como viewmodels. >> 2- las entidades que se cargan en un session (request en tu caso) >> deberían morir en el session. Nhibernate tiene muchas cosas para >> facilitarte trabajar en los otros casos (session.update/session.merge) >> pero no te recomiendo usarlo por todos lados. >> >> Te recomiendo mirar el primer video de manejo de session de nhibernate >> de Nelo, ya que hablamos mucho de las cosas que te estan surgiendo >> como dudas. >> >> El 12/03/11, jazavala <ja.zavala.agui...@gmail.com> escribió: >> >> >> >> >> >> >> >> >> >> > Que tal nuevamente despejando dudas, tengo la siguiente cuestion estoy >> > usando session per request que anexo en la parte baja >> >> > esto se supone que en cada request me abre una session, la duda que >> > tengo es si tengo un formulario donde edito un Role >> >> > lo hacia de la siguiente forma >> >> > public ControllerRole Controller{get;set;} //Esto lo inyecto en el >> > form con spring.net >> >> > If((!IsPostback)&&(!IsCallback)) >> > //Cargo un CurrentRole con el controller inyectado >> >> > despues tengo un metodo dentro del webform >> >> > donde le quito usuarios al rol, tengo un gridview donde selecciono que >> > usuarios quitar mando a un controller el currentrole y los ids de los >> > usuarios, en el controller saco los users apartir de los ids, y >> > realizo un >> >> > foreach(var user in Users) >> > { >> > currentRole.Users.Remove(user) >> > } >> >> > pero me pasa que los usuarios del currentRole no son iguales al user >> > en el ciclo del foreach, cambie en el controller recibir el roleid y >> > rescatarlo por getbyId y mandarlo al foreach y de esta forma si son >> > iguales, que me esta pasando es la session es acaso que al dar clic en >> > la accion para remover como no vuelvo a cargar el currentrole ya no >> > son igual los users, lo que me percate es que los users del >> > currentrole en el caso cuando no los borra tiene los roles del user >> > (ya que es relacion many to many) traen un lazy error, y el user del >> > foreach si trae los roles. >> >> > ademas creo que esta cargando los lazy cuando quizas no lo deberia >> > hacer, es decir role.users.roles.users.roles etc... >> >> > como podrias solucionar esto hay que poner en algun valor por default >> > conform como me da los lazy del many to many >> >> > gracias de antemano >> >> > using System; >> > using System.Web; >> > using NHibernate.Context; >> >> > namespace QS.NHibernate.Infrastructure >> > { >> >> > public class NHibernateSessionPerRequest : IHttpModule >> > { >> > /// <summary> >> > /// You will need to configure this module in the >> > web.config file of your >> > /// web and register it with IIS before being able to use >> > it. For more information >> > /// see the following link: >> >http://go.microsoft.com/?linkid=8101007 >> > /// </summary> >> >> > public void Dispose() >> > { >> > //clean-up code here. >> > } >> >> > public void Init(HttpApplication context) >> > { >> > // Below is an example of how you can handle >> > LogRequest event and provide >> > // custom logging implementation for it >> > context.BeginRequest += Start; >> > context.EndRequest += End; >> > } >> >> > private void Start(object sender, EventArgs e) >> > { >> > var sessionFactory = >> > NHibSessionManager.GetSessionFactory(); >> > var session = sessionFactory.OpenSession(); >> > session.BeginTransaction(); >> >> > CurrentSessionContext.Bind(session); >> > } >> >> > private void End(object sender, EventArgs e) >> > { >> > var sessionFactory = >> > NHibSessionManager.GetSessionFactory(); >> > var session = sessionFactory.GetCurrentSession(); >> >> > if ((session.Transaction! >> > =null)&&(session.Transaction.IsActive)) >> > { >> > session.Transaction.Commit(); >> > } >> >> > session.Close(); >> > CurrentSessionContext.Unbind(sessionFactory); >> > } >> >> > } >> >> > } >> >> > -- >> > Para escribir al Grupo, hágalo a esta dirección: >> > NHibernate-Hispano@googlegroups.com >> > Para más, visite:http://groups.google.com/group/NHibernate-Hispano >> >> -- >> Enviado desde mi dispositivo móvil > > -- > Para escribir al Grupo, hágalo a esta dirección: > NHibernate-Hispano@googlegroups.com > Para más, visite: http://groups.google.com/group/NHibernate-Hispano -- Para escribir al Grupo, hágalo a esta dirección: NHibernate-Hispano@googlegroups.com Para más, visite: http://groups.google.com/group/NHibernate-Hispano