SaveChanges в Entity Framework ошибка внешнего ключа оператора вставки - PullRequest
1 голос
/ 17 октября 2011

У меня есть объект свойства, и я хотел удалить его из последней коллекции репозитория. Или я могу сказать, отключить его перед сохранением в базе данных. Существует таблица Property, которая является главной, а таблицы истории и сведений связаны с Property через общий PropertyId в качестве ключа. Когда я отсоединяю объект от хранилища и пытаюсь сохранить его, это приводит к ошибке.

Делаем это.

Repository.Detach(P);

Ошибки на

Repository.SaveChanges();

Ошибка:

Оператор INSERT конфликтовал с ограничением FOREIGN KEY "FK_History_Property".
Конфликт произошел в базе данных «database», таблице «dbo.Property», столбце «PropertyId».
Заявление было прекращено.

Ответы [ 2 ]

1 голос
/ 17 октября 2011

Попробуйте удалить записи из других таблиц, которые ссылаются на первичный ключ записи, которую вы пытаетесь удалить, перед удалением записи.

Ex:

Таблица транзакций

TransactionID DateOfTransaction CustomerID
1             11/15/11          1
2             11/15/11          2
3             11/15/11          15
4             11/15/11          3

Подробности транзакции

TransactionDetailID TransactionID ItemID Quatity
1                   1             43     15
2                   1             32      2
3                   2             43     89
4                   4             32     12

TransactionID здесь внешний ключ (первичный ключ из другой таблицы). Прежде чем вы сможете удалить родительскую запись в таблице транзакций, вы должны сначала удалить все записи, которые ссылаются на ее PrimaryKey, чтобы избежать ОШИБКИ ОГРАНИЧЕНИЯ КЛАВИШИ *

Ex:

Если вы хотите удалить транзакцию 1 из базы данных, вы должны сначала удалить детали транзакции (Детали транзакции 1 и 2), прежде чем вам будет разрешено удалить транзакциюID 1

0 голосов
/ 17 октября 2011

Я думаю, что вы хотите использовать

Repository.DeleteObject(P);

с последующим

ObjectContext.SaveChanges();

Это, конечно, предполагает, что вы действительно используете некоторые из более поздних версий EntityFramework, которые поддерживают модель DbContext.

В более ранних версиях изменения в репозитории можно было сделать на уровне репозитория или на уровне ObjectContext, выполнив что-то вроде

ObjectContext.DeleteObject(P);

с последующим

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