En el medio hubo un cambio de pañales, un cambio de ropa y tuve que atender tambien los albañiles... Viste como es eso.... en EntityFramework esos problemas no lo tienen ;)
El 15 de marzo de 2010 12:51, Carlos Peix <[email protected]> escribió: > 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 > -- 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
