0
私は新しいNHibernateクエリーです。私は以下に述べたように、1対1の関係を持つOracleテーブルを持っています。私は流暢なnhibernateマッピングを行い、以下のクエリを実行しようとしていますが、ChInfo_Idが有効でないというエラーが表示され続けます。誰でも私がここで間違っていることを助けることができますか?C#Nhibernateクエリーオーバーに1対多に参加する方法
var query = Session.QueryOver(() => logAlias)
.Inner.JoinQueryOver(()=>logAlias.ChInfo,()=>chInfoAlias)
.Where(()=>logAlias.RegDate.IsBetween(fromDate).And(toDate))
.Future<Log>();
return query.ToList();
テーブル:
Ch_Info
Ch_no
Name
ログイン
portid
regdate
ch_no
クラスとFluentNHibernateマップ:
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();
}
}
私は双方向関連の両側に列名を指定します。ところで、複合キーは避けてください。彼らはアンチパターンであり、レガシーデータベースに対処するためにNHibernateによってのみサポートされています。 –