Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# nHibernate保存或更新/合并分离对象_C#_Nhibernate_Repository - Fatal编程技术网

C# nHibernate保存或更新/合并分离对象

C# nHibernate保存或更新/合并分离对象,c#,nhibernate,repository,C#,Nhibernate,Repository,我正在使用web服务开发应用程序。作为ORM,我使用nHibernate 问题: 在应用层中,我加载了ID(pk)为32的存储库实体,将其转换为viewModel并发送到表示层。会话刷新 然后,用户可以更改该实体中的数据,并向应用程序层发送编辑数据的请求。这是我的问题。当请求(指向ApplicationNo层)和所有数据作为视图模型(非enity对象)时,iam也发送ID,但iam无法创建ID为的业务对象(ID由nhibernate生成,私有集)。我应该使用反射并注入该id,然后使用nhiber

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

问题:

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

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


谢谢。

您不应该尝试创建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);
}
public ActionResult更新(EditModel模型)
{
var entity=\u session.Get(model.Id);
entity.Name=model.Name;
entity.Description=model.Description;
entity.SomeField=model.SomeField;
_会话。保存或更新(实体);
}

你说得对。我完全忘记了在提交事务之后对象是持久化的。谢谢