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
