Вопрос

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

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

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

Это было полезно?

Решение

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

Вам также необходимо расширить частичный класс контекста данных с помощью метода 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top