2013-03-25 496 views
1

我有以下類別:System.InvalidCastException:從'DateTime'到'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); 

映象 Indicador

<?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> 
+0

你可以提供你的類的映射。您還使用了哪些DBMS,以及表中的「FechaFin」是什麼數據類型。 – mickfold 2013-03-25 18:48:55

+0

請看我的編輯 – 2013-03-25 19:13:40

回答

0

問題是<index>映射。請參閱文檔:6.3. Collections of Values and Many-To-Many Associations

提取物:

對於排序集合喜歡的地圖和列表,我們需要一個<index> 元素。對於列表,該列包含從零開始編號爲 的連續整數。確保你的索引真的從零開始,如果你 必須處理遺留數據。對於地圖,該列可以包含任何NHibernate類型的任何 值。

換句話說,認爲關於索引爲C#IList指數(例如支撐list[0]訪問)。所以,必須有int類型的列(或smallint ...),NHibernate將使用它來跟蹤IList索引。

相關問題