【问题标题】:nHibernate saveorupdate/merge detached objectnHibernate saveorupdate/merge detached object
【发布时间】:2012-03-05 14:07:14
【问题描述】:

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

问题:

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

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

谢谢。

【问题讨论】:

    标签: c# nhibernate repository


    【解决方案1】:

    您应该从会话中加载对象以开始使用,而不是尝试使用 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);
    }
    

    【讨论】:

    • 你说得对。我完全忘记了该对象在事务提交后仍然存在。谢谢
    猜你喜欢
    • 2010-12-09
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多