Здравствуйте, я новичок в NHibernate. Я хотел бы сделать один SQL-запрос к базе данных, используя соединения с моими тремя таблицами.
У меня есть приложение со многими ролями и многими пользователями. Я пытаюсь заставить NHibernate правильно сформировать граф объектов, начиная с объекта Application. Например, если у меня есть 10 записей приложения, я хочу 10 объектов приложения, а затем эти объекты имеют свои роли, которые имеют своих пользователей. Однако то, что я получаю, напоминает декартово произведение, в котором у меня столько объектов приложения, сколько всего записей пользователя.
Я немного разбирался в этом и не уверен, возможно ли правильно сформировать иерархию приложений. Я могу только вернуть сплющенные объекты. Это кажется «возможно» возможным, так как в моем исследовании я читал о «сгруппированных соединениях» и «иерархическом выводе» с выходом LINQ to NHibernate. Опять же, хотя я новичок.
[Обновление на основе комментариев Франса в посте Айенде, я думаю, что я хочу сделать, невозможно http://ayende.com/Blog/archive/2008/12/01/solving-the-select-n1-problem.aspx]
Спасибо за ваше время заранее.
Session.CreateSQLQuery(@"SELECT a.ID,
a.InternalName,
r.ID,
r.ApplicationID,
r.Name,
u.UserID,
u.RoleID
FROM dbo.[Application] a JOIN dbo.[Roles] r ON a.ID = r.ApplicationID
JOIN dbo.[UserRoleXRef] u ON u.RoleID = r.ID")
.AddEntity("app", typeof(RightsBasedSecurityApplication))
.AddJoin("role", "app.Roles")
.AddJoin("user", "role.RightsUsers")
.List<RightsBasedSecurityApplication>().AsQueryable();