2009-08-25 7 views
2

J'ai une table héritée avec des clés composées qui sont mappées à 3 autres tables, car cette table a d'autres attributs, car ce n'est pas une simple table de mappage, je ne peux pas utiliser le nombreux -to-many set solution pour mapper ceci.nHibernate Clé composite Classe Type Incompatibilité

Voici ce que je l'ai fait:

<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 est simplement une struct qui détient les trois ids et Id_one, Id_two et Id_three sont tous définis comme int dans leur classe respective.

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

Cette compile très bien, mais lorsque je tente de l'exécuter, il me donne un message d'erreur:

NHibernate.QueryException: incompatibilité de type dans NHibernate.Criterion.SimpleExpression: ID Type AKey attendu, type réel System.Int32

S'il vous plaît aviser de ce que j'ai mal fait ou si j'ai manqué.

Merci beaucoup!

Répondre

5

Si vous allez utiliser key-many-to-one vous mettriez la classe:

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

Sinon, si vous voulez l'identifiant que vous les mapper comme propriétés 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 ... 
} 

Ou comme un composite comme vous avez:

<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 ... 
} 

Enfin ...

<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> 

. Aller à savoir si vous pouvez utiliser une structure parce que je ne suis pas compétent sur eux en C#.

+0

Merci pour votre réponse! La dernière partie m'a aidé à résoudre mon problème, maintenant je peux enfin passer à autre chose! = P – Akey

+0

Yah ... J'ai réalisé après l'avoir écrit que le dernier devait être le premier! – anonymous

Questions connexes