2012-08-09 3 views
1

Je m'efforce de créer un site avec beaucoup de modèles. Devrais-je avoir des contextes individuels, ou devrais-je en avoir un? J'ai déjà mis tous mes Dbsets dans le contexte général que j'ai fait, juste pour que Add-Migration et Update-Database fonctionnent réellement. (car il ne peut gérer qu'un seul contexte).Entité framework DBContextes comment structurer?

J'ai remarqué que chaque contrôleur fortement typé possède une instance de son contexte de modèle associé. Maintenant, je me demande si je devrais avoir un seul contexte ouvert (mon contexte de superclasse parapluie) ouvert de façon permanente pour un cycle de vie de la page. Il semble trop inefficace de continuer à créer de nouvelles instances d'un contexte et de les disposer (à l'intérieur de méthodes locales) tout le temps. Quelle est la manière recommandée de s'y prendre?

Répondre

1

Il est préférable d'avoir un contexte de suivi de nombreuses entités. Le même contexte peut alors suivre toutes les entités et il sera utile lors de l'utilisation d'une requête de jointure et de mise à jour d'entités ayant une relation de clé étrangère. Vous pouvez également utiliser l'API fluide pour configurer les entités dans la méthode DBContext "OnModelCreating". Si le contexte ne les a pas tous, alors configurer les relations d'entités devient difficile. Le regroupement d'entités dans un contexte différent finira par affecter la maintenance du code. J'aime la facilité de l'API pour configurer des entités qui gardent le modèle propre et futur.

DBContext a la méthode Dispose que vous pouvez remplacer. Nous pouvons en faire un meilleur usage. En outre DBContext crée un contexte de base de données d'où est appelé ce qui est absolument bien. C'est ce que nous voulons, n'est-ce pas? Une requête entrante se présente sous la forme d'un thread qui crée un DBContext (un contexte de base de données), puis interroge la base de données, récupère le modèle, puis remplit la vue qui est ensuite renvoyée à l'utilisateur. L'important est d'utiliser l'instruction "using" pour DBContext qui mettra instantanément le contexte hors de l'accolade. Si vous faites cela, vous n'avez aucun problème avec le contexte de vie à travers le cycle de vie de la demande.

using (MyDbContext dbCtx = new MyDbContext()) 
{ 
    //fetch the model 
} 
//here the context is disposed.