У меня есть следующий метод, который вызывается из Ajax:NHibernate набор ссылается свойство по идентификатору
[Authorize]
[ValidateInput(false)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public JsonNetResult CreateOrUpdateTimeRecord(TimeRecord tr)
{
TimeRecord trLocal;
if (tr.Id == -1 || tr.Id == 0)
{
trLocal = new TimeRecord
{
Description = tr.Description,
StartTime = tr.StartTime,
EndTime = tr.EndTime,
User =new myTimeMvc.Models.NHibernate.Models.User {Id = tr.User.Id},// _userRepo.Get(tr.User.Id),
Hdt = new Hdt {Id = tr.Hdt.Id}//_hdtRepo.Get(tr.Hdt.Id)
};
_timeRepo.Insert(trLocal);
}
else
{
trLocal = _timeRepo.Get(tr.Id);
trLocal.Description = tr.Description;
trLocal.StartTime = tr.StartTime;
trLocal.EndTime = tr.EndTime;
_timeRepo.Update(trLocal);
}
...
}
Как вы можете видеть, что мой TimeRecord имеет ссылку на пользователя и HDT. Теперь я начал работать с NHibernate Profiler, который жалуется, когда я разрешаю свои свойства, загружая их из своих соответствующих репозиториев. Это ясно для меня, так как на самом деле мне не нужно запрашивать базу данных для этого, так как у меня есть идентификаторы для этих объектов.
User = _userRepo.Get(tr.User.Id),
Hdt = _hdtRepo.Get(tr.Hdt.Id)
Но я не 100% уверен, что если я могу использовать вместо этого:
User =new myTimeMvc.Models.NHibernate.Models.User {Id = tr.User.Id},,
Hdt = new Hdt {Id = tr.Hdt.Id}
Я думаю, NHibernate ленивый прокси работают точно так же, так как они содержат только идентификатор соответствующего объекта и загрузите остальное, когда это необходимо. Должен ли я приложить этот «новый» проект в любом случае к моей сессии? Может ли кто-нибудь сказать мне, как правильно это сделать?
Cheers, Стефан