【问题标题】:System.InvalidCastException: Invalid cast from 'DateTime' to 'Int32'. nhibernateSystem.InvalidCastException:从“DateTime”到“Int32”的无效转换。休眠
【发布时间】:2013-03-15 07:26:05
【问题描述】:

我有以下课程:

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=?] ---&gt; System.FormatException: Input string '01/01/2013 0:00:00' was not in the correct format. ---&gt; 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>

【问题讨论】:

  • 你能提供你的类映射吗?还有你使用的是什么DBMS,表中FechaFin是什么数据类型。

标签: c# sqlite nhibernate datetime .net


【解决方案1】:

问题在于&lt;index&gt; 映射。请参阅文档:6.3. Collections of Values and Many-To-Many Associations

摘录:

对于地图和列表等索引集合,我们需要&lt;index&gt; 元素。对于列表,此列包含编号的连续整数 从零开始。确保你的索引真的从零开始,如果你 必须处理遗留数据。对于地图,该列可能包含任何 任何 NHibernate 类型的值。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 2015-10-09
    • 2015-11-20
    相关资源
    最近更新 更多