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

标签 c# asp.net-mvc jquery nhibernate

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

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

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

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

有没有聪明的方法来做到这一点?我试过 Merge,但它不适用于添加的子项。

我目前的解决方案是分别处理模型的每个更改,即。当我添加一个 child 时,我通过 NHibernate 更新(通过 id 加载主模型,将 child 添加到模型并点击更新),当我更新一些简单的属性时,我使用合并。我只是觉得这个解决方案不是很优雅。

有什么建议吗?

最佳答案

当您从有状态的世界转移到无状态的世界时,肯定会感到困惑。不过,在您的操作方法中,您的模式几乎是正确的:

  1. 从数据库中加载对象
  2. 根据 View 模型对其进行更改
  3. 刷新 session /提交交易

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

关于c# - 如何将对象从 Asp.Net MVC 4 重新附加到 Fluent NHibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19537685/

相关文章:

c# - Unity - 如何将运行时源添加到 ParentConstraint

c# - Owin Authentication.SignIn 不工作

asp.net-mvc - 将 MyDbContext 与 IdentityDbContext 合并

jquery - 如何更改日期选择器颜色?

javascript - 使用 jQuery 存储单选按钮输入的数值

javascript - 发送数据在接收时改变

c# - 如何使用 Naudio 将 WAV 流转换为 MP3?

c# - C# 7.0 中的 Ref 返回限制

c# - 以编程方式编译和运行 C# 代码

asp.net-mvc - 在 View 模型中检索数组