在ASP.NET MVC 3.0中将视图模型与数据模型同步

时间:2011-05-25 12:49:27

标签: nhibernate asp.net-mvc-3 fluent-nhibernate

我有一个使用Fluent nHibernate作为其数据后端的解决方案,我使用ASP.NET MVC 3.0作为我的前端。我认为我使用Model View ViewModel方法解决问题很聪明,但它对我有点适用...

这是我的模特。

class Alpha {
  virtual Guid Id { get; set; }
  virtual string Name { get; set; }
  virtual IList<Delta> ListOfItems { get; set; }
}

class Delta {
  virtual Guid Id { get; set; }
  virtual string Name { get; set; }
  // some other properties
}

效果很好。现在这是我的AlphaViewModel

class AlphaViewModel {
  string Name { get; set; }
  IList<Delta> ListOfItems { get; set; }
}

我正在使用视图模型以避免与代理发生冲突。因为我知道第一个问题是“你的视图模型看起来就像你的模型,所以没有必要使用它”。这很好,但现在我的问题来了。

想象一下以下过程..

  • 用户通过 AlphaViewModel
  • 创建 Alpha
  • 数据库保存 Alpha
  • 用户通过 ListOfItems 属性添加 Delta 的新实例
  • 数据库保存 Alpha 以及新的 Delta 项目。
  • 用户编辑 Alpha
  • 用户删除 Delta
  • 的1个实例
  • 数据库去保存......

现在我们遇到了一个新问题。数据库并不真正知道它正在发生变化的Id

我可以向ViewModel添加Id,但这并不能解决所有问题。我已经看到人们如何通过添加新项目来处理这种情况,但我找不到任何能够向他们展示删除的好解决方案。任何人都可以提供一些见解吗?

我知道这个问题与nHibernate无关,但由于我的部分推理确实涉及nHibernate代理,我将其作为标签条的一部分包含在内,因为它可能是解决方案/问题的一部分。

1 个答案:

答案 0 :(得分:1)

更好地设计表单。您是否为每个项目都有“删除”链接或复选框?

(imho这是一个不存在的问题)