Anexando entidades a contextos de dados
-
09-06-2019 - |
Pergunta
No LINQ to SQL, é possível verificar se uma entidade já faz parte do contexto de dados antes de tentar anexá-la?
Um pouco de contexto se ajudar...
Eu tenho esse código no meu global.asax
como método auxiliar.Normalmente, entre solicitações, isso não é um problema.Mas logo após o login, isso está sendo chamado mais de uma vez, e na segunda vez acabo tentando anexar o Member
objeto na mesma unidade de trabalho onde foi criado.
private void CheckCurrentUser()
{
if (!HttpContext.Current.User.Identity.IsAuthenticated)
{
AppHelper.CurrentMember = null;
return;
}
IUserService userService = new UserService();
if (AppHelper.CurrentMember != null)
userService.AttachExisting(AppHelper.CurrentMember);
else
AppHelper.CurrentMember = userService.GetMember(
HttpContext.Current.User.Identity.Name,
AppHelper.CurrentLocation);
}
Solução
Acredito que existem dois métodos para fazer isso.
DataContext.TableName.Contains(Item)
ou usamos o campo id.Se o item for inserido no Banco de Dados, será atribuída uma linha a ele.
if(Item.id == 0)
DataContext.Insert(Item)
else
DataContext.Update(Item)
Outras dicas
Em vez de anexar a um novo contexto de dados, por que não apenas consultar novamente o objeto no novo contexto de dados?Acredita que é uma estratégia mais confiável e sem estado.