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();
}
}
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. –