用户代码未处理的 DbEntityValidationException

DbEntityValidationException unhandled by user code

我正在制作一个 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 需要连接到事件模型来验证,但我想我会问。

谢谢大家。

根据我的经验,DbEntityValidationException 会在出现类似如下问题时抛出:

  • 一个或多个实体中的数据大小大于数据库中接受的数据大小。例如,如果在你的数据库中你有一个 table Person with Name Varchar(20) 而在你试图保存的实体中你有一个超过 20 的名字,异常将被抛出

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

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

如何避免这个异常? 在将数据保存到数据库之前验证您的数据。 看起来你是用 ModelState.IsValid 来做的,但我们没有看到验证过程的代码。 检查验证是否正确,符合您的数据库规则。

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