Nhibernate ASP.NET MVC 3.0中视图模型与数据模型的同步
我有一个解决方案,它的数据后端使用Nhibernate ASP.NET MVC 3.0中视图模型与数据模型的同步,nhibernate,asp.net-mvc-3,fluent-nhibernate,Nhibernate,Asp.net Mvc 3,Fluent Nhibernate,我有一个解决方案,它的数据后端使用Fluent nHibernate,前端使用ASP.NET MVC 3.0。我原以为我很聪明,用模型-视图-视图-模型的方法解决了一些问题,但结果适得其反 这是我的模型 class Alpha { virtual Guid Id { get; set; } virtual string Name { get; set; } virtual IList<Delta> ListOfItems { get; set; } } class De
Fluent nHibernate
,前端使用ASP.NET MVC 3.0
。我原以为我很聪明,用模型-视图-视图-模型
的方法解决了一些问题,但结果适得其反
这是我的模型
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
}
阿尔法类{
虚拟Guid Id{get;set;}
虚拟字符串名称{get;set;}
虚拟IList列表项{get;set;}
}
类三角洲{
虚拟Guid Id{get;set;}
虚拟字符串名称{get;set;}
//其他一些属性
}
效果很好。这是我的AlphaViewModel
class AlphaViewModel {
string Name { get; set; }
IList<Delta> ListOfItems { get; set; }
}
类AlphaViewModel{
字符串名称{get;set;}
IList ListOfItems{get;set;}
}
我使用视图模型来避免与代理冲突。因为我知道第一个问题是“你的视图模型看起来就像你的模型,使用它没有任何意义”。这很好,但现在我的问题来了
想象一下下面的过程
- 用户通过使用AlphaViewModel创建Alpha
- 数据库保存Alpha
- 用户通过ListOfItems属性添加Delta的新实例
- 数据库保存Alpha,以及新的Delta项
- 用户编辑Alpha
- 用户删除增量的1个实例
- 数据库将保存李>
Id
我可以向ViewModel添加一个Id
,但这并不能解决所有问题。我已经了解了人们如何通过添加新项目来处理这种情况,但是我找不到任何好的解决方案来向他们展示如何删除新项目。有人能提供一些见解吗
我知道这个问题与nHibernate无关,但由于我的部分推理确实涉及nHibernate代理,我将其作为标记条的一部分,因为它可能是解决方案/问题的一部分。更好地设计表单。您没有为每个项目“删除”链接或复选框吗
(我不知道这是一个不存在的问题)从表单中删除它们不是问题-问题是当它发回控制器,与数据库存储模型同步时。我不明白为什么。
Delta
的适当视图模型将指示用户选择删除的项目(如果使用复选框)。如果您使用的是删除链接,Delta
项将通过ajax删除。这不是问题的关键。数据存储在ViewModels中,而不是原始模型中。嵌套数据也是一个ViewModel。同步嵌套数据将删除原始数据,并基于ViewModel重新创建新对象,从而导致关联问题。我不能只说Session.SaveOrUpdate(viewModel)代码>。如果我使用赋值操作符将Delta
对象分配给所有者,那么当数据库推送它通过时,它会删除以前的关联。您描述的方法只有在ViewModel与基础数据完全匹配时才有效,而它不-不应该这样。否。我是说您应该使用Id来匹配db模型和视图模型。