繁体   English   中英

System.InvalidCastException:从'DateTime'到'Int32'的无效转换。 冬眠

[英]System.InvalidCastException: Invalid cast from 'DateTime' to 'Int32'. nhibernate

我有以下课程:

public class AccionCorrectiva : Modelo<AccionCorrectiva>
{
    ...
    public virtual DateTime FechaFin { get; set; }
    ...
}

public class Indicador : Modelo<Indicador>
{        
    private IList<AccionCorrectiva> _acciones = new List<AccionCorrectiva>();
    public virtual IList<AccionCorrectiva> Acciones
    {
        get { return _acciones; }
        set { _acciones = value; }
    }
}

当我执行SomeIndicador.Acciones我得到:

NHibernate.Exceptions.GenericADOException: could not initialize a collection: [Dominio.Indicador.Acciones#1][SQL: SELECT acciones0_.indicador_id as indicador8_1_, acciones0_.Id as Id1_, acciones0_.FechaFin as FechaFin1_, acciones0_.Id as Id6_0_, acciones0_.Hallazgo as Hallazgo6_0_, acciones0_.Descripcion as Descripc3_6_0_, acciones0_.Objetivo as Objetivo6_0_, acciones0_.FechaFin as FechaFin6_0_, acciones0_.NumEstado as NumEstado6_0_, acciones0_.responsable_id as responsa7_6_0_, acciones0_.indicador_id as indicador8_6_0_ FROM acciones_correctivas acciones0_ WHERE acciones0_.indicador_id=?] ---> System.FormatException: Input string '01/01/2013 0:00:00' was not in the correct format. ---> System.InvalidCastException: Invalid cast from 'DateTime' to 'Int32'.

我究竟做错了什么?

编辑如果我调用AccionCorrectivaRepository.Instance.FindById(1)我会得到一个AccionCorrectiva并可以正常工作! 方言是SQLite

表结构:

CREATE TABLE acciones_correctivas (Id INT not null, FechaFin DATETIME);

映射指标

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                  assembly="Dominio"
                  namespace="Dominio">
  <class name="Indicador" table="indicadores">
    <id name="Id">
      <generator class="increment" />
    </id>
    <list name="Acciones" cascade="all-delete-orphan">
      <key column="indicador_id" />
      <index column="FechaFin" />
      <one-to-many class="AccionCorrectiva" />
    </list>

  </class>
</hibernate-mapping>

AccionCorrectiva:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                  assembly="Dominio"
                  namespace="Dominio">
  <class name="AccionCorrectiva" table="acciones_correctivas">
    <id name="Id">
      <generator class="increment" />
    </id>
    <many-to-one name="Indicador" column="indicador_id" />

  </class>
</hibernate-mapping>

问题是<index>映射。 请参阅文档: 6.3。 价值观和多对多联想

提取:

对于诸如地图和列表之类的索引集合,我们需要一个<index>元素。 对于列表,此列包含从零开始编号的连续整数。 如果必须处理旧数据,请确保索引确实从零开始。 对于地图,该列可以包含任何NHibernate类型的值。

换句话说,将索引视为C# IList索引(例如,支持list[0]访问)。 因此,必须有int类型的列(或smallint ...),NHibernate将使用该列来跟踪IList索引。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM