Pergunta

Qual é o melhor modelo vitalício para um DataContext?Devo apenas criar um novo sempre que precisar (também conhecido como nível de função), devo manter um disponível em cada classe que o usaria (nível de classe) ou devo criar uma classe estática com um DataContext estático (app-domain nível)?Existem práticas recomendadas consideradas sobre isso?

Foi útil?

Solução

Você praticamente precisa manter o mesmo contexto de dados disponível durante todo o tempo de vida das operações que deseja executar, se algum dia for armazenar alterações que serão .SubmitChanges()'d mais tarde, caso contrário você perderá essas alterações.

Se você está apenas consultando coisas, não há problema em criá-las conforme necessário, mas se mais tarde você quiser .SubmitChanges() você terá que refatorar muito seu código, então você também pode adotar o padrão de manter efetivamente o datacontext global em todo o seu aplicativo desde o início.

Observe que o contexto dos dados é desconectado.A conexão só é feita quando os dados da consulta são enumerado (não quando você executa a consulta pela primeira vez, é um tipo de dados 'preguiçoso', portanto, fornece dados apenas quando necessário) e fecha imediatamente em seguida.Sobre .SubmitChanges() a conexão é aberta para enviar as alterações e fechada imediatamente em seguida.Então não pense em manter o datacontext ao redor mantém uma conexão aberta, isso não acontece (você pode conectar o StateChange evento da conexão para confirmar isso por si mesmo, tenho certeza disso).

Há um ótimo artigo em Blog de Rick Strahl que cobre esse tópico em profundidade, muito mais do que minha resposta aqui fornece!!

Outras dicas

Acho que Jeff Atwood falou sobre isso no Podcast do Código de Pastoreio, quando ele foi questionado sobre exatamente a mesma coisa.Ouça nos últimos 15-20 minutos ou mais.

Acho que no SO o datacontext é criado na classe Controller.Não tenho certeza sobre muitos detalhes aqui.Mas era isso que parecia.

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