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

Responder a