2015-05-08 8 views
2

У меня возникла проблема с обработкой операции удаления в C#/EF. Это мой код. Я могу удалить запись, которая не представляет проблемы. У меня есть только проблемы с записью, которые используются в других записях. Итак, он бросает исключение, и пользователь видит сообщение. Но запись по-прежнему отмечена как delete, поэтому, когда я делаю еще одну SaveChanges, я получаю исключение. Можно ли изменить состояние записи так, чтобы она не удалялась?Отменить удаление структуры объекта

public void Remove() 
    { 
     try 
     { 
      Klant deleteKlant = dbContext.Klanten.First(i => i.KlantId == Klant.KlantId); 
      dbContext.Klanten.Remove(deleteKlant); 
      dbContext.SaveChanges(); 
     } 
     catch (Exception) 
     { 
      throw new ArgumentException("Wissen mislukt"); 
     } 
    } 
+0

Посмотрите здесь: http://stackoverflow.com/questions/10535377/dbcontext-and-rejectchanges Используйте метод «Отклонить изменения» из последнего ответа. –

+0

Спасибо за помощь. Он работает –

ответ

0

Во-первых, вы должны держать ваши dbContext объекты недолгим, если вообще возможно. Вы столкнетесь с огромными проблемами, если будете держать их вокруг, поскольку они содержат сильный указатель на каждый объект, созданный с их помощью.

Во-вторых, вы должны проверить, действительно ли для удаления записи, прежде чем пытаться ее удалить, таким образом, вы никогда не получите исключения в первую очередь.

+0

Как вы можете проверить, используется ли запись в базе данных? –

+0

@KrisMartele: Это зависит от того, что вы подразумеваете под «используемым». Например, если «Klant» может иметь «KlantCourse», который связывает его с объектом «Course», вам нужно будет искать объекты «KlantCourse» с соответствующими «KlantId». Это требует усилий, но позволяет очень подробные сообщения об ошибках, поскольку вы точно знаете, где используется «Клаант». – Guvante

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