时考虑以下ASP.NET MVC控制器代码:防止EF4 ConstraintException调用TryUpdateModel
[HttpPost] public ActionResult Create(FormCollection collection) { string[] whitelist = new []{ "CompanyName", "Address1", "Address2", ... }; Partner newPartner = new Partner(); if (TryUpdateModel(newPartner, whitelist, collection)) { var db = new mainEntities(); db.Partners.AddObject(newPartner); db.SaveChanges(); return RedirectToAction("Details/" + newPartner.ID); } else { return View(); } }
问题是与实体框架4:例如合伙实体映射到数据库表与它的字段不允许为NULL(这可以通过设计确定 - 它们是必需的)。
不幸的是,当一些属性为空时调用TryUpdateModel会产生尽可能多的ConstraintExceptions不期望的事情!我确实希望TryUpdateModel在这种情况下返回false。
如果不应该,EF不允许将属性值设置为null,但TryUpdateMethod应该处理该属性,并将该错误添加到ModelState错误集合中。
我错了,或者有人搞砸了TryUpdateModel方法的实现?
更新:只有在VS2010下运行mvc应用程序(弹出EF验证例外)时,该问题才会显示。在生产服务器上可以。 任何人都可以帮助如何在我的开发机器上防止这种行为? – twk 2010-05-15 09:54:18