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 '
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
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. –