此代码
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>
答案 0 :(得分:1)
我认为问题可能是C#无法隐式地将int转换为short。看起来您的映射将此字段映射到Int16(短)。传入的“4”默认分配为int。 (我不知道为什么将int与短路进行比较会有麻烦......)
我认为没有简短的字面后缀。你或许可以这样做:
crit.Add(Restrictions.Eq("Id.Minor", (short)4));