En mi caso , estoy creando un nuevo maestro con sus nuevas lineas , tenia entendido que lo que me comentas , ocurre al actualizar y/o eliminar un objeto , es decir antes de actualizar/eliminar tenia que obtener el objeto y actualizar/eliminar. Para el manejo de la sesion , estoy usando session per request. Para guardar hago o sgte:
Medication medication = new Medication(); medication.Id = Guid.New(); medication.Sessions.Add(new Session(),new Session(),new Session()); repository.Save(medication); El 29 de mayo de 2011 15:42, Nestor Rodriguez <[email protected]>escribió: > Este problema no es de mapeo. Nhibernate esta informando que en una sesion > tienes dos instancias de un mismo tipo con el mismo Id. En la exception > dice cual es el tipo de la instancia. Lo que debes hacer es identificar en > tu flujo donde estas cometiendo este error. > > Esto suele ocurrir si por ejemplo tenemos la clase empleado y con la sesion > A consultamos todos los empleados y con la sesion B nos traemos el > empleado(1) y luego modificamos el empleado(1) y lo guardamos PERO con la > sesion A. Si te das cuenta la sesion A ya tenia en cache al empleado(1) y > ahora le dices que te guarde otra instancia del mismo empleado traido con la > otra sesion y en el momento del Flush() sale el error. Espero te haya > quedado claro. > > Saludos, > Nestor Rodriguez > > > 2011/5/29 Jose Fabricio Rojas <[email protected]> > >> Buenas, >> Tengo un problema >> tengo un maestro y un detalle , trato de guardar en el maestro y sus >> detalles(Lineas) y me aparece en siguiente mensaje: >> Exception: a different object with the same identifier value was >> already associated with the session. >> Para esto estoy usando Conform. y NH 3, anteriormente habia hecho algo >> similar con mapping en xml, quizas este faltando algo en el mapping by >> code de conform. >> Aqui las entidades y el mapping >> Maestro-> >> mapper.Class<Medication>(cm => >> { >> cm.Id(o => o.Id, im => >> im.Generator(Generators.Assigned)); >> cm.ManyToOne( >> x => x.Patient, >> m => >> { >> m.Column("IdPatient"); >> m.Fetch(FetchMode.Join); >> m.NotNullable(true); >> }); >> cm.ManyToOne( >> x => x.Service, >> m => >> { >> m.Column("IdService"); >> m.Fetch(FetchMode.Join); >> m.NotNullable(true); >> }); >> cm.Bag( >> o => o.Sessions, >> x => >> { >> x.Key(k => k.Column("Id")); >> x.Cascade(Cascade.All); >> x.Table("Session"); >> }, >> x => >> { >> x.ManyToMany(k => k.Column("Id")); >> x.ManyToMany(g => >> g.Class(typeof(Session))); >> }); >> }); >> Detalle-> >> mapper.Class<Session>(cm => >> { >> cm.Id(o => o.Id, im => >> im.Generator(Generators.Assigned)); >> cm.ManyToOne( >> x => x.Medication, >> m => >> { >> m.Column("IdMedication"); >> m.Fetch(FetchMode.Join); >> m.Cascade(Cascade.Persist | Cascade.Remove); >> }); >> }); >> Espero me puedan dar luces. >> Gracias >> >> -- >> Para escribir al Grupo, hágalo a esta dirección: >> [email protected] >> Para más, visite: http://groups.google.com/group/NHibernate-Hispano > > > -- > Para escribir al Grupo, hágalo a esta dirección: > [email protected] > Para más, visite: http://groups.google.com/group/NHibernate-Hispano > -- Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups.google.com/group/NHibernate-Hispano
