[英]Fluent Nhibernate mappings / Join
在我的代碼中,我有三個主要實體:1.公司2.員工3.職位
員工可以在各個公司中擔任多個職位。
我想檢索與特定公司相關的所有員工。
在代碼中,我會做類似的事情:
public partial class Company
{
public virtual IEnumerable<Position> Positions { get; protected set; }
public virtual IEnumerable<Staff> Staffs
{
get { return Positions.Select(x => x.Staff); }
}
}
class CompanyMap : ClassMap<Company>
{
public CompanyMap()
{
Id(x => x.Id)
.Column("CompanyId")
.GeneratedBy.Identity();
Map(x => x.Name)
.Not.Nullable();
HasMany(x => x.Positions)
.KeyColumn("CompanyId")
.AsBag();
}
}
PB:在此解決方案中,我將加載與公司相關的所有職位,然后再與每個職位相關的所有人員...在績效方面,我猜不是很好...
我敢肯定,有一種更好的方法可以直接在CompanyMap類中執行此連接。
你能幫我做到嗎?
謝謝塞巴斯蒂安
如何更改數據模型? Staff
似乎總是處於給定Company
級別的給定Position
集合中。 這建議以下模型
public partial class Staff
{
public virtual IEnumerable<CompanyPosition> Positions { get; protected set; }
}
public class Position
{
//...
}
public class Company
{
//...
}
public class CompanyPosition
{
public virtual Company Company {get;set;}
public virtual IEnumerable<Position> {get;set;}
}
有了這個,您可以進行簡單的映射,並且您的查詢最終與此類似
var data = session.Query<Staff>().Where(s=>s.CompanyPosition.Company == company);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.