2010-05-14 3 views
1

Учитывая следующие ASP.NET MVC код контроллера:Предотвращение Ef4 ConstraintException при вызове TryUpdateModel

[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: пример Партнер объект отображается в таблице базы данных с его поля НЕ ДОПУСКАЮТСЯ NULL (это нормально по дизайну - они требуются).

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

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

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

+0

Обновление: Проблема возникает для меня только при запуске приложения mvc под VS2010 (всплывают исключения проверки EF). Это нормально на сервере производства. Кто-нибудь может помочь, как предотвратить это поведение на моей машине devel? – twk

ответ

4

Это не «привинчивается». It's by design. Мой предпочтительный способ справиться с этим заключается в привязке к модели редактирования, а не непосредственно к сущности. Если это не вариант для вас, вы можете write an associated metadata provider или инициализировать свойства.

+0

Мне было интересно, можете ли вы взглянуть на аналогичные проблемы, которые возникают у меня, пытаясь привязать к модели редактирования/dto: http://stackoverflow.com/questions/6124251/problems-mapping-a-dto-to- a-ef-4-0-entity-w-mvc2 –

+0

@kevin, мне кажется, что у вас проблема с AutoMapper, и я не могу с этим поделать. Сожалею! –

+0

Спасибо, что нашли время посмотреть. :) –

Смежные вопросы