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);
}
Foi útil?

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.

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