Стратегия выборки NHibernate - PullRequest
       28

Стратегия выборки NHibernate

0 голосов
/ 19 сентября 2018

Я использую NHibernate с текущими API и получил MainEntity сопоставление следующим образом:

mapping.References(c => c.Parent1).Not.Nullable().Fetch.Select();
mapping.HasMany(c => c.Children1).Fetch.Select();
mapping.HasMany(c => c.Children2).Fetch.Select();

Затем я пытаюсь запросить MainEntity следующим образом:

var query = Session.Query<MainEntity>().Where(e => e.ID == id);
query.Fetch(e => e.Parent1).ToFuture();
query.FetchMany(e => e.Children1).ToFuture();
query.FetchMany(e => e.Children2).ThenFetch(c => c.Children21).ToFuture();
var entity = query.ToFuture().FirstOrDefault();

Иполучил запрос sql, как это:

select * from MainEntity
left outer join Parent1 on MainEntity.Parent1ID = Parent1.ID
where MainEntity.ID = @id;

select * from MainEntity
left outer join Children1 on MainEntity.ID = Children1.MainEntityID 
where MainEntity.ID = @id;

select * from MainEntity
left outer join Children2 on MainEntity.ID = Children2.MainEntityID
left outer join Children21 on Children2.Children21ID = Children21.ID
where MainEntity.ID = @id;

select * from MainEntity
where MainEntity.ID = @id;

Но я хочу, чтобы NHibernate сначала выбрал MainEntity, а затем Parent1 и Children1, Children2 по условию:

select *
from Parent1
where ID = @parent1ID;

select *
from Children1
where MainEntityID = @id;

@parent1ID и @id выбираются по первому запросу MainEntities.

Пожалуйста, помогите мне настроить отображение для этого.

1 Ответ

0 голосов
/ 27 сентября 2018

Вы пробовали другую версию LINQ?Это должно выглядеть следующим образом:

Query<Parent>()
.FetchMany(x=>x.Children1)
.FetchMany(x=>x.Children)
.FirstOrDefault(x=>x.Id=param1);

и изменить отображение детей на

mapping.HasMany(c => c.Children1);
mapping.HasMany(c => c.Children2);
...