De acuerdo con todas las recomendaciones de Carlos, si son aplicables usar
guid.comb como estrategia de generacion de id's porque soluciona el
problema de segregación de id's que tiene la estrategia de guids.

Gustavo.

2015-04-13 13:04 GMT+03:00 Carlos Peix <[email protected]>:

> Hola Camilo,
>
> El problema podría ser que tenes la columna codusu mapeada dos veces, pero
> me surgen una serie de recomendaciones, si tenes opción de cambiar el
> diseño de la base de datos.
>
> Mi primera recomendacion te sugiero que tu modelo de objetos "se vea como
> objetos", en este caso:
>
> class Compania {
>     Guid Id;
>     String Nombre;
> }
>
> class Rol {
>     Guid Id;
>     String Nombre;
>     Compania Compania;
> }
>
> class Usuario {
>     Guid Id;
>     String Nombre;
>     String Apellido;
>     Rol Rol;
>     Compania Compania;
> }
>
> Sobre ese modelo, algunos comentarios:
>
>    - Sugiero usar Ids independientes del dominio. A mi me gustan los
>    Guids (ayudan bastante en los refactorings de base de datos), pero también
>    podrías usar enteros.
>    - Sugiero que no hagas referencias por códigos entre entidades, será
>    un dolor de cabeza por varios motivos
>
> Verás que eso es bastante mas fácil del mapear con el ORM, justamente
> porque estan preparados para modelos de objetos. El mapping podría ser algo
> así (de memoria y usando mejores nombres de columnas):
>
>   <class name="Usuario" table="Usuarios">
>     <id name="Id"/>
>     <property name="Nombre"/>
>     <property name="Apellido"/>
>     <many-to-one name="Rol" class="Rol"/>
>     <many-to-one name="Compania" class="Compania"/>
>   </class>
>
>   <class name="Rol" table="Roles">
>     <id name="Id"/>
>     <property name="Nombre"/>
>   </class>
>
>   <class name="Compania" table="Companias">
>     <id name="Id"/>
>     <property name="Nombre"/>
>     <many-to-one name="Rol" class="Rol"/>
>   </class>
>
> ----------------------------------
> Carlos Peix
>
> 2015-04-10 12:40 GMT-03:00 Camilo Soto <[email protected]>:
>
> Otro problema es que compañia tambien es una clase como hago para
>> relacionar las 3 clases, sabiendo que la compañia debe estar en Roles y
>> Usuarios
>>
>>
>> El jueves, 9 de abril de 2015, 15:00:54 (UTC-5), Camilo Soto escribió:
>>>
>>> Buenos Dias,
>>>
>>>
>>> Tengo la siguiente situacion:
>>>
>>> tengo una clase Rol, la cual tiene una llave primaria compuesta por las
>>> siguientes propiedades codigo y codigoCompania las cuales en la tabla roles
>>> se almacenan en las columnas codrol y codcia respectivamente, tengo otra
>>> clase usuario que tiene codigo y codigoCompania, las cuales se almacenan en
>>> los campos codusu y codcia, actualmente en la empresa en donde estoy
>>> desarrollando el proyecto no tienen integridad referencial en la base de
>>> datos es decir no tienen FK entre las tablas, la relacion es que un rol
>>> puede tener muchos usuarios en donde se debe tener en cuenta que
>>> pertenezcan a la misma compania, por eso tengo ls siguientes xml de mapeo:
>>>
>>> ROLES
>>> ______________________________________________________________
>>>
>>> <?xml version="1.0" encoding="utf-8" ?>
>>> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
>>>                    assembly="PruebaNHibernate"
>>>                    namespace="Entidades.Mapping">
>>>   <class name="Entidades.Entidades.Rol, Entidades" table="Roles"
>>> lazy="false">
>>>     <composite-id name="RolPK" class ="Entidades.Entidades.RolPK,Entidades"
>>> >
>>>       <key-property name="codigoCompania"  column="codcia"/>
>>>       <key-property name="codigo"  column="codrol"/>
>>>     </composite-id>
>>>     <property name="descripcion" column="desrol"/>
>>>   </class>
>>> </hibernate-mapping>
>>>
>>> _______________________________________________________________
>>>
>>> USUARIOS
>>> _______________________________________________________________
>>>
>>> <?xml version="1.0" encoding="utf-8" ?>
>>> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
>>>                    assembly="PruebaNHibernate"
>>>                    namespace="Entidades.Mapping">
>>>   <class name="Entidades.Entidades.Usuario, Entidades" table="Usuarios"
>>> lazy="false">
>>>     <id name="codigo" column="codusu"/>
>>>     <property name="codigo" column="codusu"/>
>>>     <property name="nombre" column="nomusu"/>
>>>     <property name="apellido" column="apeusu"/>
>>>     <property name="codigoCompania" column="codcia"/>
>>>     <many-to-one name="rolId" class="Entidades.Entidades.Rol,
>>> Entidades"  >
>>>       <column name="codcia"/>
>>>       <column name="codrol"/>
>>>     </many-to-one>
>>>   </class>
>>> </hibernate-mapping>
>>> ________________________________________________________________
>>>
>>> Las clases son las siguientes
>>>
>>>
>>> Rol
>>>
>>> namespace Entidades.Entidades
>>>
>>> {
>>>     public class Rol
>>>     {
>>>         public RolPK RolPK { get; set; }
>>>         public string descripcion { get; set; }
>>>         public ISet<Usuario> Usuarios { get; set; }
>>>     }
>>>
>>>
>>>     public class RolPK
>>>     {
>>>         public string codigoCompania { get; set; }
>>>         public string codigo { get; set; }
>>>
>>>         public override bool Equals(object obj)
>>>         {
>>>             if (obj == null)
>>>                 return false;
>>>             RolPK id;
>>>             id = (RolPK)obj;
>>>             if (id == null)
>>>                 return false;
>>>             if (codigoCompania == id.codigoCompania && codigo ==
>>> id.codigo)
>>>                 return true;
>>>             return false;
>>>         }
>>>
>>>         public override int GetHashCode()
>>>         {
>>>             return (codigoCompania + "|" + codigo).GetHashCode();
>>>         }
>>>     }
>>>
>>>
>>> }
>>> ________________-
>>> Usuario
>>>
>>> namespace Entidades.Entidades
>>> {
>>>     public class Usuario
>>>     {
>>>         public string codigo { get; set; }
>>>         public string nombre { get; set; }
>>>         public string apellido { get; set; }
>>>         public Rol rolId { get; set; }
>>>         public string codigoCompania { get; set; }
>>>     }
>>> }
>>> _________________________
>>>
>>>
>>> el problema es que al grabar el rol lo graba bien, pero el usuario me
>>> genera el problema siguiente:Índice 5 no válido para SqlParameterCollection
>>> con Count=5 me gustaria que me colaboraran en saber en que estoy fallando y
>>> que solucion le puedo dar a esa estructura que les estoy planteando.
>>>
>>> comparto proyecto por google drive
>>>
>>> Cordialmente,
>>>
>>> CAMILO ANDRES SOTO R.
>>>
>>  --
>> --
>> Para escribir al Grupo, hágalo a esta dirección:
>> [email protected]
>> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>> ---
>> Has recibido este mensaje porque estás suscrito al grupo
>> "NHibernate-Hispano" de Grupos de Google.
>> Para anular la suscripción a este grupo y dejar de recibir sus mensajes,
>> envía un correo electrónico a
>> [email protected].
>> Para acceder a más opciones, visita https://groups.google.com/d/optout.
>>
>
>  --
> --
> Para escribir al Grupo, hágalo a esta dirección:
> [email protected]
> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
> ---
> Has recibido este mensaje porque estás suscrito al grupo
> "NHibernate-Hispano" de Grupos de Google.
> Para anular la suscripción a este grupo y dejar de recibir sus mensajes,
> envía un correo electrónico a
> [email protected].
> Para acceder a más opciones, visita https://groups.google.com/d/optout.
>

-- 
-- 
Para escribir al Grupo, hágalo a esta dirección: 
[email protected]
Para más, visite: http://groups.google.com/group/NHibernate-Hispano
--- 
Has recibido este mensaje porque estás suscrito al grupo "NHibernate-Hispano" 
de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía 
un correo electrónico a [email protected].
Para obtener más opciones, visita https://groups.google.com/d/optout.

Responder a