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
