Я получаю эту ошибку при записи в базу данных:
Зависимое свойство в ReferentialConstraint сопоставляется со столбцом, созданным хранилищем. Столбец: PaymentId.
public bool PayForItem(int terminalId, double paymentAmount,
eNums.MasterCategoryEnum mastercategoryEnum, int CategoryId, int CategoryItemId)
{
using (var dbEntities = new DatabaseAccess.Schema.EntityModel())
{
int pinnumber = 0;
long pinid = 1; //getPinId(terminalId,ref pinnumber) ;
var payment = new DatabaseAccess.Schema.Payment();
payment.CategoryId = CategoryId;
payment.ItemCategoryId = CategoryItemId;
payment.PaymentAmount = (decimal)paymentAmount;
payment.TerminalId = terminalId;
payment.PinId = pinid;
payment.HSBCResponseCode = "";
payment.DateActivated = DateTime.Now;
payment.PaymentString = "Payment";
payment.PromotionalOfferId = 1;
payment.PaymentStatusId = (int)eNums.PaymentStatus.Paid;
//payment.PaymentId = 1;
dbEntities.AddToPayments(payment);
dbEntities.SaveChanges();
}
return true;
}
Схема такая:
c#
sql-server-2008
linq-to-sql
entity-framework-4
Валлийский король
источник
источник
(e as System.Data.Entity.Infrastructure.DbUpdateException).Entries
), вы можете увидеть, какая таблица содержит первичный ключ, на который ссылаются.Эта ошибка говорит о том, что вы используете неподдерживаемое отношение или имеете ошибку в отображении. Ваш код, скорее всего, абсолютно не связан с ошибкой.
Ошибка означает, что у вас есть некоторая связь между сущностями, где свойство внешнего ключа в зависимой сущности определено как созданное хранилище. Созданные в магазине свойства заполняются в базе данных. EF не поддерживает сохранение сгенерированных свойств в качестве внешних ключей (а также вычисляемых свойств в первичных ключах).
источник
PaymentID
и разберитесь с ним.У меня такая же проблема. Основываясь на приведенных здесь ответах, я смог отследить и решить эту проблему, но у меня возникла странная проблема, описанная ниже - она может кому-то помочь в будущем.
В моих зависимых таблицах столбцы внешнего ключа были установлены на StoreGeneratedPattern = "Identity". Пришлось поменять на «Нет». К сожалению, внутри дизайнера это вообще не сработало.
Я просмотрел созданный дизайнером XML (SSDL), и эти свойства все еще были там, поэтому я удалил их вручную. Мне также пришлось исправить столбцы в базе данных (удалить Identity (1,1) из CREATE TABLE SQL)
После этого проблема ушла.
источник
У меня была такая же проблема, и после некоторого покопания в дизайне таблиц на сервере sql я обнаружил, что по ошибке я установил первичный ключ таблицы также как внешний ключ.
На этом изображении вы можете видеть, что JobID является первичным ключом таблицы, но также ошибочно является внешним ключом.
источник
Моя проблема была вызвана избыточным определением первичного ключа в конфигурации.
Удалить эту строку
Пример http://www.entityframeworktutorial.net/code-first/configure-one-to-one-relationship-in-code-first.aspx
Этого достаточно, чтобы определить отношения
источник
Еще раз проверьте связь между Платежом и другими таблицами / объектами. Включая те, которые не должны содержать PaymentId, потому что именно там, скорее всего, кроется проблема.
При создании внешних ключей в SQL Server Management Studio по умолчанию используется первичный ключ, и это значение по умолчанию восстанавливается при изменении родительской таблицы, поэтому будьте осторожны, чтобы изменить значения в правильном порядке в окне «Таблицы и столбцы».
Кроме того, после того, как вы исправили проблемную взаимосвязь, есть большая вероятность, что простое «Обновить» в модели не удалит ошибочную взаимосвязь из модели, и вы получите ту же ошибку даже после « исправления », поэтому сделайте это самостоятельно в модели перед выполнением обновления. (Я выяснил это на собственном горьком опыте.)
источник
Если вы проверили свои отношения и у вас все хорошо.
Удалите таблицу в edmx, а затем обновите из базы данных. Это избавит вас от необходимости выполнять обновление вручную.
источник
Для меня это был неправильно размещенный внешний ключ в таблице, но даже после изменения таблицы, чтобы исправить это, он все еще не работал. Вам необходимо обновить файлы EDMX (и этого недостаточно, чтобы «обновить» таблицу из модели, вам нужно удалить и снова добавить таблицу в модель).
источник
В дополнение к принятому ответу, если вы используете генератор EF Reverse POCO или какой-либо другой инструмент, который генерирует ваши POCO, убедитесь, что вы их регенерируете !
источник
В моем случае проблема была вызвана двусторонним отношением 1-1:
Мне пришлось просто удалить один из двух внешних ключей (все равно не обязательно).
источник
В моем случае это было просто потому, что у меня не были правильно установлены разрешения для базы данных. Я читал только набор, и Entity framework выдает мне ошибку ReferentialConstraint, которая меня сбивает. Добавлены дополнительные разрешения на запись, и все было хорошо.
источник
В моем случае у меня было свойство Database Generated и свойство навигации ForeignKey, настроенное для ссылки на связанную таблицу 1 к 1.
Это не было чем-то, что я мог удалить, мне нужно было установить первичный ключ объекта как Database Generated И мне нужно было иметь возможность ссылаться на таблицу 1 к 1 в качестве свойства навигации.
Не уверен, что это то же самое для других, но эта проблема проявлялась только при создании новой сущности, чтение или редактирование существующих сущностей не вызывало проблемы, поэтому я решил проблему, создав унаследованную версию моего контекста и используя Метод Fluent для отключения свойства навигации при создании.
Итак, моя исходная сущность выглядела так:
Итак, я создал специальный унаследованный контекст, который выглядел так:
а затем изменили код, создавший новую сущность, чтобы сделать пользователя нового типа контекста
Надеюсь, это кому-то поможет
источник
В моем случае поле Id, которое FK только в Entity Framework, свойство StoreGeneratedPattern было установлено «Itentity» вместо «None»
источник