Pregunta

Tengo una tabla con claves compuestas legado que se asignan a otras 3 mesas, ya que esta tabla tiene otros atributos en el mismo, ya que no es una tabla de asignación simple, no puedo usar la solución puesta a muchos a muchos para mapear esto.

Lo que sigue es lo que he hecho:

<class name="classA" table="A">
<composite-id name="ID" class="AKey">
  <key-many-to-one name="Id_one" class="One" column="Id_one" />
  <key-many-to-one name="Id_two" class="Two" column="Id_two" />
  <key-many-to-one name="Id_three" class="Three" column="Id_three" />
</composite-id>

AKey es meramente una estructura que contiene los tres ids, y Id_one, Id_two, y Id_three están todos define como int en su respectiva clase.

public struct Akey {
    public int Id_one { get; set; }
    public int Id_two { get; set; }
    public int Id_three { get; set; }
}

Esta compila bien, pero cuando intento ejecutarlo, me da un mensaje de error:

NHibernate.QueryException: tipo incorrecto en NHibernate.Criterion.SimpleExpression: Identificación tipo esperado AKey, tipo real System.Int32

Por favor, asesorar sobre lo que he hecho mal o perdido.

Gracias un montón!

¿Fue útil?

Solución

Si va a utilizar la tecla muchos-a-uno que pondría la clase:

public class Akey {
    public virtual One One {get; set;}
    public virtual Two Two {get; set;}
    public virtual Three Three {get; set;}
}

De lo contrario, si desea que el Id que acaba de asignar como propiedades de classA:

 <composite-id>
     <key-property name="Id_one" column="Id_one" />
     <key-property name="Id_two" column="Id_two" />
     <key-property name="Id_three" column="Id_three" />
 </composite-id>

.

public class classA {
    public virtual int Id_one {get; set;}
    public virtual int Id_two {get; set;}
    public virtual int Id_three {get; set;}

    // ... rest of props ...
}

O como un compuesto que tiene como:

 <composite-id name="ID" class="AKey">
     <key-property name="Id_one" column="Id_one" />
     <key-property name="Id_two" column="Id_two" />
     <key-property name="Id_three" column="Id_three" />
 </composite-id>

.

public class AKey {
    public virtual int Id_one {get; set;}
    public virtual int Id_two {get; set;}
    public virtual int Id_three {get; set;}
}

public class classA {
    public virtual AKey ID {get; set;}

    // ... rest of props ...
}

Por último ...

 <composite-id>
   <key-many-to-one name="Id_one" class="One" column="Id_one" />
   <key-many-to-one name="Id_two" class="Two" column="Id_two" />
   <key-many-to-one name="Id_three" class="Three" column="Id_three" />
 </composite-id>

.

public class classA {
    public virtual One One {get; set;}
    public virtual Two Two {get; set;}
    public virtual Three Three {get; set;}

    // ... rest of props ...
}

El ir a despejar de si se puede utilizar una estructura porque no soy competente en ellos en C #.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top