Я пытаюсь узнать, как использовать инфраструктуру Entity, но я попал в проблему, которую я не могу решить. Что я делаю, так это то, что я просматриваю список фильмов, которые у меня есть, и вставляет каждый из них в простую базу данных.InvalidOperationException при вызове SaveChanges в .NET Entity framework
Это код, я использую
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 может находиться в несогласованном состоянии. Внутреннее исключение message: AcceptChanges не может продолжить , потому что значения ключа объекта конфликтуют с другим объектом в объекте ObjectStateManager. Убедитесь, что значения ключа уникальны перед вызовом AcceptChanges.
Я не смог выяснить, что вызывает эту проблему. Моя таблица базы данных содержит три столбца
Id ИНТ автоинкремент
Имя NCHAR (255)
Путь NCHAR (255)
Обновление: Я проверил файл EDMX и раздел SSDL имеют StoreGeneratedPattern = "идентичность", как предложил. Я также следил за сообщением в блоге и пытался добавить ClientAutoGenerated = "true" и StoreGenerated = "true" в CSDL, как там было предложено. Это привело к ошибкам компиляции (ошибка 5: атрибут «ClientAutoGenerated» не разрешен.). Поскольку сообщение в блоге с 2006 года, и у него есть ссылка на последующий пост, я предполагаю, что он был изменен.
Тем не менее, я не могу прочитать пост последующего сообщения, поскольку для него требуется учетная запись msdn.
Ответ для меня заключался в том, чтобы установить «StoreGeneratedPattern =» Identity »на свойство, [подробнее см. Здесь] (http://www.matthewedmondson.info/2012/09/entity-framework-and. HTML). –
Также это происходит, когда вы используете сопоставления SotredProcedure для INSERT, UPDATE, DELETE и вашего ID-ключа - это вычисленный ключ внутри SP. –