Я новичок в NHibernate, но сумел заставить все работать нормально для моего последнего проекта.Но теперь я достиг неизбежной проблемы с производительностью, когда мне нужно выйти за рамки абстракции, чтобы ее исправить.
Я создал тест на единицу, чтобы изолировать метод, который занимает много времени.Но сначала хороший обзор моей доменной модели, вероятно, является хорошей идеей:
У меня есть «PmqccForm», который является объектом, который имеет объект «Проект», который содержит имя, номер и т. Д., А также имеетОбъект «Вопросы» - это класс, который сам содержит свойства для различных объектов «Вопрос».Существует объект JobVelocityQuestion, который сам имеет ответ и некоторые другие свойства, и целый ряд похожих объектов Question.Это то, о чем я говорю, с моим PmqccForm, имеющим объект Вопросы ![alt text](https://i.stack.imgur.com/OMcJh.png)
Это часть вопросов модели: ![Question DOmain Model](https://i.stack.imgur.com/vr9fC.jpg)
Ключевым моментом является то, что я хочубыть в состоянии напечатать form.Questions.JobVelocityQuestion
, поскольку всегда есть ровно 1 JobVelocityQuestion для каждого PmqccForm, то же самое для всех остальных вопросов.Это свойства C # объекта «Вопросы», который является для них просто местом хранения.
Теперь метод, который вызывает у меня проблемы, таков:
public IEnumerable<PmqccForm> GetPmqccFormsByUser(StaffMember staffMember)
{
ISession session = NHibernateSessionManager.Instance.GetSession();
ICriteria criteria = session.CreateCriteria(typeof(PmqccForm));
criteria.CreateAlias("Project", "Project");
criteria.Add(Expression.Eq("Project.ProjectLeader", staffMember));
criteria.Add(Expression.Eq("Project.IsArchived", false));
return criteria.List<PmqccForm>();
}
Взгляд в мою консоль из теста Nunit, который просто запускает этот метод, показывает, что существует почти 2000 запросов sql.processsed!http://rodhowarth.com/otherstorage/queries.txt - это журнал консоли.
Дело в том, что на данном этапе мне просто нужен объект формы, к актуальным вопросам можно обращаться по мере необходимости.Я думал, что NHibernate должен был сделать это?
Вот мой файл сопоставления: http://rodhowarth.com/otherstorage/hibernatemapping.txt
Может кто-нибудь намекнуть мне, что мне не хватает?или способ оптимизировать то, что я делаю по отношению к NHibernate?
Что если я сделаю вопросы коллекцией, а затем сделаю свойства циклически проходящими по этой коллекции и вернем правильные.Будет ли это лучше для оптимизации с точки зрения nhibernates?