2015-11-26 3 views
0

Привет, поэтому встречайте это исключение каждый раз при вызове savechanges(). Есть еще одна публикация, в которой есть несколько ответов, но я не могу указать, какой ответ подходит для моей проблемы. Также кажется, что у каждого другое мнение об этом исключении.DbUpdateException был необработанным?

Ссылка на другую должность: [ссылка] Entity Framework: "Store update, insert, or delete statement affected an unexpected number of rows (0)."

Мой Исключение:

Необработанное исключение типа 'System.Data.Entity.Infrastructure.DbUpdateException' произошло в EntityFramework.dll

Дополнительная информация: Произошла ошибка при обновлении записей. Подробнее см. Внутреннее исключение.

Я пытаюсь сохранить почту в своем хранилище. Я использую рамку 6.1.3 сущности и SQL-сервер 2014.

Это мой метод, который хранит почту:

public int StoreMail(PhishingMail PhishingMail) 
{ 
    using (var phishingMailStorage = new PhishFinderDBModel()) 
    { 
     try 
     { 
      //// var manager = ((IObjectContextAdapter)phishingMailStorage).ObjectContext.ObjectStateManager; 
      //// phishingMailStorage.PhishingMail.Attach(PhishingMail); 
      phishingMailStorage.Entry(PhishingMail).State = PhishingMail.PhishingMailId == 0 ? EntityState.Added : EntityState.Modified; 
      phishingMailStorage.SaveChanges(); 

      //// manager.ChangeObjectState(PhishingMail, EntityState.Modified); 
      //// phishingMailStorage.SaveChanges(); 

      Console.WriteLine("Het is gelukt"); 
     } 
     catch (OptimisticConcurrencyException) 
     { 
      var ctx = ((IObjectContextAdapter)phishingMailStorage).ObjectContext; 

      ctx.Refresh(RefreshMode.ClientWins, phishingMailStorage.PhishingMail); 
      phishingMailStorage.SaveChanges(); 
     } 
    } 

    return PhishingMail.PhishingMailId; 
} 

Это мой метод получает письмо, что делает работу:

public List<PhishingMail> GetEmails() 
{ 
    phishingMailList = new List<PhishingMail>(); 
    FolderId InboxId = new FolderId(WellKnownFolderName.Inbox, "******@******.nl"); 
    FindItemsResults<Item> findResults = service.FindItems(InboxId, new ItemView(20)); 

    foreach (Item phishingmail in findResults.Items) 
    { 
     if (!((EmailMessage)phishingmail).IsRead) 
     { 
      /// ((EmailMessage)phishingmail).IsRead = true; 
      ((EmailMessage)phishingmail).Update(ConflictResolutionMode.AutoResolve); 
     } 

     PhishingMail mail = MailMapper.Map((EmailMessage)phishingmail); 

     //// ((EmailMessage)phishingmail).Load(new PropertySet(BasePropertySet.IdOnly, EmailMessageSchema.IsRead)); 
     phishingMailList.Add(mail); 

     /// Console.WriteLine(mail.Type); 
    } 

    return phishingMailList; 
} 

Почему savechanges() не работает и как я могу заставить его работать?

спасибо.

+0

Какая строка генерирует исключение и что находится во внутреннем исключении? –

+0

выглядит так, как будто вы захотите поймать 'DbUpdateException' и просмотреть сведения об исключении, чтобы выяснить, что происходит. – user1666620

ответ

0

напишите свой db.SaveChanges(); метод внутри блока try. Он скажет вам точную проблему

try 
{ 
    db.SaveChanges(); 
} 
catch (System.Data.Entity.Validation.DbEntityValidationException dbEx) 
{ 
    Exception raise = dbEx; 
    foreach (var validationErrors in dbEx.EntityValidationErrors) 
    { 
     foreach (var validationError in validationErrors.ValidationErrors) 
     { 
       string message = string.Format("{0}:{1}", 
       validationErrors.Entry.Entity.ToString(), 
       validationError.ErrorMessage); 

       raise = new InvalidOperationException(message, raise); 
     } 
     } 
     throw raise; 
}