J'ai une application distribuée qui envoie des données via WCF à un serveur à stocker dans la base de données (SQL Server 2008).Linq-to-SQL peut-il effectuer une insertion ou une mise à jour si nécessaire?
Habituellement, ces données sont nouvelles. Donc je fais juste InsertAllOnSubmit().
Mais occasionnellement, en raison de bizarreries de communication avec les périphériques portables qui s'exécutent côté client, je reçois un objet qui est déjà dans le serveur.
Y a-t-il un moyen de dire InsertOrUpdateAllOnSubmit? Ou vais-je devoir changer mon code pour parcourir chaque objet et vérifier si c'est dans la base de données, puis le faire et l'insérer ou le mettre à jour si nécessaire? J'ai tout à fait quelques types d'objets, ce qui va devenir fastidieux très vite :(
Comment définissez-vous "duplicate"? La même clé primaire? Utilisez-vous des colonnes d'identité pour les PK? – AaronLS
@AaronLS - duplicate a la même clé primaire (bien que j'obtienne occasionnellement la violation de contrainte Unique). Comme mes données proviennent de beaucoup de périphériques, les PK sont généralement des GUID. – Vaccano
Donc, vous ne voulez probablement pas un InsertOrUpdate, comme vous ne voudriez pas faire une mise à jour sur un enregistrement existant s'il y a une collision de GUID? C'est à dire. Je suppose que deux périphériques tentent d'insérer des données totalement différentes, mais qu'ils génèrent le même GUID. Par conséquent, plutôt que d'effectuer une mise à jour pour le second enregistrement, vous devez régénérer le GUID, puis insérer les deux enregistrements dans le fichier. base de données avec PK uniques. Peut-être que votre scénario est différent de ce que j'imagine mais c'est ce que je pense. – AaronLS