Как обновить объект без контекста данных - PullRequest
9 голосов
/ 02 октября 2008

Entity Framework обеспечивает большую гибкость для обновления данных в том же тексте данных

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

Если мне нужно переместить эту функцию обновления на уровень службы, который принимает в запросе только «Person», каков будет лучший способ назначить мой объект запроса «Person» в текстовый текст без повторного глубокого копирования?

1 Ответ

12 голосов
/ 03 октября 2008

Вам необходимо прикрепить объект вашей сущности к контексту данных.

Вам также необходимо расширить частичный класс контекста данных с помощью метода AttachUpdeted. Как, например, когда вы присоединяете объект к контексту данных, он не знает, что обновления были сделаны. Приведенный ниже код сообщит контексту данных, что каждое свойство было обновлено и должно быть записано в базу данных.

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

артикул 1
статья 2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...