110 votes

Un dépendante de la propriété dans un ReferentialConstraint est mappé à un générées par les magasins de la colonne

J'ai cette erreur lors de l'écriture dans la base de données:

Un dépendante de la propriété dans un ReferentialConstraint est mappé à un générées par les magasins de la colonne. Colonne: '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;
    }

Je suis nouveau sur Entity Framework et sa me rend fou

Le schéma est:

enter image description here

194voto

ju4nj3 Points 726

Est-il possible que vous avez défini une mauvaise colonne relation entre vos tables? les différentes colonnes, et l'un a été défini comme autonumeric.

Il m'est arrivé.

48voto

Ladislav Mrnka Points 218632

Cette erreur indique que vous êtes en utilisant non prise en charge de la relation, ou vous avez une erreur dans votre cartographie. Votre code est plus probablement absolument étrangère à l'erreur.

L'erreur signifie que vous avez une relation entre les entités où la propriété de clé étrangère dans dépendante de l'entité est définie comme magasin généré. Magasin propriétés générées sont remplis dans la base de données. EF ne prend pas en charge stocker des propriétés générées comme des clés étrangères (ainsi que les propriétés calculées dans les clés primaires).

9voto

surfen Points 2703

J'ai eu le même problème. Sur la base des réponses fournies ici, j'ai été capable de le suivre et de le résoudre, mais j'ai eu un étrange problème décrit ci - dessous peut aider quelqu'un dans le futur.

Sur ma charge les tables, les colonnes de Clé étrangère ont été mis à StoreGeneratedPattern="Identité". J'ai dû changer à "None". Malheureusement, ce faisant, à l'intérieur de designer ne fonctionne pas du tout.

J'ai regardé dans le designer-XML généré (SSDL) et que ces propriétés étaient encore là, alors j'ai enlevé manuellement. J'ai également eu à corriger les colonnes de la base de données (suppression de l'Identité(1,1) à partir de SQL CREATE TABLE)

Après cela, le problème a disparu.

1voto

Mark Points 27

Re-vérifier la relation entre le Paiement et les autres tables/entités. Y compris ceux qui ne contiennent pas de PaymentId parce que c'est là le problème est plus susceptible de se cacher.

Lors de la création de clés étrangères dans SQL Server Management Studio, la clé primaire est en défaut, et ce par défaut est rétablie lorsque la table parent est modifié, donc attention au changement de valeurs dans l'ordre correct dans les "Tables et des Colonnes de la fenêtre".

Aussi, après que vous avez fixé la problématique de la relation, il ya une bonne chance qu'un simple "Actualiser" sur le modèle de ne pas supprimer correctement le faux relation du modèle et vous obtiendrez l'erreur, même après le "fix", afin de le faire vous-même dans le modèle avant de procéder à une actualisation. (J'ai trouvé cela la manière dure.)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X