2008-10-01 15 views
9

Entity Framework eine große Flexibilität bietet Daten in der gleichen DatacontextWie ohne Datenobjekt aktualisieren Kontexte

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-Ebene verschieben muß aktualisieren, die nur „Person“ in der Anfrage nimmt , was wäre der beste Weg, um mein Anfrageobjekt "Person" dem Datenkontext zuzuweisen, ohne das tiefe Kopieren erneut durchzuführen?

Antwort

12

Sie müssen Ihr Entitätsobjekt an einen Datenkontext anhängen.

Sie müssen auch Ihre partielle Datenklasse für den Datenkontext mit der AttachUpdeted-Methode erweitern. Wenn Sie ein Objekt an einen Datenkontext anhängen, weiß es nicht, dass Aktualisierungen vorgenommen wurden. Der folgende Code wird dem Datenkontext mitteilen, dass jede Eigenschaft aktualisiert wurde und in die Datenbank geschrieben werden muss.

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(); 
    } 
} 

article 1
article 2