Comment insérer uniquement de nouveaux enregistrements à l'aide de Linq-to-SQL?
Je dois insérer des données périodiquement dans ma base de données SQL Server. Mais les flux où j'ai lu les données se répète certaines données qui a été inséré avant. Lorsque j'utilise Linq-to-SQL pour insérer dans la DB soit certaines données sont dupliquées, ou une violation de clé primaire exception est soulevée, selon la clé primaire.
Comment insérer les données sans doublons et sans exceptions? Je ne veux pas éviter de l'exception avec un try-catch, car une fois que l'exception est levée, le reste des données n'est pas inséré.
mise à jour j'ai aussi trouvé ma solution: j'ai écrit un dédoublement des entrées de la suppression de la procédure stockée, qui est de courir à droite après le InsertAllOnSubmit + SubmitChanges
OriginalL'auteur Jader Dias | 2009-04-07
Vous devez vous connecter pour publier un commentaire.
Tout ce que vous avez à faire est de créer une nouvelle instance de votre classe, puis en appel InsertOnSumbit() sur la table:
L'autre chose que vous devez être sûr, c'est la façon dont vous êtes l'incrémentation de votre colonne ID. En général, j'ai toujours assurez-vous d'utiliser l'IDENTITÉ(1,1) réglage sur mon ID colonnes. C'est sur votre déclaration de LINQ, entity id de la colonne comme suit:
Pour éviter les doublons, ce que vous avez vraiment besoin est ce que nous appelons, dans mon atelier, un "annexer" de la fonctionnalité. À mon humble avis, c'est plus facile à faire avec une procédure stockée - nous avons même un modèle que nous utilisons pour elle:
Il est possible de le faire dans linq, si, juste une requête pour une liste de numéros d'identification (ou quelle que soit la colonne que vous êtes off keying):
Le LINQ solution semble assez lent. L'interrogation d'une table géante d'un chargement de contenu dans la mémoire semble irréalisable pour moi. Peut-être que je devrais rester avec le SP approche.
C'est ce que je pensais... Mais, vous pouvez accélérer le LINQ solution en sélectionnant uniquement les propriétés que vous avez vraiment besoin... par exemple, juste l'ID de la colonne. Aussi, si vous pouvez ré-utiliser le "existant" requête pour plusieurs pistes, qui peuvent aider ainsi.
OriginalL'auteur Daniel Schaffer
Malheureusement, il n'y a pas moyen de contourner cela que Linq to SQL ne permet pas de vérifier la base de données avant d'effectuer l'insertion. La seule façon de le faire est d'interroger la base de données première pour déterminer si la copie de l'enregistrement existe, puis ajouter l'enregistrement si elle ne le fait pas.
Idéalement Linq to SQL serait un soutien Ignorer Les Doubles De Clés de propriété sur une colonne SQL. Mais malheureusement ce n'est pas pour le moment.
OriginalL'auteur Keltex