hmn,...

Si necesito asociar documentos a una tarea y que sean accesibles desde
ambos sitios de la relación, tendré que tener una relación many-to-
many en documentos y en tareas con DocumentosAsociados en Tarea y
TareasAsociadas en Documentos. Tendré que modificar las clases
afectadas en mi dominio, en mi mapping y crear la tabla de la
relación. Antes era más fácil por que lo definía en la base de datos y
mi código lo interpretaba. Todo tiene sus ventajas e inconvenientes.

En fin, son muchos años pensando en Tablas y me cuesta adaptarme.

Al final, ni many-to-any ni nada se queda en simple many-to-many por
relación entre cada entidad y ya está.

Gracias por estar ahí.


On 14 dic, 17:20, Fabio Maulo <[email protected]> wrote:
> No, no tengo esas collecciones.
> A ver....
> Tenes Pais, Estado/Provincia, Ciudad, Persona : tendrias una collection de
> Persona en la clase Ciudad ?
>
> Tampoco me gusta tener:
> Usuario
> {
> public IEnumerable<Relaccion> CualquierCosaTePasePorLaCabeza {get;}
>
> }
>
> pero bueno... el tema es amplio.
>
> 2010/12/14 tolemaC <[email protected]>
>
>
>
> > 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
>
> ...
>
> 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