私はそれらに関連する1つの外部キーを持つ2つのテーブル(ノードとNodeDetails)を結合する方法を理解しようとしています。基本的に私は、このSQLクエリのNHibernateはLINQのバージョンを探しています:私は参加やってるので流暢なNhibernate 4で単純なテーブル結合を行う方法
SELECT node.ObjectType, nodeDetails.Name, nodeDetails.SizeInFeet
FROM node
left join nodeDetails
on node.ID = nodedetails.nodeID
ORDER BY node.ObjectType;
と私はすべての列を必要としない、私はしたとしているNodeDetailsViewと呼ばれる別のエンティティを作成しました結果を保持する。
Node n = null;
NodeDetails nd = null;
var q = _session.QueryOver<NodeDetails>(() => nd)
.JoinQueryOver(x => x.NodeID,() => n)
.TransformUsing(Transformers.AliasToBean<NodeDetailsView>());
IList<NodeDetailsView> r = t.List<NodeDetailsView>();
私はこの例外で終わる:私のC#コードは次のようになります {「不明な列 『this_.SizeInFeet』 『フィールドリスト』中」} 私はいけない上記の私のLINQクエリは正しいと思うし、私のマッピングが正しくない可能性があります。あなたはそれを見て、私にいくつかの指針を与えてもらえますか?ありがとう!
私のエンティティクラス: Node.cs
public class Node
{
public virtual int ID { get; set; }
public virtual string ObjectType { get; set; }
public virtual string Location {get; set;}
}
Nodetail.cs
public class NodeDetails : IVersionedEntity
{
public virtual int ID { get; set; }
public virtual Node NodeID { get; set; }
public virtual int SizeInFeet { get; set; }
public virtual float Price { get; set; }
}
ビュークラスNodeDetailsView.cs
public class NodeDetailsView
{
public virtual string ObjectType { get; set; }
public virtual string SizeInFeet { get; set; }
public virtual int TotalSpace { get; set; }
}
流暢マッピング
public class NodeMap: ClassMap<Node>
{
public WorldObjectMap()
{
Id(x => x.ID);
Map(x => x.ObjectType).Not.Nullable();
Map(x => x.Location).Not.Nullable();
}
}
public class NodDetailsMap : ClassMap<NodeDetails>
{
public NodDetailsMap()
{
Id(x => x.ID);
References(x => x.NodeID).Column("ID");
Map(x => x.MarketPrice).Nullable();
Map(x => x.SizeInFeet).Nullable();
}
}
public class NodeDetailsViewMapping : ClassMap<NodeDetailsView>
{
public WorldObjectLeasesViewMapping()
{
Map(x => x.ObjectType).Not.Nullable();
Map(x => x.Name).Nullable();
Map(x => x.SizeInFeet);
}
}
'QueryOver()'は、Libernateではなく_queryover_、Hibernate固有のAPIです。 LINQを使いたい場合は、 'session.Query()'で始まります。 –
また、FluentNHibernateはマッピングを定義するためのAPIに過ぎず、クエリーを実行するときには後で関与しません。あなたが本当に求めているのは、 "NHibernateでXをクエリする方法"です。以下のコールの回答は良いもののようです。 –