Нарушение ограничения ПЕРВИЧНОГО КЛЮЧА для связанной записи при добавлении записи с использованием entity framework

#entity-framework #entity-framework-4 #constraints #primary-key

#entity-framework #entity-framework-4 #ограничения #первичный ключ

Вопрос:

У меня есть таблица с именем farmers . У каждого фермера указана страна, которая является обязательной.

Когда я добавляю нового фермера в базу данных с использованием antity framework, я получаю нарушение в таблице country. Похоже, entity Framework хочет добавить страну в таблицу country, но мне нужен только guid в моей таблице farmer:

Нарушение ограничения ПЕРВИЧНОГО КЛЮЧА ‘PK_Country’. Не удается вставить дубликат ключа в object ‘dbo.Страна’. Выполнение инструкции было завершено.

Может ли кто-нибудь посоветовать мне, что я делаю неправильно? вот код для вставки:

         newFarmer.Guid = Guid.NewGuid();
        ents.Farmer.AddObject(newFarmer);
        ents.SaveChanges();
        return newFarmer;
  

Я даже проверил состояние страны, и оно говорит без изменений.

Комментарии:

1. Добавьте структуру этих двух объектов и таблиц для вопроса.

2. В вашем фрагменте кода отсутствует самая важная часть: откуда берется Country объект, которому вы назначаете newFarmer.Country ? Обычно сразу можно догадаться, что ваш Country объект не присоединен к ObjectContext при вызове, AddObject(newFarmer) что приведет к ВСТАВКЕ Country объекта. Но тогда ее состояние могло быть не unchanged таким, как вы говорите. Исключение, которое у вас есть, — с объектом в состоянии unchanged — довольно невозможно. В описании вашей проблемы и коде, должно быть, отсутствует какая-то важная информация.

Ответ №1:

Одним из возможных решений является то, что Entity Framework не понимает, что первичный ключ вашей сущности также является идентификатором и должен автоматически увеличиваться. У меня была такая же проблема в приложении, использующем EF 4.1, сначала с базой данных. Чтобы решить проблему, мне пришлось::

  • Убедитесь, что первичный ключ моих сущностей имеет имя «ID» (чтобы избежать размещения декоратора [Key] над моим классом модели.
  • Убедитесь, что для параметра свойства «Identity» вашей системы баз данных (в моем случае SQL Server) установлено значение «Yes».

Затем мой EF4.1 смог выполнить вставку и обновление моих объектов.

Надеюсь, это поможет!