用户代码未处理DbEntityValidationException

时间:2015-10-13 21:19:45

标签: c# database validation savechanges

我正在创建一个MVC .Net应用程序,我无法理解为什么我的db.SaveChanges();无法正常工作并创建验证错误。我一直在查看堆栈,但我无法找到这个问题的可靠解释。

这是我的控制者:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include"Id, EventTitle, EventSubTitle, EventAddress,EventCity,EventState,EventZip,EventCreator,EventTime,EventDiscription")] Event @event, AspNetUser @user)
{
if (ModelState.IsValid)
{
@event.Id = Guid.NewGuid();
@event.EventCreator = @user.Id;
db.Events.Add(@event);
db.SaveChanges();
return RedirectToAction("Index");
}

我的想法是user.Id需要连接到Event模型才能验证,但我想我会问。

谢谢你们。

1 个答案:

答案 0 :(得分:1)

当遇到类似以下问题时,会抛出DbEntityValidationException以获取我的经验:

  • 一个或多个实体内的数据大小大于数据库中接受的数据大小。例如,如果在您的数据库中有一个名为Varchar(20)的Person表,并且在您尝试保存的实体中,您的名称长于20,则会抛出异常

  • 您正在尝试添加一个已存在主键的实体

  • 违反外键或与您的数据库相关的其他内容

如何避免此异常? 在将数据保存到数据库之前验证您的数据。 您似乎正在使用ModelState.IsValid,但我们没有看到验证过程的代码。 检查验证是否正确,并与数据库规则一致。

注意:在专业应用程序中,通常不直接从控制器调用DbContext。