2012-04-26 6 views
1

J'écris un service peut atteindre des valeurs de taux de change hebdomadaires à jour.
Mais j'obtiens une erreur lors de l'envoi des valeurs à la base de données. J'ai créé un modèle de base de données dans Entity Framework. Les noms de tables de base de données associés sont CURRENCY et WEEKLY_VALUE.Asp.net Entity Framework Insérer duplication PK Exception

Les champs associés sont KOD champ dans CURRENCY et KOD champ dans WEEKLY_VALUE tableau. Le champ KOD dans WEEKLY_VALUE est Foreing_key.

je reçois une erreur dans ce code:

public void insertWeeklyCurrency(List<CURRENCY> currencyList) 
    { 
     myEntity = new CurrencyEntities(); 
     DateTime date = new DateTime(); 
     date = System.DateTime.Now; 
     String day= date.DayOfWeek.ToString(); 
     if (!day.Equals("Sunday") && !day.Equals("Saturday")) 
     { 
      WEEKLY_VALUE weeklyCurrency; 
      for (int i = 0; i < currencyList.Count; i++) 
      { 
       weeklyCurrency = new WEEKLY_VALUE(); 
       weeklyCurrency.KOD = currencyList[i].KOD; 
       weeklyCurrency.TARIH = currencyList[i].TARIH; 
       weeklyCurrency.DEGER = currencyList[i].F_SATIS; 
       weeklyCurrency.CURRENCYReference.Value=currencyList[i]; 
       myEntity.AddToWEEKLY_VALUE(weeklyCurrency); 
       myEntity.SaveChanges(); 
      } 
     } 
    } 

Le message d'erreur:.

{ "Violation de contrainte PRIMARY KEY 'de PK_CURRENCY' Impossible d'insérer clé en double dans l'objet « dbo.CURRENCY '. \ r \ nLa déclaration a été terminée.}}

Comment gérer cette erreur?

Répondre

0

Lorsque vous obtenez cette erreur, il est plus que probable que vous essayez d'insérer quelque chose qui est déjà dans la table. En plus de l'évidence, j'ai besoin de voir le schéma pour localiser exactement le problème. Cependant,

weeklyCurrency.CURRENCYReference.Value = currencyList [i];

semble suspect. Si KOD est déjà une clé étrangère de la devise, quelle est cette valeur CURRENCYReference?

+1

'CURRENCYReference' est un propriété générée par EF lorsque vous utilisez des entités dérivées de 'EntityObject' (et non des objets POCO). Chaque propriété de navigation de référence 'XYZ' a une propriété' XYZReference' connexe de type 'EntityReference '. C'est "normal" mais c'est un peu démodé EF. – Slauma

+0

Merci, je ne le savais pas. – AwDogsGo2Heaven

1

Vous devez fixer les éléments du currencyList au contexte de laisser EF savoir qu'ils existent déjà dans la base de données, sinon EF va essayer de les insérer à la DB:

for (int i = 0; i < currencyList.Count; i++) 
{ 
    myEntity.Currencies.Attach(currencyList[i]); 
    // etc. 
} 
Questions connexes