2009-10-06 4 views
1

Je courais le code suivant:Incohérence dans Mise à jour LinqToSql

if(ven.Source == null)ven.Source = new Source(); 
        ven.name = (string) venue.Element("venueName"); 
        Console.WriteLine("Venue Name: " + ven.name); 
        ven.Source.companyId = 1; 
        ven.Source.sourceReference = (string)venue.Attribute("venueID"); 

Je suis en cours d'exécution dans le même fichier xml à chaque fois et le (string)venue.Attribute("venueID"); est exacly le même à chaque fois, alors pourquoi une mise à jour de base de données pour la course sur Sauvegarder les modifications? Pourquoi l'identifiant de l'entreprise n'est-il pas défini, mais la référence source le fait? :

exec sp_executesql N'UPDATE [dbo].[Source] 
SET [sourceReference] = @p3 
WHERE ([sourceId] = @p0) AND ([companyId] = @p1) AND ([sourceReference] = @p2)',N'@p0 int,@p1 int,@p2 nchar(12),@p3 nchar(12)',@p0=71,@p1=1,@p2=N'x1830wa  ',@p3=N'x1830wa  ' 

Répondre

1

Quelques réflexions:

  • a changé il fait valeur - il est très paresseux et ne persiste que les changements perçus; appeler le set n'est pas suffisant
  • fait-il partie de la clé/identité primaire? (le WHERE me fait penser non, cependant)
  • est-ce dans le dbml? ou l'avez-vous ajouté manuellement et oubliez-vous?
+0

Merci, cela ne fait pas partie du primaire/identité et se trouve dans le dbml. Premier point je ne comprends pas vraiment, mais conduis-moi à jeter un coup d'oeil et assumer une réponse. La chaîne "siteID" est juste 'x1830wa', tandis que le champ est un NCHAR (12), donc comparer la chaîne 'x1830wa' à 'x1830wa' n'est pas un match absolu, donc il perçoit qu'un changement a été fait. Serait-ce la raison? – Richbits

+0

Oui; Lorsque vous le chargez hors de la base de données (en tant que [n] char (12) '), il inclut normalement un padding (contrairement à' [n] varchar (12) ') - donc si vous mettez la clé à jour * sans * l'espace, il sera considéré comme différent. Toutes les propriétés qui ne semblent pas avoir de modification n'apparaîtront pas dans le fichier UPDATE. –