| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > EF 5 обработка ошибки |
| Автор: strS 2.12.2013, 12:25 | ||
| Добрый день! Есть код добавления новых строк в базу. Периодически при вызове метода SaveChanges() возникает ситуация, когда данные не могут быть сохранены (срабатывает проверка на уникальные поля, ругается что хочу добавить дубли). Вопрос - можно ли как-то обработать это исключение, чтобы после добавления 1000 строк и вызова метода SaveChanges(), при сохранения например 500й строки, вылетела ошибка, а остальные строки сохранились и программа продолжала работать дальше? Я понимаю что можно сохранять каждую строку по отдельности и обернуть try/catche, только этот способ занимает больше времени.
|
| Автор: AntiInt 2.12.2013, 17:33 |
| Если у Вас не отсоединенная модель и вы в пределах контекста, то можно проверить есть ли у же такой ключ в контексте. |
| Автор: strS 3.12.2013, 06:44 | ||
Данные проверки опять же займут кучу времени Я тут глянул, выпадает System.Data.SqlClient.SqlException Может можно его как-то переписать, чтобы он в лог писал о ошибке, а запись не прерывал? Или я чушь пишу?)))) |
| Автор: strS 3.12.2013, 10:10 |
| Мне мысля пришла в голову!) А что если при возникновении ошибки (при сохранении 1000 строк), постараться пробежаться по каждой строке и записывать ее по-отдельности? Только теперь нужно узнать, где EF хранит список изменений. Может кто подсказать? |
| Автор: AntiInt 3.12.2013, 11:12 | ||
| вот Вам код, тут по ключу я проверяю есть ли в контексте уже такая запись. Вам надо этот подход под свои нужны модифицировать.
|
| Автор: strS 6.12.2013, 09:59 | ||
| AntiInt, спасибо за код, но это не совсем то что мне нужно Вот я тут немного покопался и сделал так, но у меня постоянно вылетает ошибка с Entry. Поможете? В базе уже есть запись с полями MANDT = "900", DOKAR = "B2X". Поля уникальные Задача в том чтобы при возникновении ошибки обработать набор данных построчно и выявить где именно произошла ошибка, сохранив остальные строки
|
| Автор: AntiInt 9.12.2013, 08:24 |
| Давайте попробуем так это псевдокод(компилятора нет под рукой) var entities= db1.Entities;//Entities - это метод, который возвращает все Ваши ентити foreach(var insEntity in EntityForInsertion) { if(!entities.Any(insEntity)) { db1.Attach(insEntity); } else { тут обрабатываем то, что уже существует } } db1.SaveChanges(); |