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

Responder a