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]>

>
>  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 + "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]
> 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

Responder a