0

やあ、私はこの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 ではない) ことです。

助言がありますか?

ありがとう

サラ

4

1 に答える 1

0

制限で id を明示的に指定します。"Dpsir.Dpsir.DpsirId", dpsirs.Select(d => d.DpsirId).ToArray()

于 2012-08-29T08:39:45.907 に答える