やあ、私はこのC#コードを持っています:
var criteria = GetSession().CreateCriteria<Indicatore>();
List<string> dpsirs //passed as a parameter
// I want to select all [indicatore] that have [dpsrir] in my list dpsirs
if (dpsirs.Count > 0) {
criteria.CreateCriteria("IndicatoriDpsir", "Dpsir", JoinType.InnerJoin);
criteria.Add(Restrictions.In("Dpsir.Dpsir", dpsirs));
}
データを選択すると
var indicatori = criteria.List<Indicatore>();
このエラーがあります:
Exception occurred getter of Mappings.Dpsir.DpsirId
Object does not match target type.
私のマッピングクラスは次のとおりです。
public class Indicatore {
....
public virtual IList<IndicatoreDpsir> IndicatoriDpsir { get; set; }
....
}
public class IndicatoreMap : ClassMap<Indicatore> {
....
this.HasMany(x => x.IndicatoriDpsir).KeyColumn("INDICATORE_PFK");
}
public class IndicatoreDpsir {
public virtual Indicatore Indicatore { get; set; }
public virtual Dpsir Dpsir { get; set; }
}
public class IndicatoreDpsirMap : ClassMap<IndicatoreDpsir>
public IndicatoreDpsirMap() {
Table("R_INDICATORI_DPSIR");
LazyLoad();
CompositeId()
.KeyReference(x => x.Indicatore, "INDICATORE_PFK")
.KeyReference(x => x.Dpsir, "DPSIR_PID");
}
}
public class Dpsir {
public Dpsir() {
IndicatoriDpsir = new List<IndicatoreDpsir>();
}
public virtual string DpsirId { get; set; }
public virtual IList<IndicatoreDpsir> IndicatoriDpsir { get; set; }
public virtual string DescrizioneIt { get; set; }
public virtual string DescrizioneFr { get; set; }
}
public class DpsirMap : ClassMap<Dpsir> {
public DpsirMap() {
Table("D_DPSIR");
LazyLoad();
Id(x => x.DpsirId).GeneratedBy.Assigned().Column("DPSIR_ID");
Map(x => x.DescrizioneIt).Column("DESCRIZIONE_IT").Not.Nullable().Length(128);
Map(x => x.DescrizioneFr).Column("DESCRIZIONE_FR").Not.Nullable().Length(128);
HasMany(x => x.IndicatoriDpsir).KeyColumn("DPSIR_PID");
}
}
ノート
奇妙なことに、私は同じ状況でうまくいくということです。唯一の 2 つの違いは、私のクラス Dpsir では、キーが文字列型 ( intではなく) であり、割り当てられている (ID ではない) ことです。
助言がありますか?
ありがとう
サラ