2012-02-13 24 views
1

可能重複:
NHibernate Join Fetch(Kind)如何獲取工作

我已閱讀文章。 http://fabiomaulo.blogspot.com/2010/03/conform-mapping-components.html

試圖重現它在我的項目上,並得到了奇怪的行爲。

我有兩個的entites:

Plan 
{ 
    public virtual int Id { get; set; } 
    public virtual Payer Payer { get; set; } 
} 

Payer 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
} 

映射它:

orm.Cascade<Payer, Plan >(CascadeOn.Persist | CascadeOn.Merge); 
orm.Cascade<Plan, Payer>(CascadeOn.None); 

取:

mapper.Customize<CarePlan>(cm => cm.ManyToOne(o => o.Payer, x => 
x.Fetch(FetchKind.Join))); 

簡單的GET:

var plan = session.Query<Plan>().Where(c=>c.Id == 
    1).SingleOrDefault(); 

Console.WriteLine(plan.Payer.Name); 

而且我得到這個查詢:

select careplan0_.Id 
     careplan0_.PayerId 
from CarePlans careplan0_ 
where careplan0_.Id = 1 /* @p0 */ 
and other query 
SELECT payer0_.Id , 
payer0_.Name as Name 
FROM Payers payer0_ 
WHERE payer0_.Id = 2 

爲什麼我用了2個查詢?我怎樣才能獲得一個連接查詢?

+0

http://stackoverflow.com/questions/8232420/nhibernate-join-fetchkind – mxmissile 2012-02-13 18:57:56

+0

它'的anwser。我如何將這個問題設置爲重複? – 2012-02-13 20:50:21

回答

1

嘗試

VAR計劃= session.Query() 。凡(C => c.Id == 1) .Fetch(X => x.Player).Eager .SingleOrDefault();

嘗試禁用延遲加載,所以它會在默認情況下急於負載

+0

這段代碼很好用。但我想在映射中設置它。 – 2012-02-13 20:37:59