34

Bon, je suis nouveau à la fois EF et LINQ. J'ai compris comment INSÉRER et SUPPRIMER mais pour une raison quelconque, MISE À JOUR semble échapper à ma compréhension.LINQ to Entities comment mettre à jour un enregistrement

Voici un échantillon de mon code:

EntityDB dataBase = new EntityDB(); 
Customer c = new Customer 
{ 
    Name = "Test", 
    Gender = "Male 
}; 
dataBase.Customers.AddObject(c); 
dataBase.SaveChanges(); 

Le crée et ajoute au-dessus un disque très bien.

Customer c = (from x in dataBase.Customers 
      where x.Name == "Test" 
      selext x).First(); 
dataBase.Customers.DeleteObject(c); 
dataBase.SaveChanges(); 

Ce qui précède supprime efficacement l'enregistrement spécifié.

Maintenant, comment puis-je mettre à jour? Je n'arrive pas à trouver une méthode "UpdateObject()" dans la collection d'entités.

+0

Si vous utilisez EF4, je préfère cette solution http://stackoverflow.com/questions/623672/update-entity-framework-objects –

Répondre

73

Il suffit de modifier l'une des entités retournées:

Customer c = (from x in dataBase.Customers 
      where x.Name == "Test" 
      select x).First(); 
c.Name = "New Name"; 
dataBase.SaveChanges(); 

Remarque, vous ne pouvez mettre à jour une entité (quelque chose qui va EntityObject, pas quelque chose que vous avez projeté en utilisant quelque chose comme select new CustomObject{Name = x.Name}

+0

Je l'ai cette. Pour une raison quelconque, il ne persiste pas les modifications apportées à la base de données. – Chev

+1

Peu importe. Ça a marché. Je regardais les mauvaises données. – Chev

+0

@Chevex: Mais notez qu'il est beaucoup plus impliqué lorsque vous utilisez une autre instance de contexte. –

3

Ils ont tous deux la piste les modifications apportées à la collection, il suffit d'appeler la méthode SaveChanges() qui devrait mettre à jour la base de données.

6

// pour la mise à jour

(from x in dataBase.Customers 
     where x.Name == "Test" 
     select x).ToList().ForEach(xx => xx.Name="New Name"); 

// pour suppression

dataBase.Customers.RemoveAll(x=>x.Name=="Name");