我正在创建一个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模型才能验证,但我想我会问。
谢谢你们。
答案 0 :(得分:1)
当遇到类似以下问题时,会抛出DbEntityValidationException以获取我的经验:
一个或多个实体内的数据大小大于数据库中接受的数据大小。例如,如果在您的数据库中有一个名为Varchar(20)的Person表,并且在您尝试保存的实体中,您的名称长于20,则会抛出异常
您正在尝试添加一个已存在主键的实体
违反外键或与您的数据库相关的其他内容
如何避免此异常? 在将数据保存到数据库之前验证您的数据。 您似乎正在使用ModelState.IsValid,但我们没有看到验证过程的代码。 检查验证是否正确,并与数据库规则一致。
注意:在专业应用程序中,通常不直接从控制器调用DbContext。