Luk*_*ith 5 nhibernate model-view-controller asp.net-mvc modelbinders
我无法想到在控制器Action中重新创建数据库对象的最佳方法.
我想使用ModelBinder,因此在我的操作中,我可以通过参数访问对象,而不必重复代码以基于标识符参数从数据库中获取对象.所以我想让一个ModelBinder执行对dataaccess层的调用以获取原始对象(或者如果数据库中不存在则创建一个新对象),然后将任何属性绑定到数据库对象以更新它.但是我读过ModelBinder不应该进行数据库查询(本文的第一条评论).
如果ModelBinder不应该执行数据库查询(所以只使用DefaultModelBinder),那么具有其他db对象属性的数据库对象呢?永远不会分配这些.
在用户编辑对象后保存对象(在视图中可以编辑1或2个属性),ModelBinded对象将丢失数据,因此保存它将导致数据库中的数据被无效值覆盖,或者不是 - NULL约束失败.
那么,最好的方法是从数据库中获取控制器操作中的对象,该数据库与从视图中发回的表单数据绑定在一起?
请注意我使用NHibernate.
我从数据库获取模型对象,然后在该对象上使用 UpdateModel(或 TryUpdateModel)来更新表单参数中的值。
public ActionResult Update( int id )
{
DataContext dc = new DataContext();
MyModel model = dc.MyModels.Where( m => m.ID == id ).SingleOrDefault();
string[] whitelist = new string[] { "Name", "Property1", "Property2" };
if (!TryUpdateModel( model, whitelist )) {
... model error handling...
return View("Edit");
}
ViewData.Model = model;
return View("Show");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1467 次 |
| 最近记录: |