加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – ASPNET MVC中的Modelbinding数据库实体

发布时间:2020-12-16 06:56:01 所属栏目:asp.Net 来源:网络整理
导读:我无法想到在控制器Action中重新创建数据库对象的最佳方法. 我想使用ModelBinder,因此在我的操作中,我可以通过参数访问对象,而不必重复代码以基于标识符参数从数据库中获取对象.所以我想让一个ModelBinder执行对dataaccess层的调用以获取原始对象(或者如果数
我无法想到在控制器Action中重新创建数据库对象的最佳方法.

我想使用ModelBinder,因此在我的操作中,我可以通过参数访问对象,而不必重复代码以基于标识符参数从数据库中获取对象.所以我想让一个ModelBinder执行对dataaccess层的调用以获取原始对象(或者如果数据库中不存在则创建一个新对象),然后将任何属性绑定到数据库对象以更新它.但是我已经读过ModelBinders不应该进行数据库查询(这个article的第一条评论).

如果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");
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读