我有兩個與NHibernate映射的類:class應用程序引用class Store與一個屬性StoreId。應用程序用戶有一個身份證,而類商店有一個分配的ID,但我不認爲在這種情況下的問題。雙向多對一生成SELECT N + 1
ApplicationUser映射:
<many-to-one name="Store" column="StoreId" class="Store" />
存儲映射:
<many-to-one name="ApplicationUser" column="Id" class="ApplicationUser"
property-ref="Store" insert="false" update="false"
fetch="join" outer-join="true" />
當我加載所有商店,一個左外連接被生成以ApplicationUser如預期,但隨後構建對象圖時NHibernate決定爲每個不引用ApplicationUser的商店額外增加SELECT ... FROM ApplicationUser WHERE StoreId = ?
。
這是巨大的矯枉過正,完全沒有必要,因爲它應該已經知道這些ApplicationUser不存在。
任何人都知道如何阻止NHibernate生成這些額外的查詢?
編輯:
類是非常基本的,就像這樣:
public class Store
{
public virtual int Id { get; set; }
// ...
public virtual ApplicationUser ApplicationUser { get; set; }
}
public class ApplicationUser
{
public virtual int Id { get; set; }
// ...
public virtual Store Store { get; set; }
}
我想你可能想使用一對一的映射來避免這個問題http://nhforge.org/doc/nh/en/index.html#mapping-declaration-onetoone – Vadim 2011-05-05 18:33:01
是的,我實際上它是一對一的,但也存在問題,但現在我明白這可能是因爲我沒有配置獲取屬性... – Koen 2011-05-06 09:01:40