Como atualizar o objeto sem contextos de dados
-
03-07-2019 - |
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?
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();
}
}