Pergunta

quadro Entidade proporciona grande flexibilidade para atualizar dados no mesmo datacontext

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

Se eu tiver que mover essa função Update para camada de serviço que leva apenas "Pessoa" no pedido, qual seria a melhor maneira de atribuir a minha "pessoa" objeto de solicitação para o datacontext sem fazer a cópia profunda novamente?

Foi útil?

Solução

Você precisa anexar o objeto de entidade para um contexto de dados.

Você também precisa estender sua classe parcial contexto de dados com o método AttachUpdeted. Como quando você anexar um objeto a um contexto de dados não sabe que as atualizações foram feitas. O código abaixo irá dizer o contexto de dados cada propriedade foi atualizado e necessidades a serem gravados para o banco de dados.

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

artigo 1
artigo 2

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top