J'ai exploré différentes méthodes de modification / mise à jour d'un enregistrement dans Entity Framework 5 dans un environnement ASP.NET MVC3, mais jusqu'à présent, aucune d'entre elles ne coche toutes les cases dont j'ai besoin. Je vais vous expliquer pourquoi.
J'ai trouvé trois méthodes auxquelles je mentionnerai les avantages et les inconvénients:
Méthode 1 - Charger l'enregistrement d'origine, mettre à jour chaque propriété
var original = db.Users.Find(updatedUser.UserId);
if (original != null)
{
original.BusinessEntityId = updatedUser.BusinessEntityId;
original.Email = updatedUser.Email;
original.EmployeeId = updatedUser.EmployeeId;
original.Forename = updatedUser.Forename;
original.Surname = updatedUser.Surname;
original.Telephone = updatedUser.Telephone;
original.Title = updatedUser.Title;
original.Fax = updatedUser.Fax;
original.ASPNetUserId = updatedUser.ASPNetUserId;
db.SaveChanges();
}
Avantages
- Peut spécifier quelles propriétés changent
- Les vues n'ont pas besoin de contenir toutes les propriétés
Les inconvénients
- 2 x requêtes sur la base de données pour charger l'original puis le mettre à jour
Méthode 2 - Charger l'enregistrement d'origine, définir les valeurs modifiées
var original = db.Users.Find(updatedUser.UserId);
if (original != null)
{
db.Entry(original).CurrentValues.SetValues(updatedUser);
db.SaveChanges();
}
Avantages
- Seules les propriétés modifiées sont envoyées à la base de données
Les inconvénients
- Les vues doivent contenir chaque propriété
- 2 x requêtes sur la base de données pour charger l'original puis le mettre à jour
Méthode 3 - Attachez l'enregistrement mis à jour et définissez l'état à EntityState.Modified
db.Users.Attach(updatedUser);
db.Entry(updatedUser).State = EntityState.Modified;
db.SaveChanges();
Avantages
- 1 x requête sur la base de données à mettre à jour
Les inconvénients
- Impossible de spécifier quelles propriétés changent
- Les vues doivent contenir chaque propriété
Question
Ma question à vous les gars; existe-t-il un moyen propre de réaliser cet ensemble d'objectifs?
- Peut spécifier quelles propriétés changent
- Les vues n'ont pas besoin de contenir toutes les propriétés (comme le mot de passe!)
- 1 x requête sur la base de données à mettre à jour
Je comprends que c'est une chose assez mineure à souligner, mais je manque peut-être une solution simple à cela. Sinon, la méthode prévaudra ;-)