2016-06-28 13 views
0

Ich bin neue NHibernate Abfrage. Ich habe Orakeltabelle mit einer zu vielen Beziehung, wie ich unten erwähnt habe. Ich habe die fließende nhibernate Mapping gemacht und versucht, die folgende Abfrage auszuführen, aber ich bekomme immer Fehler, ChInfo_Id nicht gültig. Kann mir jemand helfen, was mache ich hier falsch?C# Nhibernate, wie man Query über eins zu vielen verbindet

var query = Session.QueryOver(() => logAlias) 
        .Inner.JoinQueryOver(()=>logAlias.ChInfo,()=>chInfoAlias) 
        .Where(()=>logAlias.RegDate.IsBetween(fromDate).And(toDate)) 
        .Future<Log>(); 

    return query.ToList(); 

Tables:

Ch_Info

Ch_no 
Name 

Log

portid 
regdate 
ch_no 

Klasse und FluentNHibernate Karten:

public class Log 
{ 
    public virtual int PortId { get; set; } 
    public virtual DateTime Regdate { get; set; } 
    public virtual ChInfo ChInfo { get; set; } 
} 

public class ChInfo 
{ 
    public ChInfo() 
    { 
     Logs = new List<Log>(); 
    } 

    public virtual string Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual IList<Log> Logs { get; set; }   
} 

public class LogMap : ClassMap<Log> 
{ 
    public LogMap() 
    { 
     Table("LOG"); 

     CompositeId() 
      .KeyProperty(x => x.PortId,"portid") 
      .KeyProperty(x => x.Regdate, "regdate"); 

     References(x => x.ChInfo); 
    } 
} 
public class ChInfoMap : ClassMap<ChInfo> 
{ 
    public ChInfoMap() 
    { 
     Table("Ch_Info"); 

     Id(x => x.Id).GeneratedBy.Assigned().Column("Ch_no"); 
     Map(x => x.Name).Column("Name"); 
     HasMany(x => x.Logs) 
      .Inverse() 
      .Cascade.All(); 
    } 
} 

Antwort

0

Ich löste es durch Angabe des Spaltennamens in den Referenzen in der LogMap.

public class LogMap : ClassMap<Log> 
{ 
    public LogMap() 
    { 
     Table("LOG"); 

     CompositeId() 
      .KeyProperty(x => x.PortId,"portid") 
      .KeyProperty(x => x.Regdate, "regdate"); 

     References(x => x.ChInfo).Columne("Ch_no"); 
    } 
} 
+0

Ich würde den Spaltennamen auf beiden Seiten der bidirektionalen Zuordnung angeben. Übrigens: Vermeiden Sie zusammengesetzte Schlüssel. Sie sind ein Anti-Pattern und werden nur von NHibernate unterstützt, um mit älteren Datenbanken fertig zu werden. –