【发布时间】:2010-12-29 15:46:33
【问题描述】:
一周前,我有一个 ASP.NET MVC 应用程序,它调用逻辑 POCO 服务层来针对实体执行业务逻辑。我常用的一种方法是使用 AutoMapper 将填充的视图模型映射到实体并在实体上调用更新(下面的伪代码)。
MyEntity myEntity = myService.GetEntity(param);
Mapper.CreateMap<MyEntityVM, MyEntity>();
Mapper.Map(myEntityVM, myEntity);
this.myService.UpdateEntity(myEntity);
更新调用将获取实体的实例,并通过存储库调用实体上的 NHibernate 的 Update 方法。
好吧,我最近将我的逻辑服务层更改为 WCF Web 服务。我注意到当实体从服务层发送到我的应用程序时,NHibernate 与实体建立的链接现在丢失了。当我尝试在更新方法中对实体进行操作时,NHibernate 的会话中出现了不应该出现的情况,反之亦然 - 它无法抱怨子标识符上的空值等。
所以我的问题...
如何有效地从填充的视图模型中获取输入并最终通过 NHibernate 修改对象?
- 我是否可以使用 NHibernate 快速修复?
- 是否应该采用不同的方法将更改从应用程序传递到服务层?
编辑:
我现在能想到的最好方法是创建一个新实体并从视图模型映射到新实体(包括标识符)。我会将它传递给服务层,在那里它将使用存储库检索实体,使用 AutoMapper 映射更改,并调用存储库的更新方法。我将映射两次,但它可能会起作用(尽管我必须在第二次映射中排除一堆属性/子项)。
【问题讨论】:
标签: asp.net-mvc wcf nhibernate automapper