34

Ok, quindi sono nuovo sia per EF che per LINQ. Ho capito come INSERIRE e CANCELLARE ma per qualche motivo UPDATE sembra sfuggire alla mia comprensione.LINQ to Entities come aggiornare un record

Ecco un esempio del mio codice:

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

È possibile che questo crea e aggiunge un record più che bene.

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

Quanto sopra elimina effettivamente il record specificato.

Ora come si aggiorna? Non riesco a trovare un metodo "UpdateObject()" nella raccolta di entità.

+0

Se si utilizza EF4, preferisco questa soluzione http://stackoverflow.com/questions/623672/update-entity-framework-objects –

risposta

73

Basta modificare una delle entità restituiti:

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

nota, è possibile aggiornare solo un'entità (cosa che si estende EntityObject, non qualcosa che si è proiettata usando qualcosa come select new CustomObject{Name = x.Name}

+0

ho fatto quella. Per qualche motivo non sta persistendo le modifiche al database. – Chev

+1

Nevermind. Ha funzionato. Stavo guardando i dati sbagliati. – Chev

+0

@Chevex: Ma nota che diventa molto più complicato quando si usa un'altra istanza di contesto. –

3

Entrambi pista le modifiche alla raccolta, basta chiamare i SaveChanges() che dovrebbe aggiornare il DB.

6

// per l'aggiornamento

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

// per cancellare

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