34

OK, więc jestem nowy zarówno dla EF, jak i LINQ. Zorientowałem się, jak INSERT i DELETE, ale z jakiegoś powodu UPDATE wydaje się uciec mój chwyt.LINQ to Entities jak aktualizować rekord

Oto przykład z mojego kodu:

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

Powyższy tworzy i dodaje rekord dobrze.

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

Powyższe skutecznie usuwa określony rekord.

Jak mogę dokonać aktualizacji? Nie mogę znaleźć metody "UpdateObject()" w kolekcji encji.

+0

Jeśli używasz EF4, wolałbym tego rozwiązania http://stackoverflow.com/questions/623672/update-entity-framework-objects –

Odpowiedz

73

Wystarczy zmodyfikować jeden z powracających podmioty:

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

Uwaga, można tylko zaktualizować podmiot (coś który rozciąga EntityObject, a nie coś, że projektowany przy użyciu coś jak select new CustomObject{Name = x.Name}

+0

zrobiłem że. Z jakiegoś powodu nie utrzymuje zmian w bazie danych. – Chev

+1

Nieważne. To się udało. Szukałem niewłaściwych danych. – Chev

+0

@Chevex: Należy jednak pamiętać, że jest on znacznie bardziej zaangażowany podczas korzystania z innej instancji kontekstu. –

3

Obaj toru zmiany do kolekcji, po prostu zadzwonić do SaveChanges() metoda, która powinna zaktualizować DB.

6

// do aktualizacji

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

// do kasowania

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