给出以下ASP.NET MVC控制器代码:
[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。
如果不应该将属性的值设置为null,那么EF是不行的,但是TryUpdateMethod应该处理它,并将错误添加到ModelState错误集合中。
我错了,还是有人搞砸了TryUpdateModel方法的实现?
答案 0 :(得分:4)
这不是“搞砸了”。 It's by design。处理此问题的首选方法是绑定到编辑模型而不是直接绑定到实体。如果这不是您的选择,那么您可以write an associated metadata provider或初始化属性。