NHibernate Invalid Cast - 使用查询时属性类型不匹配

时间:2014-03-13 13:25:21

标签: c# nhibernate orm nhibernate-mapping

经过几个小时阅读几个类似的问题后,我仍然无法找到我遇到的问题。查询中发生异常,如下所示:

    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(在某处读取这个可能的解决方案)
- 使用发生异常的行的结构进行播放

对于这方面的任何帮助都会非常感激,因为我在过去几天里已经坚持了几个小时这个和类似的基本问题。

1 个答案:

答案 0 :(得分:1)

找到了一个解决方案,我不确定为什么我之前没想过它。

通过从.hbm.xml中删除类型,它可以让查询无阻碍地进行。经过一些更多的测试后,我得出结论,优先级列对于成为int或者uint是不满意的。我认为这是一个问题,MySQL如何存储整数与C#的比较,很可能是因为我在数据库端将它们标记为无符号。作为修复,我只是从XML中删除了该类型。