Предотвращение EF4 ConstraintException при вызове TryUpdateModel - PullRequest
1 голос
/ 15 мая 2010

Учитывая следующий код контроллера 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();
        }
    }

Проблема в Entity Framework 4: пример сущности Partner сопоставлен с таблицей базы данных с полями, которые НЕ ДОПУСКАЮТСЯ, чтобы быть НЕДЕЙСТВИТЕЛЬНЫМИ (что в порядке - они обязательны).

К сожалению, при вызове TryUpdateModel, когда некоторые свойства имеют значение NULL, выдается столько же исключений ConstraintException, сколько и не ожидается! Я ожидаю, что TryUpdateModel вернет false в этом случае.

Это нормально, что EF не позволит установить значение свойства равным нулю, если оно не должно быть, но TryUpdateMethod должен обработать это и добавить ошибку в коллекцию ошибок ModelState.

Я ошибаюсь, или кто-то испортил реализацию метода TryUpdateModel?

1 Ответ

4 голосов
/ 15 мая 2010

Это не "облажался". Это дизайн . Мой предпочтительный способ справиться с этим - привязать модель редактирования, а не напрямую к объекту. Если это не вариант, вы можете написать связанный поставщик метаданных или инициализировать свойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...