問題:
問題:問題:
使用NHibernate 的語法使用Query相關集合會導致大量資料庫命中。這種行為主要出現在多對多關係中。
原因:public class UserRoleMap : ClassMap<UserRole> { public UserRoleMap() { Id(x => x.Id); Map(x => x.RoleName); HasManyToMany(x => x.UsersInRole) .Inverse() .LazyLoad() .Table("UsersInRoles"); } }
NHibernate 的急切獲取機制會針對關係的外鍵列中找到的每個不同值觸發單獨的查詢。當集合被標記為急切獲取但 ISession 不包含所有必需的物件時,會出現此問題。
示例映射:
假設您有以下內容data:
User1 有Role1
User2同時有 Role1 和 Role2HasManyToMany(x => x.UsersInRole) ... .BatchSize(25)
以上是如何最佳化 NHibernate QueryOver 以避免在獲取相關集合時多次資料庫命中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!