3 votes

Database.SetInitializer() dans un constructeur statique ?

Beaucoup sont peut-être conscients de la raison pour laquelle nous devons utiliser le code ci-dessous. Cependant, je veux séparer cette logique en couches et je ne veux pas faire référence au DLL Entity Framework dans ma couche web, donc j'ai fini par mettre ce code dans un constructeur statique de ma classe DbContext.

Est-ce une mauvaise idée ? Y aura-t-il une perte de performance de l'application en faisant cela ?

Database.SetInitializer>(null);

4voto

Slauma Points 76561

Il n'y a pas d'impact sur les performances qui vaille la peine d'être mentionné. Un constructeur statique est appelé une fois pour votre application et lorsque la première instance de classe est créée. Je fais cela dans la plupart des applications et je n'ai encore remarqué aucun problème.

Vous pourriez également appeler cette ligne via une méthode statique de votre couche de données sans avoir de référence à EF dans l'assembly de la couche d'application web appelante.

Je crois que cette ligne ne fait que définir une référence interne à l'initialiseur et ne demande pas de traitement coûteux. Le travail coûteux - la découverte et la construction du modèle EF - est effectué lorsque la première instance de contexte est utilisée.

En passant : Avoir ce travail coûteux au début de l'application peut parfois être souhaitable afin d'avoir le retard dès le début de l'application et l'éviter lorsque l'utilisateur lance la première requête dans l'application. Pour forcer l'initialisation, vous devez non seulement définir l'initialiseur mais également exécuter l'initialisation elle-même, par exemple comme suit :

Database.SetInitializer(null);
using (var context = new DataContext())
{
    context.Database.Initialize(false);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X