2015-06-30 22 views
10

Utilizzo EF con WEB API. Ho un metodo PUT che aggiorna un'entità che già si trova nel db. In questo momento ho questo:EntityFramework con WEB API, aggiorna tutte le proprietà

 // PUT api/fleet/5 
     public void Put(Fleet fleet) 
     { 
      Fleet dbFleet = db.Fleets.Find(fleet.FleetId); 
      dbFleet.Name = fleet.Name; 
      dbFleet.xy= fleet.xy; 
      //and so on.... 
      db.SaveChanges(); 
     } 

Ma io sono pigro e vorrei solo scrivere qualcosa di simile:

dbFleet.update(fleet); 

Quindi non devo aggiornare ogni proprietà dalla propria.

Sono sicuro che c'è un modo, ma ho potuto trovare solo le risposte su come farlo con MVC ma non quando si utilizza una API WEB e non si riceve lo stato del modello.

Grazie

risposta

8

appena trovato la risposta ...

// PUT api/fleet/5 
public void Put(Fleet fleet) 
{ 
    db.Entry(fleet).State = EntityState.Modified; 
    db.SaveChanges(); 
} 

unica cosa che non sono felice con è che non aggiorna oggetto figlio. Fleet ha FleetAttributes che non sono aggiornati in questo modo. Ma credo che posso facilmente ciclo di loro ...

EDIT questo funziona per me:

// PUT api/fleet/5 
public void Put(Fleet fleet) 
{ 
    db.Entry(fleet).State = EntityState.Modified; 
    foreach (var item in fleet.FleetAttributes) 
    { 
     db.Entry(item).State = EntityState.Modified; 
    } 
    db.SaveChanges(); 
} 
+0

Nizza! Ero anche bloccato all'aggiornamento dell'oggetto figlio. L'hai fatto molto bene. Grazie. – Imon

14
db.Fleets.Attach(fleet); 
db.Entry(fleet).State = EntityState.Modified; 
db.SaveChanges();