【发布时间】:2009-02-05 00:34:10
【问题描述】:
我很难想出最好的方法是在控制器 Action 中重新创建数据库对象。
我想使用 ModelBinders,因此在我的操作中,我可以通过参数访问对象,而不必重复代码以根据标识符参数从数据库中获取对象。所以我想有一个 ModelBinder 调用数据访问层来获取原始对象(如果数据库中不存在,则创建一个新对象),然后将任何属性绑定到数据库对象以更新它。但是我读到 ModelBinders 不应该进行数据库查询(article 的第一条评论)。
如果 ModelBinder 不应该执行数据库查询(所以只使用 DefaultModelBinder),那么具有其他 db 对象属性的数据库对象呢?这些永远不会被分配。
在用户编辑后保存对象(视图中可编辑 1 或 2 个属性)ModelBinded 对象将丢失数据,因此按原样保存会导致数据库中的数据被无效值覆盖,或 NOT-NULL 约束失败。
那么,从与从视图回发的表单数据绑定的数据库中获取控制器操作中的对象的最佳方法是什么?
注意我正在使用 NHibernate。
【问题讨论】:
-
我和你的情况完全相同(也使用 NH)。我已经实现了一个模型绑定器以避免代码重复。您对从活页夹访问数据库的结论是什么?
-
最后我反对在活页夹中访问数据库。我的视图模型现在与我的域模型分开。直接绑定到您的域模型存在问题(nhibernate 将在请求结束时用可能无效的数据刷新绑定的对象,除非您创建一个新会话,重新获取您所追求的对象,否则您最终会使用整个请求中的无效绑定对象)。
标签: asp.net-mvc nhibernate model-view-controller modelbinders