Je viens de commencer à utiliser Linq to SQL et le conteneur IoC Windsor Castle pour une nouvelle application web et, bien que les choses semblent fonctionner correctement dans les tests préliminaires, j'aurais vraiment besoin d'un contrôle de santé.
Je rencontrais des problèmes lorsque j'essayais d'extraire des objets de la base de données à l'aide de Linq dans différentes parties de l'application, puis de les mettre à jour dans la base de données. Comme ils provenaient de contextes de données différents, je ne pouvais pas enregistrer les modifications.
J'ai donc créé un datacontext unique utilisé dans l'ensemble de l'application - avec un peu de chance, sur la base d'une requête web. - Est-ce une façon raisonnable de résoudre le problème ?
Il se présente comme suit :
public class DataContextAccessor : IDataContextAccessor
{
private readonly DataContext dataContext;
public DataContextAccessor(string connString)
{
dataContext = new DataContext(connString);
}
public DataContext DataContext { get { return dataContext; } }
}
J'ai utilisé Castle pour instiller cette idée comme suit :
<component id="DataContextAccessor" service="DomainModel.Repositories.IDataContextAccessor, DomainModel"
type="DomainModel.Repositories.DataContextAccessor, DomainModel" lifestyle="PerWebRequest">
</component>
Ainsi, lorsque je veux accéder à la base de données dans une classe, il me suffit de déclarer IDataContext datacontext
dans mon constructeur.
- Cela créera-t-il (comme je l'espère) un contexte de données unique pour chaque requête web - et ne me posera-t-il pas de problèmes de course lorsque de nombreuses requêtes arrivent en même temps ?