2012-03-05 53 views
0

Iam正在使用Web服务进行应用程序。作为ORM,我使用nHibernate。nHibernate saveorupdate /合并分离对象

问题:

在应用层予加载与储存库实体可以说,ID(PK)32,将其转换为视图模型并将其发送到表示层。会话刷新。

然后,用户可以更改该实体中的数据,并向编辑数据的应用层发送请求。这是我的问题。随着请求(对于applicatino层)和所有数据作为视图模型(不是enity对象),iam也发送一个ID,但iam不能创建带ID的业务对象(id由nhibernate,private set生成)。我应该使用反射并注入该id,然后使用nhibernate saveorupdate或合并方法或手动比较并设置新值?

谢谢。

回答

2

而不是试图用id创建业务对象,您应该从会话中加载对象开始。在从nhibernate加载业务对象后,根据编辑模型修改值,然后更新对象。

您不必手动比较字段以查看它们是否已更改,nhibernate将为您处理该字段,并仅使用已更改的字段更新数据库。

你的方法可能是这样的:

public ActionResult Update(EditModel model) 
{ 
    var entity = _session.Get<Entity>(model.Id); 
    entity.Name = model.Name; 
    entity.Description = model.Description; 
    entity.SomeField = model.SomeField; 
    _session.SaveOrUpdate(entity); 
} 
+0

您选择的权利。我完全忘记了事务提交后对象被持久化了。谢谢 – Ivan 2012-03-05 14:28:26