2008-10-01 17 views
9

Entity Framework zapewnia dużą elastyczność, aby zaktualizować dane w tym samym datacontextJak zaktualizować obiektu bez danych kontekstach

Dim personA = (from p in datacontext.Person where p.PersonID = 1 select p) 
personA.name = txtName.value 
datacontext.savechanges() 

Jeśli muszę przejść tę aktualizację funkcji do warstwy usługowej, które trwa tylko „osoba” w żądaniu , jaki byłby najlepszy sposób przypisania mojego obiektu "Person" do datacontext bez ponownego głębokiego kopiowania?

Odpowiedz

12

Musisz dołączyć obiekt encji do kontekstu danych.

Konieczne jest także rozszerzenie klasy częściowej kontekstu danych za pomocą metody AttachUpdeted. Tak jak przy dołączaniu obiektu do kontekstu danych, nie wie się, że dokonano aktualizacji. Poniższy kod poinformuje kontekst danych, że każda właściwość została zaktualizowana i musi zostać zapisana w bazie danych.

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