y 5 minutos despues esta el fix.....ya no necesitas bajar el entity framework!
Mario Dal Lago --- El lun 15-mar-10, Carlos Peix <[email protected]> escribió: De: Carlos Peix <[email protected]> Asunto: Re: [NHibernate-Hispano] Duda sobre mapping Para: "nhibernate-hispano" <[email protected]> Fecha: lunes, 15 de marzo de 2010, 13:51 Ya pasaron 4 horas desde que se sospecho del bug y 25 minutos desde que se confirmo y todavia estamos esperando. Ya me canse de hacer Update del trunk... De donde se baja Entity Framework? :-) ---------------------------------- Carlos Peix 2010/3/15 Fabio Maulo <[email protected]> Bug confirmado El 15 de marzo de 2010 08:50, Fabio Maulo <[email protected]> escribió: Por ahora...ya que parece que es la primera vez que usas list, podes usar bag declarando explicitamenteorm.Bag<Baleria>(x=> x.Imagenes);o usando ICollection como type the Imagenes (en el field por ejemplo) El 15 de marzo de 2010 08:47, Fabio Maulo <[email protected]> escribió: Mario,parece que hay un bug en NHibernate.list-index debería ser el tag actualizado de lo que ante era <index>. <index> se usaba para todas las collection indexada (array, map, list, primitive-array) luego se hicieron tag especificos pero se mantuvo el viejo tag. Veré de preparar un test y de hacer el fix en el trunk de NH.Despues veo si cambio tambien el tag en ConfORM para que si se utilizan los XML para trabajar con NH2.1.x pueda funcionar.Gracias por el dato. El 15 de marzo de 2010 00:46, Fabio Maulo <[email protected]> escribió: la respuesta a la pregunta 1 es: debería usar la pos en la list solola respuesta a la pregunta 2 es: el high es per persister per session-factory El 14 de marzo de 2010 21:25, Mario Dal Lago <[email protected]> escribió: gracias fabio, agregue el cascade, que me faltaba y cambie el Ilist por un iEnumerable, y puse un Ilist privado. el mapping se corrigio, pero ahora tengo otro problemas. el schema que se genera es create table Galeria ( GaleriaId INT not null, primary key (GaleriaId) ) create table Imagen ( ImagenId INT not null, [Path] NVARCHAR(255) null, Description NVARCHAR(255) null, galeria_key INT null, idx INT not null, primary key (ImagenId) ) y cuando grablo la galeria con el mismo codigo anterior se ejecutan estas instrucciones NHibernate: select next_hi from hibernate_unique_key with (updlock, rowlock) NHibernate: update hibernate_unique_key set next_hi ...@p0 where next_hi = @p1;@p0 = 2 [Type: Int32 (0)],�...@p1 = 1 [type: Int32 (0)] NHibernate: select next_hi from hibernate_unique_key with (updlock, rowlock) NHibernate: update hibernate_unique_key set next_hi ...@p0 where next_hi = @p1;@p0 = 3 [Type: Int32 (0)],�...@p1 = 2 [type: Int32 (0)] NHibernate: INSERT INTO Galeria (GaleriaId) VALUES (@p0);@p0 = 32768 [Type: Int32 (0)] NHibernate: INSERT INTO Imagen ([Path], Description, ImagenId) VA LUES (@p0,�...@p1,�...@p2);@p0 = 'image01.jpg' [Type: String (4000)],�...@p1 = 'Bota1' [Type: String (4000)],�...@p2 = 65536 [type: Int32 (0)] y me da un System.Data.SqlClient.SqlException: Cannot insert the value NULL into column 'idx', table 'CONFORMTRY.dbo.Imagen'; column does not allow nulls. INSERT fails. The statement has been terminated. no se supone que el valor de idx lo tiene que tomar solo del list? o me esta faltando setear algo a mano ? y otra consulta, pq ejecuta 2 veces el select next_hi si estoy en la misma session ? gracias Mario Dal Lago --- El dom 14-mar-10, Fabio Maulo <[email protected]> escribió: De: Fabio Maulo <[email protected]> Asunto: Re: [NHibernate-Hispano] Duda sobre mapping Para: [email protected] Fecha: domingo, 14 de marzo de 2010, 16:42 Bueno varias cosas... Primero tu domain: - La propiedad Imagenes es de tipo IList<Imagen> con lo cual el metodo AddImagen se puede no usar causando un pequeño desastre. Es probable que no hayas escrito tus tests para el dominio. Cuando se quiere proteger el Add lo que se publica es un IEnumerable<T> Segundo el mapping: Como lo unico que estas guardando es Galeria y te parece raro el error que tira NHibernate deduzco que lo que quieres que Galeria trabaje como Aggregate (la tercera pregunta en de ConfORM es: ow manage cascade-actions (read it as: which are aggregate-root) Con: orm.Cascade<Galeria, Imagen>(Cascade.All); Tu mapping será <class name="Galeria"> <id name="Id" column="GaleriaId" type="Int32"> <generator class="hilo" /> </id> <list name="Imagenes" cascade="all"> <key column="galeria_key" /> <list-index /> <one-to-many class="Imagen" /> </list> </class> <class name="Imagen"> <id name="Id" column="ImagenId" type="Int32"> <generator class="hilo" /> </id> <property name="Path" /> <property name="Description" /> </class> Notar que ese resultado es porque se trata de una OneToMany unidirectional... hay otros puntos pero esos conciernen al uso de OneToMany unidirectional en NH. 2010/3/14 Mario Dal Lago <[email protected]> hola, tengo el siguiente dominio publicclass EntityBase { public virtual int Id { get; set; } } public class Imagen : EntityBase { public virtual string Path { get; private set; } public virtual string Description { get; private set; } internal Imagen() { } public Imagen(string description, string path) { this.Description = description; this.Path = path; } } public class Galeria : EntityBase { public virtual IList<Imagen> Imagenes { get; private set; } public Galeria() { Imagenes = new List<Imagen>(); } public void AddImagen(Imagen img) { Imagenes.Add(img); } } estoy usando ConfOrm para hacer el mapping de esta forma: var orm = new ObjectRelationalMapper(); orm.TablePerClass<Galeria>(); orm.TablePerClass<Imagen>(); orm.Patterns.PoidStrategies.Add(new HighLowPoidPattern()); mapper.AddPoidPattern(mi => mi.Name == "Id", (mi, idm) => idm.Column(mi.ReflectedType.Name + "Id")); me genera el siguiente XML <?xml version="1.0" encoding="utf-8"?> <hibernate-mapping xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" namespace="MDL.BahiaBsAs.Domain" assembly="MDL.BahiaBsAs.Domain" xmlns="urn:nhibernate-mapping-2.2"> <class name="Galeria"> <id name="Id" column="GaleriaId" type="Int32"> <generator class="hilo" /> </id> <list name="Imagenes"> <key column="galeria_key" /> <list-index /> <one-to-many class="Imagen" /> </list> </class> &nbs p;<class name="Imagen"> <id name="Id" column="ImagenId" type="Int32"> <generator class="hilo" /> </id> <property name="Path" /> <property name="Description" /> </class> </hibernate-mapping> al quierer insertar registros con este codigo me da una excepcion using(ISession s = factory.OpenSession()) { using (ITransaction tx = s.BeginTransaction()) { var galeria = new Galeria(); var imagen = new Imagen("Bota1","image01.jpg"); galeria.AddImagen(imagen); s.Save(galeria); tx.Commit(); } } me da una TransientObjectException con el siguiente mensaje : object references an unsaved transient instance - save the transient instance before flushing. Type: Domain.Imagen, Entity: Domain.Imagen hacer un s.Save(imagen), no soluciona el problema. es la primera vez que mapeo un List y no se si lo estoy unsando en forma correcta. gracias Mario Dal Lago Encontra las mejores recetas con Yahoo! Cocina. http://ar.mujer.yahoo.com/cocina/ -- Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups.google.com/group/NHibernate-Hispano -- Fabio Maulo -- Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups.google.com/group/NHibernate-Hispano Encontra las mejores recetas con Yahoo! Cocina. http://ar.mujer.yahoo.com/cocina/ -- Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups.google.com/group/NHibernate-Hispano -- Fabio Maulo -- Fabio Maulo -- Fabio Maulo -- Fabio Maulo -- 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 Yahoo! Cocina Encontra las mejores recetas con Yahoo! Cocina. http://ar.mujer.yahoo.com/cocina/ -- Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups.google.com/group/NHibernate-Hispano
