Fabio, si tienes tiempo he abierto un nuevo post llamado "Vida
profesional complicada": 
https://groups.google.com/group/nhibernate-hispano/t/d529102fafca5c1e?hl=es

Es un poco largo pero no puedo resumirlo más.

Saludos,


On 14 dic, 14:08, tolemaC <[email protected]> wrote:
> No me refería a union-subclass. Cuando dije que quería usar table-per-
> concrete-class me refería a usar una tabla por cada clase final, es
> decir mapear las clases finales documento, persona, tarea y ejecutor.
> Nunca pensé en mapear Entidad ni Elemento, por que como tu dices para
> mi no son entidades de mi dominio.
>
> Si tienes user relacionado con Imagenes, videos y comentarios, en el
> mapping de user tendrás en la clase User una colección por cada de las
> entidades relacionadas, algo así:
>
> public class User {
>   ...
>   public virtual ICollection Images;
>   public virtual ICollection Videos;
>   public virtual ICollection Coments;
>
> }
>
> Eso implica que si quieres relacionar User con una nueva entidad,
> tienes que tocar la clase user, el mapping user, probar, recompilar,
> publicar y notificar el cambio a los usuarios :)
>
> Yo quiero ahorrarme eso, por que, aunque pienses que me complico la
> vida profesional, tenerlo todo junto me ahorra trabajo.
> Ahora viene la pregunta: ¿Tanto cambian tus entidades?, la respuesta
> es "Si".
>
> Además, yo no quiero ninguna bolsa de gatos, yo simplemente quiero
> poder acceder a elementos relacionados con una sola propiedad a la que
> he llamado "ElementosRelacionados", la culpa la tiene la Base de datos
> que me hace inventarme cosas raras para poder mapear mi dominio.
>
> Una aclaración más: Nunca voy a meter a un cliente en los elementos
> relacionados de una Factura.
> Factura tendrá su cliente, pero necesito que si el usuario de mi
> aplicación quiere asociar una Banana a una Factura lo pueda hacer,
> como si quiere asociar un Mono a una Rama de un Banano y por último
> asociar este Banano a la Banana de la Factura y así tenerlo todo
> junto :)
> Lo que no puedo hacer es que si asocio una Banana a un Mono es que al
> consultar el Mono no tenga la Banana como elemento relacionado. La
> relación es bidireccional. La banana aparecerá como asociado del mono
> y el mono como asociado de la Banana.
>
> Borremoslo todo, el hecho de hablar de una sola bolsa que lo incluya
> todo ha sido por que no quería plantear la duda sin aportar alguna
> idea inicial, por lo menos dejar ver que lo he estado pensando un
> poco :)
>
> Saludos Fabio y gracias por tu tiempo,
>
> On 14 dic, 13:21, Fabio Maulo <[email protected]> wrote:
>
>
>
> > te pregunto: quien te dijo que a NH le interesa el mapping de esas dos
> > clases de base ?
> > podes mapear directamente Persona, Tarea etc. sin especificar, en el
> > mapping, que heredan de algo mas (o sea sin usar table-per-concrete-class
> > aka union-subclass).
> > table-per-concrete-class tiene a que ver con algo de lo que mencionaste pero
> > se refiere a representacción de persistencia de herencia de entidades (tus
> > clases Entidad y Elemento no son 
> > entidades).http://altnet-hispano.pbworks.com/w/page/12367724/van-2009-09-19-intr...
>
> > Si en ElementosRelacionados, metes cualquier entidad... bueno... bancate el
> > many-to-any...
> > Yo tengo User que está relacionado con varias entidades como Imagenes,
> > Videos, Comentarios, Clasificados, Pagos etc. etc. y en mi domain-model no
> > tengo la bolsa de gatos (tampoco está en el persistent-model).
>
> > 2010/12/14 tolemaC <[email protected]>
>
> > > Fabio, entiendo que no lo entiendas, en serio, pero "mi vida
> > > profesional ES complicada" no la complico yo, "ya viene así".
>
> > > Estoy intentando exponer el porque "mi vida profesional es
> > > complicada", seguro que cuando leas lo que estoy escribiendo me
> > > entenderás.
> > > En cuanto lo escriba lo posteo y paso el link.
>
> > > No quiero una sola bolsa de gatos, de hecho la idea de la tabla
> > > "Relaciones" es solo una idea, ya que, gracias a ti entre otros, ahora
> > > no pienso en tablas, pienso en objetos.
>
> > > ElementosRelacionados sirve para poder acceder desde cualquier
> > > elemento a elementos que por razones del negocio están relacionados
> > > con él mismo.
> > > Si te resulta más facil de comprender imaginemos que
> > > ElementosRelacionados no está en Elemento, que está en algunas clases
> > > finales, Documento, Tarea, Persona, ... y las entidades que puedan
> > > aparecer.
> > > Pero la cosa es que cuando relaciono un documento con una tarea, la
> > > relación debe de existir tanto para la tarea como para el documento.
>
> > > Olvidate del optimistic-lock.
>
> > > Lo de usar table-per-concrete-class es por que Entidad y Elemento no
> > > tienen mapping son clases abstractas para la persistencia, si quieres
> > > podrían ser interfaces.
>
> > > Quizás para que se entendiese mejor debería cambiar:
>
> > > public class Entidad  { ... }
> > > public class Elemento : Entidad  { ... }
>
> > > por:
>
> > > public abstract class Entidad  { ... }
> > > public abstract class Elemento : Entidad  { ... }
>
> > > Hasta donde yo llego, table-per-concrete-class consiste en mapear tan
> > > solo las clases concretas. Clases concretas que persisten sus
> > > propiedades heredadas en tablas separadas.
>
> > > On 14 dic, 12:44, Fabio Maulo <[email protected]> wrote:
> > > > Cual es la ventaja de meter todo en una misma bolsa de gatos ? (me
> > > refiero a
> > > > todas las relaciones en una misma tabla).
>
> > > > No se a que sirve  ElementosRelacionados, así como está y menos ya que
> > > > es IList<Elemento>,
> > > > tampoco entiendo que todas las entidades necesiten un control de
> > > > optimistic-lock... repito... Para mi te estas complicando mucho la vida
> > > > professional...
>
> > > > a parte eso, viendo el eschema de clases, no veo ninguna razón por la
> > > cual
> > > > usar table-per-concrete-class; para NH no deberían existir ni el mapping
> > > de
> > > > Elemento y menos el napping de Entidad.
>
> > > > 2010/12/14 tolemaC <[email protected]>
>
> > > > > Me gustaría explicar el trasfondo de por que me surgen estas cosas y
> > > > > otras muchas que voy solucionando poco a poco, si no lo he hecho ya es
> > > > > por no dar la tabarra y por que llevo muy poco tiempo usando un ORM y
> > > > > me falta mucho por aprender. Muchas de las cosas que me han surgido
> > > > > las he solucionado tan solo replanteándolas desde la raíz, pensando en
> > > > > objetos y no en tablas, pero bueno, voy poco a poco.
>
> > > > > A ver si aclaro mis ideas y saco un poco de tiempo y os cuento.
>
> > > > > Volviendo al tema: many-to-any es más o menos lo que buscaba, he
> > > > > encontrado este ejemplo:
>
> > > > >    <set name="animals" table="robot_animals">
> > > > >      <key column="robot_id"/>
> > > > >      <many-to-any id-type="long">
> > > > >        <column name="animal_class" not-null="true"/>
> > > > >        <column name="animal_id" not-null="true"/>
> > > > >      </many-to-any>
> > > > >    </set>
>
> > > > > Lo que no se es como NHibernate sabe de que columna coger la clase y
> > > > > de cual el id, supongo que será por el orden de las columnas en el
> > > > > XML.
> > > > > De lo poco que he encontrado en la referencia de NHibernate es:
>
> > > > > "The <many-to-any> and <index-many-to-any> elements provide for true
> > > > > heterogeneous associations. These mapping elements work in the same
> > > > > way as the <any> element - and should also be used rarely, if ever."
>
> > > > > Supongo que al ser un caso extraño no se ha documentado mucho.
>
> > > > > Continuando; con many-to-any podría solucionar el problema creando una
> > > > > tabla de relaciones por cada elemento, de forma que por las clases
> > > > > Tarea, Documento, Persona, ... debería crear las tablas
> > > > > TareaRelaciones, DocumentoRelaciones, PersonaRelaciones, ... pero aquí
> > > > > surge una pega. Si a la "Tarea 4" le asocio el "Documento 3", guardará
> > > > > la relación en la tabla TareaRelaciones. Cuando carge la tarea 4
> > > > > tendré el documento 3 como elemento relacionado, el problema es que
> > > > > cuando cargue el "documento 3" irá a cargar las relaciones en la tabla
> > > > > DocumentoRelaciones y no encontrará la relación con la "tarea 4".
>
> > > > > Es por esto que mi idea inicial era tener todas las relaciones en una
> > > > > misma tabla.
> > > > > Tendría que buscar la forma de decirle al many-to-any como montar el
> > > > > where para buscar las relaciones y como extraer la entidad
> > > > > relacionada.
>
> > > > > Algo así:
>
> > > > >    <set name="ElementosRelacionados" table="Relaciones">
> > > > >      <many-to-any-TwoWay-EXTREME>
> > > > >        <class-key-columns column1="ClaseElemento1"
> > > > > column2="ClaseElemento2"/>
> > > > >        <id-key-columns column1="IdElemento1" column2="IdElemento2"/>
> > > > >      </many-to-any-TwoWay-EXTREME>
> > > > >    </set>
>
> > > > > Quizás suene a risa :?, pero con algo así se podrían relacionar todo
> > > > > tipo de entidades dentro de un dominio.
> > > > > Quizás me esté complicando la vida profesional :?, pero esto me ahorra
> > > > > editar muchos mappings y da una versatilidad extraordinaria en un
> > > > > dominio cualquiera.
>
> > > > > Saludos,
>
> > > > > On 14 dic, 11:18, Fabio Maulo <[email protected]> wrote:
> > > > > > Para mi te estas complicando mucho la vida professional... de todas
> > > > > formas
> > > > > > estas buscando: many-to-any
>
> > > > > > 2010/12/13 tolemaC <[email protected]>
>
> > > > > > > Hola gente,
>
> > > > > > > Me ha surgido algún que otro problema a la hora de mapear las
> > > > > > > entidades de un dominio, no se por donde cogerlo y necesito ideas.
>
> > > > > > > En mi dominio manejo dos tipos de entidades, las que llamo
> > > Entidades
> > > > > > > por que tienen un Id y una versión y otras entidades de más peso
> > > que
> > > > > > > heredan de entidad pero también tienen nombre, descripción y un
> > > flag
> > > > > > > de activación/desactivación. A estas últimas las he llamado
> > > > > > > "Elementos", en código son esto:
>
> > > > > > >    public class Entidad
> > > > > > >    {
> > > > > > >        public virtual int Id { get; set; }
> > > > > > >        public virtual int Version { get; set; }
>
> ...
>
> leer más »

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