J'ai été d'explorer les différentes méthodes de montage/la mise à jour d'un enregistrement dans Entity Framework 5 dans un ASP.NET MVC3 de l'environnement, mais jusqu'à présent, aucun d'entre eux cochez toutes les cases dont j'ai besoin. Je vais vous expliquer pourquoi.
J'ai trouvé trois méthodes que je vais vous parler des avantages et des inconvénients:
Méthode 1 - Charger l'enregistrement, mise à 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();
}
Pros
- Pouvez spécifier les propriétés de changement
- Points de vue n'ont pas besoin de contenir tous les biens
Cons
- 2 x requêtes sur la base de données à charger puis la mise à jour
Méthode 2 - Charge du dossier original, définissez les valeurs modifiées
var original = db.Users.Find(updatedUser.UserId);
if (original != null)
{
db.Entry(original).CurrentValues.SetValues(updatedUser);
db.SaveChanges();
}
Pros
- Seulement les propriétés modifiées sont envoyées à la base de données
Cons
- Points de vue doivent contenir tous les biens
- 2 x requêtes sur la base de données à charger puis la mise à jour
Méthode 3 - Attachez l'enregistrement mis à jour et l'ensemble de l'état de EntityState.Modifié
db.Users.Attach(updatedUser);
db.Entry(updatedUser).State = EntityState.Modified;
db.SaveChanges();
Pros
- 1 x requête sur la base de données à mise à jour
Cons
- Ne pouvez pas spécifier les propriétés de changement
- Points de vue doivent contenir tous les biens
Question
Ma question pour vous les gars; est-il un moyen propre que je peux réaliser cette série d'objectifs?
- Pouvez spécifier les propriétés de changement
- Points de vue n'ont pas besoin de contenir tous les biens (comme le mot de passe!)
- 1 x requête sur la base de données à mise à jour
Je comprends que c'est tout à fait mineur chose à relever, mais j'ai peut-être manquant une solution simple à ce. Si pas de méthode on va l'emporter ;-)