Wie zu aktualisieren Objekt ohne Datenkontexte
-
03-07-2019 - |
Frage
Entity Framework bietet eine große Flexibilität Daten in der gleichen Datacontext zu aktualisieren
Dim personA = (from p in datacontext.Person where p.PersonID = 1 select p)
personA.name = txtName.value
datacontext.savechanges()
Wenn ich diese Funktion Update Service-Schicht zu bewegen, die nur „Person“ in der Anfrage nimmt, was wäre der beste Weg, um mein „Person“ Request-Objekts in die Datacontext zuweisen, ohne erneut das tiefe Kopieren zu tun?
Lösung
Sie benötigen Entitätsobjekt mit einem Datenkontext zu befestigen.
Sie müssen auch Ihre Datenkontext partielle Klasse mit dem AttachUpdeted Verfahren erweitern. Wie, wenn Sie ein Objekt mit einem Datenkontext anhängen weiß es nicht, dass Aktualisierungen vorgenommen wurden. Der folgende Code wird den Datenkontext sagen, jede Eigenschaft wurde aktualisiert und muss in die Datenbank geschrieben werden.
public static void Save(EntityObject entity)
{
using(MyContext ctx = new MyContext)
{
ctx.AttachUpdated(entity);
ctx.SaveChanges();
}
}
public static void AttachUpdated(this ObjectContext obj, EntityObject objectDetached)
{
if (objectDetached.EntityState == EntityState.Detached)
{
object original = null;
if (obj.TryGetObjectByKey(objectDetached.EntityKey, out original))
obj.ApplyPropertyChanges(objectDetached.EntityKey.EntitySetName, objectDetached);
else
throw new ObjectNotFoundException();
}
}