Ho due progetti: una libreria di classi contenente un modello di Entity Framework EDM e un progetto MVC ASP.NET separato.Come aggiornare l'entità EF 4 in ASP.NET MVC 3?
sto avendo problemi con come il vostro supponiamo di modificare e salvare le modifiche a un'entità utilizzando MVC. Nel mio controller ho:
public class UserController : Controller
{
public ActionResult Edit(int id)
{
var rep = new UserRepository();
var user = rep.GetById(id);
return View(user);
}
[HttpPost]
public ActionResult Edit(User user)
{
var rep = new UserRepository();
rep.Update(user);
return View(user);
}
}
mio UserRepository
ha un metodo di aggiornamento in questo modo:
public void Update(User user)
{
using (var context = new PDS_FMPEntities())
{
context.Users.Attach(testUser);
context.ObjectStateManager.ChangeObjectState(testUser, EntityState.Modified);
context.SaveChanges();
}
}
Ora, quando faccio clic su 'Salva' nella pagina Modifica utente, il parametro user
contiene solo due valori populated: Id e FirstName. Prendo questo è dovuto al fatto che sto solo visualizzando queste due proprietà nella vista.
La mia domanda è questa, se sto aggiornando il nome dell'utente e poi voglio salvarlo, cosa dovrei fare riguardo alle altre proprietà User
che non sono state mostrate nella vista, dal momento che ora contengono 0 o Valori NULL nell'oggetto user
?
Ho letto un sacco su come utilizzare le entità stub, ma mi sto da nessuna parte veloce, in quanto nessuno degli esempi che ho visto effettivamente funzionare. Ad esempio, continuo a ricevere eccezioni relative a EntityKey.
Qualcuno mi può puntare a un buon tutorial/esempio di come aggiornare EF 4 entità utilizzando una classe repository, chiamato da un front-end MVC?
@ Jason Evans - che si riferisce a come la tecnica di stub, e funziona solo per le proprietà scalari. Se si possiede una proprietà di navigazione come "User.Addresses" a cui si sta vincolando nella Vista, quanto sopra non aggiornerà gli indirizzi. Ti consiglierei di recuperare nuovamente l'Utente dal DB, quindi usando 'TryUpdateModel' per aggiornare l'oggetto. Vedere la mia domanda/risposta recente qui per maggiori informazioni: http://stackoverflow.com/questions/4653834/asp-net-mvc-ef4-poco-repository-how-to-update-relationships/4666466#4666466 – RPM1984
@ RPM1984 - Ciò farebbe risparmiare fastidio con le proprietà di navigazione. L'unica preoccupazione che ho con TryUpdateModel() è la progettazione. Sto cercando di assicurarmi di poter utilizzare un repository per gestire l'acquisizione/salvataggio/eliminazione di materiale. Usando TryUpdateModel(), hai suggerimenti di buon design su come codificarlo? Non voglio che il controller gestisca qualsiasi codice relativo al database se vedi cosa intendo. –
No, non sono sicuro di cosa intendi. Prenderò comunque un'ipotesi, creare un metodo standard "Salva" nel tuo repository, che "calcola" se si tratta di un oggetto nuovo/esistente (basato su ID, ad esempio). Quindi non è necessario chiamare repository.Update o repository.Add. Basta provareUpdateModel quindi Salva. Se il tuo riferimento a te non vuole che il tuo controller tocchi la tua entità, non capisco la tua preoccupazione. I controllori hanno lo scopo di aggiornare il modello. E tutto ciò che sta facendo è aggiornare un "oggetto" - il tuo repository è ancora interessato alla persistenza di detto oggetto. – RPM1984