我想弄清楚如何連接兩個表(節點和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另一個實體是假設保持結果。我的C#代碼如下所示:
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>();
我結束了與此異常: {「在‘字段列表’未知列‘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()是_queryover_,它是一個NHibernate特定的API,而不是LINQ。如果您想使用LINQ,請從'session.Query()'開始。 –
另請注意,FluentNHibernate只是一個定義映射的API,它在查詢後不再涉及。你真正要問的是「如何在NHibernate中查詢X?」。科爾的迴應似乎是一個很好的迴應。 –