如何将对象从 Asp.Net MVC 4 重新附加到 Fluent NHibernate

本文关键字:新附加 NHibernate Fluent MVC Net 对象 Asp | 更新日期: 2023-09-27 18:36:35

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

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

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

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

有没有一种聪明的方法可以做到这一点?我尝试了合并,但它不适用于添加的子项。

目前的解决方案是单独处理对模型的每个更改,即当我添加一个子项时,我通过 NHibernate 更新(按 id 加载主模型,将子项添加到模型中并点击更新),当我更新一些简单的属性时,我使用 merge。我只是不认为这个解决方案很优雅。

有什么建议吗?

如何将对象从 Asp.Net MVC 4 重新附加到 Fluent NHibernate

当你从一个有状态的世界移动到一个无状态的世界时,这肯定会令人困惑。不过,在您的操作方法中,您的模式已经正确

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

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