123 votes

Mettre à jour un enregistrement sans d'abord l'interrogation?

Disons que j'ai une requête à la base de données et de charger une liste d'éléments. Puis-je ouvrir un des éléments dans une vue de détail de forme, et, au lieu de ré-interrogation de l'élément de la base de données, j'ai créer une instance de l'élément de source de données dans la liste.

Est il possible que je peux mettre à jour l'enregistrement de base de données sans l'extraction de l'enregistrement de la pièce?

Voici un exemple de la façon dont je le fais maintenant:

dataItem itemToUpdate = (from t in dataEntity.items
                                 where t.id == id
                                 select t).FirstOrDefault();

Puis, après avoir tiré de l'album que j'ai mise à jour de certaines valeurs de l'élément et de pousser à l'enregistrement:

itemToUpdate.itemstatus = newStatus;
dataEntity.SaveChanges();

Je pense qu'il y aurait une meilleure façon pour ce faire, des idées?

70voto

CD.. Points 23701

Vous devez utiliser le Attach() méthode.

L'attachement et le Détachement des Objets

45voto

barrypicker Points 654

Vous pouvez également utiliser SQL directe à l'encontre de la base de données en utilisant le contexte de la banque de données. Exemple:

dataEntity.ExecuteStoreCommand
   ("UPDATE items SET itemstatus = 'some status' WHERE id = 123 ");

Pour des raisons de performances, vous pouvez vous passer des variables au lieu d'une seule codé en dur chaîne SQL. Cela permettra SQL Server pour mettre en cache les requêtes et de les réutiliser avec des paramètres. Exemple:

dataEntity.ExecuteStoreCommand
   ("UPDATE items SET itemstatus = 'some status' WHERE id = {0}, new object[] { 123 });

2voto

Simon_Weaver Points 31141

Cet article dans le cadre de Microsoft de prise en main explique états des entités et comment le faire:

Joindre et les États des entités

Regardez la section "Fixation d'un existant, mais a modifié entité pour le contexte'

Maintenant, je vais lire le reste de ces tutoriels.

-5voto

Andrew Points 5827

En règle générale, si vous avez utilisé Entity Framework pour interroger tous les éléments et que vous économisé de l'entité objet, vous pouvez mettre à jour les éléments individuels de l'entité objet et l'appel de SaveChanges() quand vous avez fini. Par exemple:

var items = dataEntity.Include("items").items;
// For each one you want to change:
items.First(item => item.id == theIdYouWant).itemstatus = newStatus;
// After all changes:
dataEntity.SaveChanges();

La récupération d'un élément que vous voulez ne doivent pas générer une nouvelle requête.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X