我正在编写一个网络应用程序,使用带有 Razor View 的 asp.net MVC,其中进出服务器的数据由 ajax 处理并使用 KnockoutJs 映射到 UI。
我的模型是分层的并且有子对象列表。现在问题来了:
当我编辑了主要对象(已经在数据库中)——更改了一些属性,添加了一个子对象等——我应该如何在 NHibernate 中更新它?
在 Windows 应用程序中,主要对象存在于 NHibernate session 中并且可以轻松更新。在我的 webapp 中,我将 JSON 反序列化为一个"new"对象,然后需要将其重新附加到 NHibernate session 。实际上这个反序列化是由模型绑定(bind)器完成的。
有没有聪明的方法来做到这一点?我试过 Merge,但它不适用于添加的子项。
我目前的解决方案是分别处理模型的每个更改,即。当我添加一个 child 时,我通过 NHibernate 更新(通过 id 加载主模型,将 child 添加到模型并点击更新),当我更新一些简单的属性时,我使用合并。我只是觉得这个解决方案不是很优雅。
有什么建议吗?
最佳答案
当您从有状态的世界转移到无状态的世界时,肯定会感到困惑。不过,在您的操作方法中,您的模式几乎是正确的:
- 从数据库中加载对象
- 根据 View 模型对其进行更改
- 刷新 session /提交交易
如果在 session 中跟踪对象,并且您没有正确使用 Merge,则无需调用 Update 或 SaveOrUpdate。通常,您需要调用的唯一持久化方法是 Save 以使新对象持久化。
关于c# - 如何将对象从 Asp.Net MVC 4 重新附加到 Fluent NHibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19537685/