5
我想選擇一個實體,並獲取相關列表:NHibernate的QueryOver與獲取導致多個SQL查詢和數據庫打
Session.QueryOver<UserRole>()
.Fetch(x => x.UsersInRole).Eager
.List();
導致大量的數據庫訪問的。 第一個是這樣的:
SELECT ... FROM UserRoles left outer join UsersInRoles on ...
,數百單獨的查詢它看起來像:
SELECT ... FROM UsersInRoles left outer join UserRoles on ... WHERE UserRoles.UserId=?
的映射如下:
public class UserRoleMap : ClassMap<UserRole>
{
public UserRoleMap()
{
Id(x => x.Id);
Map(x => x.RoleName);
HasManyToMany(x => x.UsersInRole)
.Inverse()
.LazyLoad()
.Table("UsersInRoles");
}
}
嘗試了您的建議。導致1 + 12的查詢 - 之前好多了,但沒有辦法使它少於12? (增加批量大小?) - 批量大小的成本是多少?如果這一切都很好,我會默認設置。 批量大小是唯一的解決方案嗎?沒有可能的連接會導致2個查詢嗎?如果我需要用簡單的SQL編寫自己的自我,我認爲2個查詢就足夠了。謝謝。 –
如果有更好的解決方案比批量大小,也許,我不知道。之所以沒有默認打開,可能是這樣的事實,這是破壞直截了當的邏輯:uninitialize對象的代理是一個驅動程序。它在需要時直接用於數據。批量調整在會話中加入了更多努力來加入這些選擇。無論如何,批量大小在所有*我們的*集合和類映射上。即使在大型場合下,表演也很棒 –