2013-07-25 2 views
1

Работала над этой проблемой обновления City Entity Framework немного. Возможно, один из вас может видеть, что мне не хватает.C# Entity Framework Update SaveChanges() не обновляет запись БД

Проблема в пределах части кода userEntry. Я проследил и убедился, что userEntry действительно заполнен информацией, которую я намерен обновить. Когда вызывается entities.SaveChanges();, запись не обновляется в базе данных.

  int userId; 
      using (Entities entities = new Entities()) 
      { 
       MSIFeedStoreData feedStoreEntry = entities.MSIFeedStoreDatas 
        .FirstOrDefault((d) => d.Alias == user.Alias); 

       if (Object.ReferenceEquals(feedStoreEntry, null)) 
       { 
        throw new ArgumentException("The user's alias could not be located in the feed store. The user cannot be added at this time."); 
       } 

       int feedStorePersonnelIdValue; 
       if (Int32.TryParse(feedStoreEntry.PersonellID, out feedStorePersonnelIdValue)) 
       { 
        user.EmployeeId = feedStorePersonnelIdValue; 
       } 
       else 
       { 
        throw new ApplicationException("DATABASE BUG CHECK: An entry was found in the feed store for this user but the personnel ID could not be parsed."); 
       } 

       MSIUser userEntry = entities.MSIUsers 
        .FirstOrDefault((u) => u.EmployeeID == feedStorePersonnelIdValue); 

       if (Object.ReferenceEquals(userEntry, null)) 
       { 
        userEntry = Mapper.Map<MSIUser>(user); 
        userEntry = entities.MSIUsers.Add(userEntry); 
       } 
       else 
       { 
        Mapper.DynamicMap<User, MSIUser>(user, userEntry); 
        entities.MSIUsers.Attach(userEntry); 
       } 

       userId = userEntry.MSIUser_ID; 
       entities.SaveChanges(); 
      } 

      return userId; 
     } 
+0

Вы ничего не меняете. Каковы ваши ожидаемые результаты? –

+0

'Object.ReferenceEquals (feedStoreEntry, null)' гораздо проще читать как 'feedStoreEntry == null' и делает то же самое. –

+0

Изменение находится здесь: else { Mapper.DynamicMap <Пользователь, MSIUser> (пользователь, userEntry); entity.MSIUsers.Attach (userEntry); } Существует запись пользователя, прошедшая через вызов ajax PUT. пользователь затем сопоставляется с userEntry через Mapper.DynamicMap <Пользователь, MSIUser> (пользователь, userEntry); Я проверил посредством отладки, что это происходит. –

ответ

2

Удалить звонок Attach, его уже прикрепленный к контексту.

+0

Отредактировано с учетом комментариев –

+0

Вспомнил, в чем была оригинальная проблема. 'MSIUser UserEntry = entities.MSIUsers .FirstOrDefault ((и) => u.EmployeeID == feedStorePersonnelIdValue);' первоначально была написана как 'MSIUser UserEntry = entities.MSIUsers .AsNoTracking() .FirstOrDefault ((u) => u.EmployeeID == feedStorePersonnelIdValue); ' –

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