我读过很多人说模型类型不应该暴露给 View,而是应该包装在 ViewModel 类型中。有没有一些例子,我可以看到 ViewModel 和 Model 数据之间的同步是如何使用实体框架完成的。特别是,我需要一个可编辑集合的示例(例如:显示客户列表的 DataGrid 或 DataForm)。
所以,像这样
http://msdn.microsoft.com/en-us/magazine/dd419663.aspx
但具有可编辑的集合数据,而不仅仅是只读的。
我感兴趣的一个例子:
1)网格需要显示产品。显示 3 列:
- 产品代码
- 产品名称
- 产品类别
- 产品单元
Type 是一个枚举,可以说:ProductType { TypeA, TypeB }。如果您发现难以实现枚举,那么将其设置为 int,这不是问题。重要的是,如果 Product 已在其他表中用作参考,则无法更改类型。我正在使用此规则,因为您不能使用属性(数据注释)执行此操作,并且需要在 ViewModel 端完成。
产品类的每个属性都必须绑定到 CustomerViewModel 属性。您可以为代码和名称设置一些规则:
代码唯一名称:必填,MaxLength(30)
编辑:我主要关心的是我们如何在批量更新中在 ViewModel 和 EF 模型之间进行同步。一个例子是:
1) 当移除 Product 时,如果我们从 ProductViewModel 集合和 DBContext 中移除它,当用户决定取消时会发生什么(犯了一个错误或任何事情)?我们是否需要从数据库中重新加载所有 Product 并重新创建所有 ProductViewModel?
2)用户更改产品并将产品置于无效状态(请记住,对象仍然可以接受无效状态,除非我们决定将其刷新到数据库)。然后用户将光标移动到另一个产品,更改它(该产品保持有效状态),并执行保存命令。到时候我们应该怎么做?
我对所有这些问题都有自己的解决方案,但我不确定它们是否正确,是否有更好的方法,所以我向在日常工作中使用这种方法的人征求其他意见的原因。