LINQ para iniciantes 11 - Concurrency em LINQ

watch_later 11 de jul de 2013

Como lidar com concurrency em LINQ?

LINQ dispõe de três maneiras pelas quais podemos lidar com conflitos de concurrency. Para lidar com conflitos de concurrency , precisamos quebrar o código LINQ to SQL em um bloco try e pegar o ChangeConflictException. Podemos, então, percorrer a coleção ChangeConflicts para especificar como queremos que o conflito seja resolvido.

catch (ChangeConflictException ex)
{
    foreach  (ObjectChangeConflict objchangeconf in objContext.ChangeConflicts)
    {
        objchangeconf.Resolve(RefreshMode.OverwriteCurrentValues);
    }
}

Há três maneiras fornecidos pelo LINQ para lidar com conflitos de simultaneidade
- KeepCurrentValues:​​ Quando esta opção for especificada e conflitos de concurrency contecerem, o LINQ chama os valores objeto de entidade LINQ original e não insere os novos valores do banco de dados no objeto LINQ.
- OverwriteCurrentValues:​​ Quando esta opção for especificada, o objeto atual LINQ é substituído com os valores do banco de dados.
- KeepChanges:​​ Esta é a opção mais estranha, mas pode ser útil em alguns casos. Quando falamos de aulas, eles podem ter muitas propriedades. Propriedades, que são alterados são mantidos como são, mas as propriedades que não são alterados são buscas no banco de dados e substituídas.
Precisamos usar RefereshMode para especificar quais as opções que precisamos, como mostrado no trecho de código abaixo.

Que outros recursos são fornecidos pelo LINQ para um melhor tratamento de concurrency em nível de campo?

O sistema de concurrency LINQ permite que você especifique como você deseja conflitos a serem relatados. O LINQ tem duas maneiras de relatar conflitos::
- ContinueOnConflict:​​ Esta opção faz com que o motor LINQ para continuar, mesmo que haja conflitos e, finalmente, voltar todos os conflitos no final do processo.
- FailOnFirstConflict:​​ Esta opção diz que parar logo que o primeiro conflito ocorra e retornar todos erros. Em outras palavras, o LINQ não continuará a executar o código seguinte.

objContext.SubmitChanges(ConflictMode.ContinueOnConflict);

Bom galera , ficamos por aqui a abaixo estão os links das postagens da mesma série , espero que seja útil ,qualquer dúvida comente , ou mande email para contato@virtualbase.com.br

Lista de Postagens da série LINQ PARA INICIANTES :