2009-04-22 4 views
0

J'ai un service web qui récupère les commentaires de ma base de données et si pas assez d'avis sont retournés, il va à une source secondaire et les obtient là et les met en cache dans ma base de données. J'ai récemment remarqué qu'il créait des doublons dans ma base de données, même si j'avais des clés primaires pour l'empêcher. Je pensais que peut-être quand j'ai fait la table j'ai fait quelque chose de mal? Voici le SQL créer extrait de table:Pourquoi LINQ to SQL insère-t-il des doublons dans ma table?

create table Review( 
ReviewID int IDENTITY, 
CacheDate DateTime, 
UniqueID nvarchar(50), 
Type nvarchar(100), 
AverageRating decimal, 
TotalReviews decimal, 
Rating decimal, 
Content nvarchar(max), 
Summary varchar(100), 
HelpfulVotes int, 
TotalVotes int, 
ReviewDate nvarchar(100), 
ReviewerID nvarchar(100), 
ReviewerName nvarchar(100), 
ReviewerLocation nvarchar(100), 
primary key(ReviewID,UniqueID) 
) 

J'étagé à travers mon code et quand il arrive à cela à la section catch try insère toujours la ligne, même si elle existe déjà ..

try { db.SubmitChanges(); } 
catch (Exception ex) {..... 

Est-ce que quelqu'un sait quel pourrait être le problème?

Répondre

3

Quelle est la raison particulière pour laquelle vous avez placé le PK sur les colonnes UniqueID et Identity (ReviewID)? Pourquoi pas, comme alternative, mettre une contrainte unique sur UniqueID et le PK juste sur ReviewID?

+0

Je suis plutôt nouveau sur SQL Server et j'utilise normalement PK pour tout ce que je veux être unique. Je ne savais pas que vous pouviez mettre des contraintes sur les choses. Merci beaucoup pour votre aide !! –

6

Votre clé de primay est basée sur les colonnes ReviewID et UniqueID. La combinaison des deux colonnes doit donc être unique.

Vos doublons ont-ils un ReviewID et un UniqueID?

+0

Votre réponse a également été très utile et il était difficile de choisir la meilleure réponse. Merci pour votre aide, c'est très apprécié. –