When using UpdateModel with LINQ to Entities in ASP.NET MVC 2, "The model of type 'XYZ' could not be updated" (.NET 3.5)

asp.net-mvc-2 c# entity-framework


I have a model set up using LINQ to Entities and have code working that adds to the database as expected. However, I can't get UpdateModel to work when I am using .NET 3.5.

public ActionResult Edit(Site.Models.XYZ xyz)
        var original = db.XYZ.First(u => u.id == xyz.id);

        return RedirectToAction("Index");
    catch (Exception ex)
        return View("Error");

This results in the following exception:

System.InvalidOperationException was caught
  Message=The model of type 'Site.Models.XYZ' could not be updated.
       at System.Web.Mvc.Controller.UpdateModel[TModel](TModel model, String prefix, String[] includeProperties, String[] excludeProperties, IValueProvider valueProvider)
       at System.Web.Mvc.Controller.UpdateModel[TModel](TModel model, String prefix)
       at Site.Controllers.XYZController.Edit(Site.Models.XYZ xyz) in D:***.cs:line 81

If I do UpdateModel(xyz) the exception does not occur, but the data does not save either.

How can I get UpdateModel to work with this (without updating to .NET 4.0), why can't it be updated (exception is not helpful as there is no inner exception)?

9/24/2010 1:47:07 PM

Accepted Answer

Managed to solve the problem. Can be done in one of two ways:



db.ApplyPropertyChanges(original.EntityKey.EntitySetName, xyz)

No idea why TryUpdateModel will work but UpdateModel won't. Maybe just a bug in .NET 3.5.

9/24/2010 2:21:07 PM

Popular Answer

what I do in my MVC projects is grab the source code for the DefaultModelBinder from Codeplex and paste it into a new class in your project, like MyDefaultModelBinder. then register that model binder in your global.asax:

ModelBinders.Binders.DefaultBinder = new MyDefaultModelBinder();

this lets you set a breakpoint in the BindModel method, and you can figure out why it's not able to bind.

Related Questions


Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow