C# nHibernate保存或更新/合并分离对象
我正在使用web服务开发应用程序。作为ORM,我使用nHibernate 问题: 在应用层中,我加载了ID(pk)为32的存储库实体,将其转换为viewModel并发送到表示层。会话刷新 然后,用户可以更改该实体中的数据,并向应用程序层发送编辑数据的请求。这是我的问题。当请求(指向ApplicationNo层)和所有数据作为视图模型(非enity对象)时,iam也发送ID,但iam无法创建ID为的业务对象(ID由nhibernate生成,私有集)。我应该使用反射并注入该id,然后使用nhibernate saveorupdate或merge方法,还是手动比较并设置新值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
谢谢。您不应该尝试创建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;
_会话。保存或更新(实体);
}
你说得对。我完全忘记了在提交事务之后对象是持久化的。谢谢