Ошибка ложного дубликата ключа в приложении Entity Framework - PullRequest
3 голосов
/ 07 июня 2010

У меня есть приложение ASP.NET, использующее модель структуры сущностей. В процедуре импорта с приведенным ниже кодом я получаю исключение «Невозможно вставить дубликат ключа» для AccountNum при вызове SaveChanges, но когда выполнение останавливается для исключения, я могу запросить базу данных для явно дублированного поля, и нет предыдущая запись существует.

        using (var ents = new PvmmsEntities())
        {
            foreach (DataRow row in importedResources.Rows)
            {
                var empCode = row["EmployeeCode"].ToString();
                try
                {
                    var resource = ents.ActivationResources.FirstOrDefault(rs => rs.EmployeeCode == empCode);
                    if (resource == null)
                    {
                        resource = new ActivationResources();
                        resource.EmployeeCode = empCode;
                        ents.AddToActivationResources(resource);
                    }
                    resource.AccountNum = row["AccountNum"].ToString();
                    ents.SaveChanges(true);
                } catch(Exception ex)
                {
                }
            }
        }

UPDATE: С сотрудником 1546 я ловлю действительное исключение дубликата ключа; у него есть дубликат банковского счета. Затем следующий сотрудник - 1548 (1547 действительно пропал без вести). 1548 имеет уникальный банковский счет, но для 1548 я получаю исключение дубликата ключа в SaveChanges. Профиль показывает, что SaveChanges все еще пытается вставить 1546, который на самом деле все еще имеет дубликат банковского счета.

1 Ответ

0 голосов
/ 07 июня 2010

Ваш оригинальный объект (объект с «настоящей» ошибкой-дубликатом) все еще находится в контексте. Выполнение SaveChanges после добавления «хорошего» объекта позже попытается сохранить оба объекта. Вы должны удалить «плохой» объект, который вы добавили в контекст или , чтобы создать новый контекст без добавления «плохого» объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...