LINQ para SQL - Como os procedimentos armazenados interagem com alterações não submitadas de datacontext?

StackOverflow https://stackoverflow.com/questions/3425028

Pergunta

Alguém aqui perguntou:

"O Linq-to-SQL permite a chamada de SPS. Se este SP executar uma atualização/exclusão/inserção, preciso submeter-se () depois dele?"

E a resposta foi:

"Não, não.

Eu gostaria de esclarecer:

(Por favor, desculpe -me, sou relativamente novo no LINQ)

Sim, mas um procedimento armazenado não ignorará o objeto DataContext e modificará o próprio banco de dados? (Enquanto o LINQ modifica apenas o objeto DataContext, até que o método DataContext.SubMitchanges seja chamado, onde ele modifica o banco de dados)

Posso ter um procedimento armazenado modificar meu objeto DataContext de alguma forma? Já faz isso?

Posso ter isso para que

  • Se eu ligar para um SP com LINQ (e estou assumindo que ele modifica diretamente o banco de dados),
  • Em seguida, use o LINQ para modificar meu objeto DataContext e envie as alterações que fiz ao meu objeto DataContext,

As duas mudanças diferentes que fiz (uma com o SP, a outra com LINQ no meu datacontext) não interferem?

O que eu realmente quero é uma maneira de ter meus procedimentos armazenados modificar meu datacontext. Isso é possível?

Devo mencionar que estou convertendo um site do SQL para o LINQ que armazenou principalmente procedimentos e tentando escolher minhas batalhas com o qual os procedimentos armazenados para converter para o LINQ e quais manter no SQL e apenas fazer as chamadas SP com o LINQ.

Obrigado pela sua ajuda, -Jeff

Foi útil?

Solução

FWIW, nosso teste decisivo é qualquer procur de 'crud' trivial que insere / atualiza um único registro pode se mover para um ORM

No entanto, tendemos a deixar os Procs mais avançados (atualizações de lote, ou altamente sensíveis ao desempenho) 'como estão'.

Mas sim, você precisará ter chamado Submitchanges () antes de ligar para um Proc, que depende do estado dos dados alterados no DataContext

Possivelmente não relacionado, se você precisar controlar unidades de trabalho, consulte a colocação do TransactionsCopes em torno do seu código?

Outras dicas

Se você atualizar registros via Proc armazenado, seus objetos carregados (e rastreados) podem ficar obsoletos. Se você ligar para submitigos com objetos obsoletos, você terá exceções de simultaneidade. Você pode atualizar um objeto obsoleto usando o Refresh método em DataContext.

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