InvalidOperationException при вызове SaveChanges в .NET Entity Framework

.net c# entity-framework

Вопрос

Я пытаюсь научиться использовать платформу Entity, но столкнулся с проблемой, которую не могу решить. Что я делаю, так это то, что я просматриваю список моих фильмов и вставляю каждый в простую базу данных.

Это код, который я использую

private void AddMovies(DirectoryInfo dir)
{
    MovieEntities db = new MovieEntities();
    foreach (DirectoryInfo d in dir.GetDirectories())
    {
        Movie m = new Movie { Name = d.Name, Path = dir.FullName };
        db.AddToMovies(movie);
    }
    db.SaveChanges();
}

Когда я делаю это, я получаю исключение в db.SaveChanges (), который читает.

Изменения в базе данных были успешно зафиксированы, но при обновлении контекста объекта произошла ошибка. ObjectContext может быть в несовместимом состоянии. Внутреннее сообщение об исключении: AcceptChanges не может продолжаться, потому что значения ключа объекта конфликтуют с другим объектом в ObjectStateManager. Убедитесь, что значения ключей являются уникальными, прежде чем вызывать AcceptChanges.

Я не смог выяснить, что является причиной этой проблемы. Моя таблица базы данных содержит три столбца
Id int autoincrement
Имя нчар (255)
Путь нчар (255)

Обновление: я проверил мой файл edmx и раздел SSDL имеет StoreGeneratedPattern = "Identity", как предложено. Я также последовал за публикацией в блоге и попытался добавить ClientAutoGenerated = "true" и StoreGenerated = "true" в CSDL, как это предлагается там. Это приводило к ошибкам компиляции (ошибка 5: атрибут «ClientAutoGenerated» недопустим). Так как сообщение в блоге с 2006 года и имеет ссылку на последующее сообщение, я предполагаю, что оно было изменено.

Тем не менее, я не могу прочитать последующее сообщение, так как, похоже, требуется учетная запись msdn.

Принятый ответ

Я нашел решение для этого.

Случилось так, что когда я создал свою таблицу, я забыл добавить первичный ключ и установить для свойства (Is Identity) значение yes. Затем я создал свою модель сущности и получил эту ошибку.

Я вернулся и исправил свою таблицу базы данных, но у меня все еще было странное исключение. В итоге проблема была решена путем удаления сущности и ее повторного создания после исправления таблицы.

Нет больше исключений :)


Популярные ответы

в прошлый раз я попробовал следующий код, и я сказал, что он работает нормально

bs.SuspendBinding();
Data.SaveChanges();
bs.ResumeBinding();

Важные вещи, о которых я хочу рассказать вам сегодня:

1 - если мы используем приведенный выше код для приостановки привязки, нам нужно сделать больше кода, чтобы исправить множество сценариев, таких как потерянный индекс в коллекциях и привязки основной детали

2 - если мы будем использовать следующий код вместо приведенного выше кода, мы увидим, что исключение исчезло, и все будет хорошо, когда нет необходимости писать больше кода

        Data.SaveChanges(System.Data.Objects.SaveOptions.None);

Я надеюсь, что это решает ваши подобные проблемы

Спасибо друзья



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow