2010-01-18 6 views
2

je essaie de mettre à jour un dossier db en utilisant LINQ to SQLMise à jour d'une entité avec LINQ to SQL

d'abord, je requête pour qu'il

MyObject obj = (from o in objRepository.List where(o.ID == id) select i).SingleOrDefault(); 

alors je tente de mettre à jour et modifier les données

obj.Name = "some value" 

dataContext.Attach(obj) 
dataContext.Context.Refresh(RefreshMode.KeepCurrentValues, obj); 

Je reçois un InvalidOperationException sur la ligne où le contenu est joint. Il est dit qu'il est impossible d'attacher une entité qui existe déjà.

Quelqu'un peut-il s'il vous plaît me aider? Merci.

Répondre

1

Tout objet mis à jour avec LINQ to SQL est automatiquement connu, donc si vous obtenez l'objet du dépôt, et il connaît le contexte de données, vous n'avez pas besoin de le joindre. Vous pouvez simplement submitchanges() avec le contexte de données et ces modifications sont mises à jour dans la base de données. Par conséquent, lorsque vous interrogez le contexte de données, dès qu'une propriété change de valeur, le contexte de données connaît déjà la modification et un appel à SubmitChanges() le pousse vers la base de données et met à jour les références de cet objet (donc vous pouvez percer à travers).

+0

Hey Merci pour la réponse rapide. J'ai commenté l'appel à joindre et mis à jour avec succès. Mais j'ai été mise à jour toutes mes entités comme ça tout au long du projet et son fonctionnement. Savez-vous pourquoi dans ce cas particulier, il n'a pas? : D thx –

+0

Vous n'êtes pas sûr ... que les entités déjà interrogées avec un contexte de données connaissent ce contexte de données; attacher était destiné à des entités non rattachées au contexte, donc je pensais que ce n'était pas censé fonctionner de cette façon .. donc je suis perplexe qu'il a travaillé pour vous de cette façon ... À moins que vous désactivez le suivi des changements dans votre projet, ou quelque chose d'autre qui peut être dans ce cas? –

Questions connexes