<map /> es realmente interesante. Tanto el key como el value pueden ser element (string, int ,...), component, o un entity. Hay mas información aca: http://ayende.com/Blog/archive/2009/06/03/nhibernate-mapping-ndash-ltmapgt.aspx
Una opción podría ser así, gráficamente http://screencast.com/t/WVGzHvNyh3dn Las clases: public class TipoExpediente : EntityBase { ... public virtual string Nombre{get;set;} public virtual ICollection<string> AttributosPosibles {get {return _attributosPosibles; } } } public class Expediente : EntityBase { public virtual DateTime Fecha{get;set;} public virtual TipoExpediente{get;set;} public virtual IDictionary<string, string> Attributos{get....} } Los mappings: <class name="TipoExpediente"> <id name="ID"> <generator class="hilo"> </generator> </id> <property name="Nombre"/> <set name="AttributosPosibles" access="field.camelcase-underscore"> <key> <column name="TipoExpedienteID"/> </key> <element type="System.String" /> </set> </class> <class name="Expediente"> <id name="ID"> <generator class="hilo"> </generator> </id> <property name="Fecha"/> <many-to-one name="TipoExpediente" /> <map name="Attributos" table="Expediente_Attributos"> <key> <column name="ExpedienteID"/> </key> <map-key type="System.String" /> <element type="System.String" /> </map> </class> De ahí en adelante la podes complicar muchisimo más usando componentes o clases en los key y en los value. También he visto que a veces se predefinen cosas como rangos, o valores posibles. Solamente una cosa tenes que tener presente, al llegar.............. a la base de datos un número es un número, un texto es un texto y un datetime es un datetime. Guardar números o fechas en un campo de texto es algo que pensaría 100 veces. El 23 de noviembre de 2010 20:50, Nestor Rodriguez <[email protected]>escribió: > Si podria ser un <map>, pero la pregunta mas alla de como lo mapeas a > tablas es como lo modelaste en tu negocio ?. Ademas, que tipos de datos vas > a almacenar? son todos string? o numeros tambien ? > > > 2010/11/23 Fabio Maulo <[email protected]> > >> o talz una mas simple y comunacha <map> >> >> 2010/11/23 Fabio Maulo <[email protected]> >> >> dynamic-componets or dynamic-entities or schema-less-component >>> >>> 2010/11/23 tolemaC <[email protected]> >>> >>>> Nestor el usuario se define sus propios campos para cada tipo de >>>> >>>> expediente, tengo una tabla TipoExpediente con su Id, su Nombre y >>>> Descripción, el usuario puede crear nuevos tipos. Luego tengo la tabla >>>> de Expedientes donde hay un campo IdTipo, al crear el expediente el >>>> usuario selecciona un tipo. Entonces a la hora de editar dicho >>>> expediente hay unos datos adicionales que se asocian al tipo en >>>> concreto que el usuario a creado. >>>> >>>> Para hacer "table per hierarchy" debería prever todos los tipos que el >>>> usuario se puede crear, eso es inviable. >>>> >>>> Lo único que se me ocurre es montarme un EAV (Entidad Atributo Valor) >>>> por un lado crearme una tabla con la descripción de los datos >>>> asociados al tipo con: IdTipo, NombreCampo >>>> Y por otro lado una tabla para almacenar los valores con: Id >>>> Expediente, Nombre Campo, Valor >>>> >>>> Miraré otra vez el dynamic-component, pero por lo que he visto >>>> necesitas conocer cuales serán los campos. >>>> >>>> >>>> On 23 nov, 20:16, Nestor Rodriguez <[email protected]> wrote: >>>> > Aunque no entiendo del todo tu problema sobre todo cuando dices: >>>> > *"No me vale el tener que crear una entidad Expediente para cada >>>> "Tipo >>>> > de Expediente"*" >>>> > Te recomiendo que verifiques si un dynamic-component se aplica a tu >>>> caso >>>> > donde las propiedades dinamicas son guardadas en un diccionario y en >>>> la BD >>>> > son columnas de la tabla. Sin embargo creo que si tienes diferentes >>>> tipos >>>> > de expedientes deberias tenerlos como clases que extienden de una >>>> abstracta >>>> > o interfaz TipoExpediente y mapearlo en una herencia "table per >>>> hierarchy". >>>> > >>>> > Saludos, >>>> > Nestor Rodriguez >>>> > >>>> > 2010/11/23 tolemaC <[email protected]> >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > > Hola de nuevo. >>>> > >>>> > > Tengo algo en mente que no tengo muy claro como plantearlo para >>>> > > trabajar con NHibernate y me gustaría me diesen su opinión. >>>> > >>>> > > Tengo un caso donde me haría falta que ciertas entidades tuvieran >>>> > > campos dinámicos. >>>> > >>>> > > Por ejemplo en mi aplicación hay una entidad para los Expedientes, >>>> > > dichos expedientes tienen una propiedad que es el "Tipo de >>>> Expediente" >>>> > > y los usuarios son libres de crear los tipos de expedientes que >>>> > > quieran. Aquí es donde surge una particularidad, resulta que cada >>>> tipo >>>> > > de expediente que los usuarios se crean pueden tener unos datos >>>> > > adicionales, por ejemplo un expediente de tipo "Obra o servicio" >>>> tiene >>>> > > campos adicionales como es el "Contratista" que realiza la obra o >>>> > > servicio, un expediente de tipo "Sanción a empleado" tiene un dato >>>> > > asociado que es el Empleado sancionado, ... y así sucesivamente. >>>> > >>>> > > No me vale el tener que crear una entidad Expediente para cada "Tipo >>>> > > de Expediente", pues el usuario debe poder crearse nuevos tipos de >>>> > > expediente cuando quiera sin mi intervención y ademas al tipo de >>>> > > expediente le debe poder relacionar esos datos/campos/propiedades >>>> > > extra. >>>> > >>>> > > Se os ocurre como plantear este tema usando NHibernate? >>>> > >>>> > > -- >>>> > > Para escribir al Grupo, hágalo a esta dirección: >>>> > > [email protected] >>>> > > Para más, visite:http://groups.google.com/group/NHibernate-Hispano >>>> >>>> -- >>>> 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 >> >> -- >> Para escribir al Grupo, hágalo a esta dirección: >> [email protected] >> Para más, visite: http://groups.google.com/group/NHibernate-Hispano >> > > -- > Para escribir al Grupo, hágalo a esta dirección: > [email protected] > Para más, visite: http://groups.google.com/group/NHibernate-Hispano > -- Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups.google.com/group/NHibernate-Hispano
