Mise à jour d'un enregistrement à l'aide de Linq-to-SQL
Je l'ai fait à de nombreuses reprises et il a travaillé.
Tous les exemples que j'ai trouvé est exactement ce que j'ai..
Je fais ma requête...
var result = from u in tdc.tblUsers
where u.UserID == userID
select u;
puis-je changer les valeurs que je veux:
foreach (tblUsers u in result)
{
//change values (and no im not changing the primary key or foreign keys)
}
puis-je soumettre des modifications
tdc.SubmitChanges();
J'ai aussi essayé de cette façon avant et obtenu la même erreur
tblUsers result = (from u in tdc.tblUsers
where u.UserID == userID
select u).Single();
result.Address = address;
result.Phone = phone;
tdc.SubmitChanges();
Il ne pourront jamais récupérer 1 enregistrement avec cette requête depuis UserID
est la clé primaire.
Quand il frappe de soumettre des modifications, il jette exception que la ligne n'a pas été trouvé ou a été modifié. Je suis la seule personne à l'aide de cette sorte il n'y a pas d'autres conflits avec accès à la db ou de verrouillage. Pourquoi serait-il jeter le ChangeConflictException
? J'ai franchi avec le débogueur et les données persiste tout au long du processus, y compris les changements que je suis en train de faire.
Aussi, à faire TOUS vos tables de clés primaires. Cela inclut celui que vous êtes en train de modifier et de ramification des tables de clés étrangères.
Vous obtenez cette erreur peut-être parce que l'un de vos champs a quelque chose de différent dans le Linq to SQL designer et dans la base de données réelle.
.NET Framework 4 et oui toutes les tables ont des Clés Primaires et appropriée des clés étrangères. Cette requête est seulement après le 1er tableau, et le tableau n'a pas toutes les clés étrangères. C'est l'une de mes tables de base.
Une raison quelconque vous utilisez
SubmitChanges
au lieu de SaveChanges
? Aussi, quelle est la version de Entité cadre utilisez-vous?
OriginalL'auteur Andy Link | 2013-05-04
Vous devez vous connecter pour publier un commentaire.
Peut-être que vous travaillez avec un contexte différent? Essayez de l'encapsuler avec l'aide de.
comme ce
OriginalL'auteur Sascha
Assez souvent, si vous regardez le SQL que Linq-to-SQL génère, vous verrez que c'est vraiment trop zélé avec une correspondance de la ligne de base de données que vous avez récupéré. Imaginez que vous avez un tableau avec les colonnes ID(PK), A, B, C. on pourrait penser que si vous avez mis à jour la colonne C pour une ligne, il devrait être suffisant pour mettre à jour la ligne avec un correspondant de la clé primaire. Mais ce qui arrive souvent est que Linq-to-SQL est également d'essayer de faire correspondre les colonnes A et B ainsi. Normalement, c'est très bien. Sauf si vous avez des écritures simultanées, soit à partir de multi-threading ou multi-processus, et quelque chose d'autre modifie la colonne A ou B pour l'enregistrement que vous souhaitez mettre à jour. Ensuite, vous obtenez ces Système.Les données.Linq.ChangeConflictException: Ligne pas trouvé ou changé. les erreurs lorsque vous appelez SubmitChanges() sur votre contexte de données.
OriginalL'auteur EricRRichards