Mit Repository-Muster, was ist der effektivste Weg, Aufzeichnungen zu aktualisieren?
-
07-07-2019 - |
Frage
Ich bin die Umsetzung Repository-Muster mit ADO.NET Entity Framework. Ich sehe, dass Aufzeichnungen relativ komplizierter als nur das Hinzufügen oder Entfernen aus der Datenbank zu aktualisieren. Im folgenden sehen Sie die Update-Anweisung und fügen Erklärung für Ihr Urteil.
Ich frage mich, ob es eine Möglichkeit ist, dass ich den Rekord aktualisieren kann, ohne die ursprüngliche Datensatz zu retreive zu haben.
public void Update(User user)
{
var userToUpdate = (from u in db.UserSet
where u.UserID == user.UserID
select u).FirstOrDefault(); //original record
db.ApplyPropertyChanges(userToUpdate.EntityKey.EntitySetName,
user);
db.SaveChanges();
}
In Erklärung für den gleichen Repo:
public void Add(User user)
{
user.MemberFrom = DateTime.Now;
_repository.AddToUserSet(user);
_repository.SaveChanges();
}
Lösung
Nein, können Sie nicht tun, mit EF (es sei denn, Sie ADO.NET verwenden, um direkt natürlich). Das heißt, können Sie den Abrufcode vereinfachen, indem sie einige Methoden zur Teil Klasse Ihres Unternehmens Kontext hinzufügen. Dies ist, wie ich es tun:
public partial class MyEntities
{
public T GetById<T>(object id) where T : class
{
EntityKey key = CreateKey<T>(id);
// see http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.getobjectbykey.aspx
return (T)GetObjectByKey(key);
}
public static EntityKey CreateKey<T>(object id)
{
var type = typeof(T);
return new EntityKey("MyEntities." + type.Name, "Id", id);
}
}
Nun sollte Ihr oben Code sein
public void Update(User user)
{
var userToUpdate = db.GetById<UserSet>(user.UserID);
db.ApplyPropertyChanges(userToUpdate.EntityKey.EntitySetName, user);
db.SaveChanges();
}