nHibernate saveor更新/合并分离的对象

本文关键字:分离 对象 合并 saveor 更新 nHibernate | 更新日期: 2023-09-27 18:26:59

我正在使用web服务进行应用程序开发。作为ORM,我使用nHibernate。

问题:

在应用层中,我加载ID(pk)为32的存储库实体,将其转换为viewModel并发送到表示层。会话已刷新。

然后,用户可以更改该实体中的数据,并向应用层发送编辑数据的请求。这是我的问题。通过请求(向应用层)和所有数据作为视图模型(而不是实体对象),iam也发送了一个ID,但无法创建具有ID的业务对象(ID由nhibernate生成,私有集)。我应该使用反射并注入该id,然后使用nhibernate saveorupdate或merge方法,还是手动比较和设置新值?

谢谢。

nHibernate saveor更新/合并分离的对象

与其尝试创建具有id的业务对象,不如从会话中加载该对象以开始。从nhibernate加载业务对象后,根据编辑模型修改值,然后更新对象。

您不必手动比较字段来查看它们是否发生了更改,nhibernate将为您处理此问题,并且只使用更改的字段更新DB。

你的方法可能看起来像:

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);
}