views:

165

answers:

1

Given following ASP.NET MVC controller code:

    [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();
        }
    }

The problem is with the Entity Framework 4: the example Partner entity is mapped to a database table with it's fields NOT ALLOWED to be NULL (which is ok by design - they're required).

Unfortunately, invoking TryUpdateModel when some of the properties are nulls produces as many ConstraintExceptions what is not expected! I do expect that TryUpdateModel return false in this case.

It is ok that EF wouldn't allow setting a property's value to null if it should not be, but the TryUpdateMethod should handle that, and add the error to ModelState errors collection.

I am wrong, or somebody screwed up the implementation of TryUpdateModel method?

+2  A: 

It's not "screwed up". It's by design. My preferred way of dealing with this is to bind to an edit model rather than directly to an entity. If that's not an option for you, then you can write an associated metadata provider or initialize the properties.

Craig Stuntz