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 explicitamente >> orm.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 solo >>>> la 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]<http://ar.mc513.mail.yahoo.com/mc/[email protected]> >>>>> > >>>>> >>>>>> >>>>>> hola, >>>>>> >>>>>> tengo el siguiente dominio >>>>>> >>>>>> public >>>>>> class 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<http://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]<http://ar.mc513.mail.yahoo.com/mc/[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
