经过几个小时阅读几个类似的问题后,我仍然无法找到我遇到的问题。查询中发生异常,如下所示:
Configuration config = new Configuration();
config.AddAssembly(typeof(TestCase).Assembly);
ISessionFactory sessionFactory = config.BuildSessionFactory();
var session = sessionFactory.OpenSession();
ICriteria targetObjects = session.CreateCriteria(typeof(TestCase));
IList<TestCase> itemList = targetObjects.List<TestCase>(); //Exception raised here
例外是&#34; Invalid Cast(检查映射是否存在属性类型不匹配); TestProject.TestCase的设置者&#34;
InnerException为{&#34;指定演员表无效。&#34;}
这个课程如下:
public virtual Guid Id { get; set; }
public virtual ushort Priority { get; set; }
public virtual string Description { get; set; }
public virtual IList<string> Project { get; set; }
public virtual string Name { get; set; }
public virtual DateTime? Created { get; set; }
public virtual DateTime? Updated { get; set; }
映射文件是
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="TestProject"
namespace="TestProject">
<class name="TestCase"
table="test_table"
lazy="true">
<id name="Id" column="ID" type="Guid">
<generator class="assigned" />
</id>
<property name="Priority" column="Priority"
type="int" />
<property name="Description" column="Description"
type="string" />
<property name="Name" column="Name"
type="string" />
<property name="Created" column="Created"
type="DateTime" />
<property name="Updated" column="Updated"
type="DateTime" />
<list table="ProjTable" name="Project">
<key column="TestID" />
<list-index column="ProjIndex" />
<element column="ProjCol" />
</list>
</class>
</nhibernate-mapping>
我对SQL并不过分熟悉,但过去曾帮助我调试过这个项目,所以我发布了以下内容:
NHibernate: SELECT this_.ID as ID0_0_, this_.Priority as Priority0_0_,
this_.Description as Descript4_0_0_, this_.Test_Name as Test5_0_0_,
this_.Created as Created0_0_, this_.Updated as Updated0_0_ FROM test_table this_
我已经能够使用此映射将值加载到表中,但是在找不到此错误的情况下,我无法使用任何类型的查询。我看着自己,似乎无法找到原因。
我尝试了什么:
- 不同的查询
- 改变日期时间?到DateTime(在某处读取这个可能的解决方案)
- 使用发生异常的行的结构进行播放
对于这方面的任何帮助都会非常感激,因为我在过去几天里已经坚持了几个小时这个和类似的基本问题。
答案 0 :(得分:1)
找到了一个解决方案,我不确定为什么我之前没想过它。
通过从.hbm.xml中删除类型,它可以让查询无阻碍地进行。经过一些更多的测试后,我得出结论,优先级列对于成为int或者uint是不满意的。我认为这是一个问题,MySQL如何存储整数与C#的比较,很可能是因为我在数据库端将它们标记为无符号。作为修复,我只是从XML中删除了该类型。