NHibernate标准类型不匹配

时间:2009-04-01 00:47:35

标签: nhibernate nhibernate-mapping

此代码

ICriteria crit = service.Session.CreateCriteria(typeof (DatabaseVersion));
crit.Add(Restrictions.Eq("Id.Minor", 4));
IList<DatabaseVersion> list = crit.List<DatabaseVersion>();

导致以下错误:NHibernate.QueryException:NHibernate.Criterion.SimpleExpression中的类型不匹配:Id.Minor期望类型System.Int16,实际类型System.Int32

如何更正此错误?我在映射文件中设置类型没有运气。我不想在代码中输入强制转换。

根据要求添加了映射文件。

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="Core.NUnit.Domain.DatabaseVersion,Core.NUnit" table="`DatabaseVersion`" lazy="true" >
    <composite-id name="Id" class="Core.NUnit.Domain.DatabaseVersionId,Core.NUnit">
      <key-property name="Major" column="`Major`" />
      <key-property name="Minor" column="`Minor`" type="Int16"/>
      <key-property name="Build" column="`Build`" />
      <key-property name="Revision" column="`Revision`" />
    </composite-id>
    <property name="Description" column="`Description`"/>
    <property name="DateApplied" column="`DateApplied`"/>
  </class>
</hibernate-mapping>

1 个答案:

答案 0 :(得分:1)

我认为问题可能是C#无法隐式地将int转换为short。看起来您的映射将此字段映射到Int16(短)。传入的“4”默认分配为int。 (我不知道为什么将int与短路进行比较会有麻烦......)

我认为没有简短的字面后缀。你或许可以这样做:

crit.Add(Restrictions.Eq("Id.Minor", (short)4));