nHibernate saveorupdate / merge分离对象

时间:2012-03-05 14:07:15

标签: c# nhibernate repository

我正在使用Web服务进行应用程序。作为ORM我使用nHibernate。

问题:

在应用程序层中,我使用存储库实体加载,例如ID(pk)32,将其转换为viewModel并将其发送到表示层。会话满脸通红。

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

感谢。

1 个答案:

答案 0 :(得分: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);
}