Неделю назад у меня было приложение ASP.NET MVC, которое вызывало логический уровень обслуживания POCO для выполнения бизнес-логики в отношении сущностей. Один из подходов, который я обычно использовал, состоял в том, чтобы использовать AutoMapper для отображения заполненной модели представления на объект и вызывать обновление объекта (псевдокод ниже).
MyEntity myEntity = myService.GetEntity(param);
Mapper.CreateMap<MyEntityVM, MyEntity>();
Mapper.Map(myEntityVM, myEntity);
this.myService.UpdateEntity(myEntity);
Вызов update принимает экземпляр сущности и через репозиторий вызывает метод Update NHibernate для сущности.
Ну, я недавно изменил свой уровень логического сервиса на веб-сервисы WCF. Я заметил, что ссылка, которую NHibernate делает с сущностью, теперь теряется, когда сущность отправляется из сервисного уровня в мое приложение. Когда я пытаюсь работать с сущностью в методе обновления, в сеансе NHibernate происходит нечто, чего не должно быть, и наоборот - он не может жаловаться на пустые значения дочерних идентификаторов и т.
Итак, мой вопрос ...
Что я могу сделать, чтобы эффективно получить информацию от моей заполненной модели представления и в конечном итоге изменить объект через NHibernate?
- Есть ли быстрое исправление, которое я могу применить с NHibernate?
- Должен ли я использовать другой подход при передаче изменений из приложения на уровень обслуживания?
EDIT:
Лучший подход, о котором я могу подумать сейчас, - это создать новый объект и отобразить его из модели представления в новый объект (включая идентификатор). Я передам это на сервисный уровень, где он получит объект, используя хранилище, отобразит изменения, используя AutoMapper, и вызовет метод обновления хранилища. Я буду отображать дважды, но это может сработать (хотя мне придется исключить группу свойств / потомков во втором отображении).