gpt4 book ai didi

asp.net-mvc - ASP NET MVC 中的模型绑定(bind)数据库实体

转载 作者:行者123 更新时间:2023-12-02 19:19:53 26 4
gpt4 key购买 nike

我无法思考在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com