我无法思考在 Controller 操作中重新创建数据库对象的最佳方法是什么。
我想利用 ModelBinders,因此在我的操作中我可以通过参数访问该对象,而不必重复代码以根据标识符参数从数据库获取对象。因此,我正在考虑使用一个 ModelBinder,它执行对数据访问层的调用以获取原始对象(如果数据库中不存在,则创建一个新对象),然后将任何属性绑定(bind)到数据库对象以更新它。但是我读到 ModelBinder 不应该进行数据库查询(此评论的第一条 article )。
如果 ModelBinder 不应执行数据库查询(因此只需使用 DefaultModelBinder),那么具有其他数据库对象属性的数据库对象又如何呢?这些永远不会被分配。
在用户编辑对象后保存该对象(在 View 中可编辑 1 或 2 个属性),ModelBinded 对象将丢失数据,因此按原样保存它会导致数据库中的数据被无效值覆盖,或 NOT-NULL 约束失败。
那么,从与从 View 发回的表单数据绑定(bind)的数据库中获取 Controller 操作中的对象的最佳方法是什么?
注意我使用 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");
}
关于asp.net-mvc - ASP NET MVC 中的模型绑定(bind)数据库实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/514023/