调用TryUpdateModel时防止EF4 ConstraintException

时间:2010-05-14 21:09:20

标签: asp.net-mvc entity-framework error-handling

给出以下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方法的实现?

1 个答案:

答案 0 :(得分:4)

这不是“搞砸了”。 It's by design。处理此问题的首选方法是绑定到编辑模型而不是直接绑定到实体。如果这不是您的选择,那么您可以write an associated metadata provider或初始化属性。