2012-01-02 5 views
0

Я пытаюсь обновить объект, используя первый подход Entity Framework 4.1 Code. Я пользуюсь следующим кодом:Обновление объекта с использованием Entity Framework 4.1

public void UpdatePersonEmail(long registryID, string Email) { 
      var Person = context.Persons.FirstOrDefault(p => p.RegistryID == registryID); 
      // Person = person; 
      Person.Email = Email; 
      try 
      { 
       context.Persons.Attach(Person); 
       context.Entry(Person).State = System.Data.EntityState.Modified; 
       context.SaveChanges(); 
      } 
      catch (DbEntityValidationException dbEx) 
      { 
       foreach (var validationErrors in dbEx.EntityValidationErrors) 
       { 
        foreach (var validationError in validationErrors.ValidationErrors) 
        { 
         Trace.TraceInformation("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage); 
        } 
       } 
      } 
     } 

Код не содержит ошибок, но сущность не обновляется. Я просто хочу обновить адрес электронной почты.

Пожалуйста, предложите мне решение.

+1

Попробуйте запустить sql-трассировку с БД, чтобы увидеть, что действительно отправлено. Кроме того, вам не нужно прикладывать его к контексту, поскольку у вас уже есть объект Person из контекста. EF выяснит, что изменилось. – ericvg

+2

Я вижу, что нет ошибки с 'context.SaveChanges();' все изменения сохраняются. Попробуйте удалить строку 'context.Entry (Person) .State = System.Data.EntityState.Modified;'. Я не вижу смысла в этой линии. – rekire

+0

@rekire Я удалил его, но все же он не работает –

ответ

0

Каждый раз, когда вы делаете FirstOrDefault, вы должны проверить, не судится ли объект. Попробуйте следующее:

public void UpdatePersonEmail(long registryID, string Email) 
{ 
    var person = context.Persons.FirstOrDefault(p => p.RegistryID == registryID); 
    try 
    { 
     person.Email = Email; 
     context.SaveChanges(); 
    } 
    catch (DbEntityValidationException dbEx) 
    { 
     foreach (var validationErrors in dbEx.EntityValidationErrors) 
     { 
      foreach (var validationError in validationErrors.ValidationErrors) 
      { 
       Trace.TraceInformation("Property: {0} Error: {1}", 
        validationError.PropertyName, validationError.ErrorMessage); 
      } 
     } 
    } 
    catch (NullReferenceException nrEx) 
    { 
     Trace.TraceInformation("person was null."); 
    } 
} 
Смежные вопросы