2

我正在编写一个 Web 应用程序,使用带有 Razor 视图的 asp.net MVC,其中进出服务器的数据由 ajax 处理并使用 KnockoutJs 映射到 UI。

我的模型是分层的,并且有子对象列表。现在这是问题所在:

当我编辑了主要对象(已经在数据库中) - 更改了一些属性,添加了一个子对象等 - 我应该如何在 NHibernate 中更新它?

在 Windows 应用程序中,主要对象存在于 NHibernate 会话中,并且可以轻松更新。在我的 web 应用程序中,我将 JSON 反序列化为一个“新”对象,然后需要将其重新附加到 NHibernate 会话。实际上这个反序列化是由模型绑定器完成的。

有这样做的聪明方法吗?我尝试了合并,但它不适用于添加的孩子。

我目前的解决方案是分别处理对模型的每次更改,即。当我添加一个孩子时,我通过 NHibernate 更新(通过 id 加载 mainmodel,将孩子添加到模型并点击更新),当我更新一些简单的属性时,我使用合并。我只是不认为这个解决方案非常优雅。

有什么建议么?

4

1 回答 1

1

当你从一个有状态的世界转移到一个无状态的世界时,这绝对是令人困惑的。不过,在您的操作方法中,您的模式几乎是正确的:

  1. 从数据库加载对象
  2. 根据视图模型对其进行更改
  3. 刷新会话/提交事务

如果对象在会话中被跟踪,并且您正在错误地使用 Merge,则不需要调用 Update 或 SaveOrUpdate。通常,您需要调用的唯一持久性方法是 Save 以使新对象持久化。

于 2013-10-23T13:17:40.053 回答