如何使用实体框架更新数据库中的记录时覆盖模型验证

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用实体框架更新数据库中的记录时覆盖模型验证相关的知识,希望对你有一定的参考价值。

我试图使用实体框架从我的数据库更新记录 问题是,当我尝试更新记录时,我得到了dbEntity验证错误,因为我在我的模型上有[EmailAddress]验证,当我想要更新某些内容时,是否还有覆盖此验证?

型号:

public partial class T
{
    public int Id { get; set; }

    [Required]
    public string name { get; set; }
    public string lastname { get; set; }

    [Required]
    [EmailAddress]
    public string email { get; set; }
}

这是更新:

[HttpPost]
    public ActionResult UpdateR(int id, FormCollection collection)
    {
        try
        {
            var user = new T() { Id = id, email = "Deactivated"};
            using (var db = new Database1Entities())
            {
                db.T.Attach(user);
                db.Entry(user).Property(x => x.email).IsModified = true;
                db.SaveChanges();

                return RedirectToAction("Index");
            }


        }
        catch (Exception e)
        {
            ViewBag.message = e.ToString();
            return View();
        }
    }

和观点:

  <table id="mytable" class="table table-bordered table-striped">
  <thead>
  <tr>
      <th>@html.DisplayNameFor(item => item.name)</th>
      <th>@Html.DisplayNameFor(item => item.lastname)</th>
      <th>@Html.DisplayNameFor(item => item.email)</th>
  </tr>
  </thead>
  <tbody>
  @foreach (var item in Model)
  {
      <tr>
          <td>@Html.DisplayFor(mitem => item.name)</td>
          <td>@Html.DisplayFor(mitem => item.lastname)</td>
          <td>@Html.DisplayFor(mitem => item.email)</td>
          <td>@Html.ActionLink("Update", "UpdateR", new { id = item.Id})
</td>
      </tr>
  }
  </tbody>
</table>

编辑:

db.Configuration.ValidateOnSaveEnabled = false;

就在db.SaveChanges()之前;如果有人有同样的问题,我会为我工作。

Ref

答案

我将DbContextConfiguration.ValidateOnSaveEnabled Property改为false。

[HttpPost]
public ActionResult UpdateR(int id, FormCollection collection)
{
    try
    {
        var user = new T() { Id = id, email = "Deactivated"};
        using (var db = new Database1Entities())
        {
            db.Configuration.ValidateOnSaveEnabled = false;
            db.T.Attach(user);
            db.Entry(user).Property(x => x.email).IsModified = true;
            db.SaveChanges();

            return RedirectToAction("Index");
        }


    }
    catch (Exception e)
    {
        ViewBag.message = e.ToString();
        return View();
    }
}

以上是关于如何使用实体框架更新数据库中的记录时覆盖模型验证的主要内容,如果未能解决你的问题,请参考以下文章

实体框架:开发不执行更新和删除的模型

更新存储过程实体框架抛出“验证FunctionImport名称是唯一的”错误

视图和实体框架

将数据插入数据库时​​实体框架中的验证错误

实体框架模型中的集合未更新

ASP MVC 数据库优先 - 刷新 EF 实体框架时丢失所有验证