nHibernate复合密钥类类型不匹配

nHibernate复合密钥类类型不匹配,nhibernate,composite-key,Nhibernate,Composite Key,我有一个带有复合键的遗留表,它映射到3个其他表,因为这个表中有其他属性,因为它不是一个简单的映射表,所以我不能使用多对多集合解决方案来映射它 以下是我所做的: <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-

我有一个带有复合键的遗留表,它映射到3个其他表,因为这个表中有其他属性,因为它不是一个简单的映射表,所以我不能使用多对多集合解决方案来映射它

以下是我所做的:

<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>
这可以很好地编译,但当我尝试运行它时,它会给我一条错误消息:

NHibernate.QueryException:NHibernate.Criteria.SimpleExpression中的类型不匹配:ID应为类型AKey,实际类型System.Int32

请告知我做错了什么或错过了什么


非常感谢

如果要使用多对一键,则应将该类设置为:

public class Akey {
    public virtual One One {get; set;}
    public virtual Two Two {get; set;}
    public virtual Three Three {get; set;}
}
否则,如果需要Id,只需将其映射为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>
或者像您这样的复合材料:

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

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

因为我不能胜任C#中的struct,所以我将打赌您是否可以使用struct。

谢谢您的回复!最后一部分帮助我解决了问题,现在我终于可以继续前进了=啊。。。写完后我意识到最后一本应该是第一本!
 <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 ...
}
 <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 ...
}