如何使用实体框架更新数据库中的记录时覆盖模型验证
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()之前;如果有人有同样的问题,我会为我工作。
答案
我将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();
}
}
以上是关于如何使用实体框架更新数据库中的记录时覆盖模型验证的主要内容,如果未能解决你的问题,请参考以下文章