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

Responder a