No se si será el caso, pero cuando mezclas objetos de distintas sessions es necesario sobreescribirlo. http://nhforge.org/doc/nh/en/index.html#persistent-classes-equalshashcode yo trato de evitar, siempre que sea posible, pasar objetos de una session de nh a otra.
Con cargar solo los id de user, si, me refiero a que al segundo request solo le lleguen los Id de users a eliminar (entiendo que ahora le llega una lista de objetos almacenada en la session de asp.net). Como práctica recomendada, si usás session per request no guardes objetos persistentes en la session de asp.net porque tarde o temprano vas a terminar teniendo uno y otro problema que solucionar. Si fuese "inevitable" dale una mirada a CpBT en web. nelo 2011/3/14 jazavala <ja.zavala.agui...@gmail.com>: > no tengo sobreescrito el equal y el gethashcode de user ni de role, la > vdd te soy sincero es algo que nunca he realizado, pecando de muy > novato po que debo sobrescribirlos?? > > con cargar solo los ids de users, te refieres a cuando pase los > usuarios a eliminar del rol solo pase los id's vdd?? > > > > On 13 mar, 23:48, "nelopause...@gmail.com" <nelopause...@gmail.com> > wrote: >> 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 -- 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