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 -- Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups.google.com/group/NHibernate-Hispano
