![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
strS |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 19.2.2009 Репутация: нет Всего: нет |
Добрый день!
Есть код добавления новых строк в базу. Периодически при вызове метода SaveChanges() возникает ситуация, когда данные не могут быть сохранены (срабатывает проверка на уникальные поля, ругается что хочу добавить дубли). Вопрос - можно ли как-то обработать это исключение, чтобы после добавления 1000 строк и вызова метода SaveChanges(), при сохранения например 500й строки, вылетела ошибка, а остальные строки сохранились и программа продолжала работать дальше? Я понимаю что можно сохранять каждую строку по отдельности и обернуть try/catche, только этот способ занимает больше времени.
|
|||
|
||||
AntiInt |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 15.5.2009 Репутация: нет Всего: нет |
Если у Вас не отсоединенная модель и вы в пределах контекста, то можно проверить есть ли у же такой ключ в контексте.
|
|||
|
||||
strS |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 19.2.2009 Репутация: нет Всего: нет |
Данные проверки опять же займут кучу времени Я тут глянул, выпадает System.Data.SqlClient.SqlException Может можно его как-то переписать, чтобы он в лог писал о ошибке, а запись не прерывал? Или я чушь пишу?)))) |
|||
|
||||
strS |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 19.2.2009 Репутация: нет Всего: нет |
Мне мысля пришла в голову!)
А что если при возникновении ошибки (при сохранении 1000 строк), постараться пробежаться по каждой строке и записывать ее по-отдельности? Только теперь нужно узнать, где EF хранит список изменений. Может кто подсказать? |
|||
|
||||
AntiInt |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 15.5.2009 Репутация: нет Всего: нет |
вот Вам код, тут по ключу я проверяю есть ли в контексте уже такая запись.
Вам надо этот подход под свои нужны модифицировать.
|
|||
|
||||
strS |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 19.2.2009 Репутация: нет Всего: нет |
AntiInt, спасибо за код, но это не совсем то что мне нужно
Вот я тут немного покопался и сделал так, но у меня постоянно вылетает ошибка с Entry. Поможете? В базе уже есть запись с полями MANDT = "900", DOKAR = "B2X". Поля уникальные Задача в том чтобы при возникновении ошибки обработать набор данных построчно и выявить где именно произошла ошибка, сохранив остальные строки
|
|||
|
||||
AntiInt |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 15.5.2009 Репутация: нет Всего: нет |
Давайте попробуем так это псевдокод(компилятора нет под рукой)
var entities= db1.Entities;//Entities - это метод, который возвращает все Ваши ентити foreach(var insEntity in EntityForInsertion) { if(!entities.Any(insEntity)) { db1.Attach(insEntity); } else { тут обрабатываем то, что уже существует } } db1.SaveChanges(); |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |