Зависимое свойство в ReferentialConstraint отображается в столбец, созданный магазином - PullRequest
93 голосов
/ 17 июня 2011

Я получаю эту ошибку при записи в базу данных:

Зависимое свойство в 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;
    }

Схема:

enter image description here

Ответы [ 13 ]

169 голосов
/ 08 августа 2011

Возможно ли, что вы определили неверное соотношение столбцов между вашими таблицами? разные столбцы, и один из них был задан как числовой.

Это случилось со мной.

45 голосов
/ 17 июня 2011

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

Ошибка означает, что у вас есть отношение между сущностями, где свойство внешнего ключа в зависимой сущности определяется как сгенерированное хранилищем.Магазин сгенерированных свойств заполняется в базе данных.EF не поддерживает сохранение сгенерированных свойств как внешних ключей (а также вычисляемых свойств в первичных ключах).

8 голосов
/ 31 марта 2012

У меня была такая же проблема. Основываясь на ответах, предоставленных здесь, я смог отследить и решить ее, но у меня была странная проблема, описанная ниже - она ​​может кому-то помочь в будущем.

В моих зависимых таблицах столбцы внешнего ключа были установлены в StoreGeneratedPattern = "Identity". Я должен был изменить его на «Нет». К сожалению, делать это внутри дизайнера не получалось вообще.

Я посмотрел в сгенерированном дизайнером XML (SSDL), и эти свойства все еще были там, поэтому я удалил их вручную. Мне также пришлось исправить столбцы в базе данных (удалить Identity (1,1) из CREATE TABLE SQL)

После этого проблема ушла.

5 голосов
/ 02 января 2017

У меня была такая же проблема, и после некоторого поиска в дизайне таблицы на сервере sql, я обнаружил, что по ошибке я установил первичный ключ таблицы также как внешний ключ.

sql server table design flow

На этом изображении вы видите, что JobID является первичным ключом таблицы, но также ошибочно внешним ключом.

1 голос
/ 30 октября 2018

Моя проблема была вызвана избыточным определением первичного ключа в конфигурации.

this
   .Property(p => p.Id)
   .HasColumnName(@"id")
   .IsRequired()
   .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity) // this is redundant when you want to configure a One-to-Zero-or-One relationship
   .HasColumnType("int");

Удалить эту строку

.HasDatabaseGeneratedOption (DatabaseGeneratedOption.Идентификационные данные)


Пример http://www.entityframeworktutorial.net/code-first/configure-one-to-one-relationship-in-code-first.aspx

Этого достаточно для определения отношения

// Configure Student & StudentAddress entity
modelBuilder.Entity<Student>()
            .HasOptional(s => s.Address) // Mark Address property optional in Student entity
            .WithRequired(ad => ad.Student); // mark Student property as required in StudentAddress entity. Cannot save StudentAddress without Student
1 голос
/ 13 сентября 2016

В дополнение к принятому ответу, если вы используете генератор EF Reverse POCO или какой-либо другой инструмент, который генерирует ваши POCO, убедитесь, что вы регенерировали их!

1 голос
/ 12 апреля 2016

Для меня это был неверно размещенный внешний ключ в таблице, но даже после изменения таблицы, чтобы исправить это, он все еще не работал.Вам необходимо обновить файлы EDMX (и этого недостаточно, чтобы «обновить» таблицу из модели, необходимо удалить и снова добавить таблицу в модель).

1 голос
/ 24 февраля 2015

Если вы проверили свои отношения и там хорошо.

Удалить таблицу в edmx и затем обновить из базы данных. Это избавит вас от необходимости выполнять обновление вручную.

1 голос
/ 30 мая 2013

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

При создании внешних ключей в SQL Server Management Studio первичный ключ имеет значение по умолчанию, и это значение по умолчанию возвращается при изменении родительской таблицы, поэтому будьте осторожны, чтобы изменять значения в правильном порядке в окне «Таблицы и столбцы».

Кроме того, после того, как вы исправили проблемные отношения, есть большая вероятность, что простое «Обновить» в модели не удастся корректно удалить ошибочные отношения из модели, и вы получите ту же ошибку даже после «» fix", поэтому сделайте это самостоятельно в модели, прежде чем выполнять обновление. (Я нашел это трудным путем.)

0 голосов
/ 17 июля 2019

В моем случае поле идентификатора, для которого FK только что в Entity Framework, свойство "StoreGeneratedPattern" было установлено "Itentity" вместо "None"

...