63 votes

Désactiver le chargement différé par défaut dans Entity Framework 4

Il semble que le chargement différé est activé par défaut dans EF4. Au moins, dans mon projet, je peux voir que la valeur de

dataContext.ContextOptions.LazyLoadingEnabled

est vrai par défaut. Je ne veux pas le chargement paresseux et je ne veux pas avoir à écrire:

dataContext.ContextOptions.LazyLoadingEnabled = false;

chaque fois que je reçois un nouveau contexte. Donc, il y a un moyen de le désactiver par défaut, disons, à travers l'ensemble du projet?

69voto

Slauma Points 76561

Edit: La réponse suivante se réfère à la Base de données de la Première ou de Modèle-Première de flux de travail (les deux seules les flux de travail qui étaient disponibles avec Entity Framework (version <= 4.0) lorsque la question a été posée). Si vous êtes à l'aide de Code-Première de flux de travail (qui est disponible depuis EF version >= 4.1) de procéder à la ssmith la réponse à cette question pour une solution correcte.


Le fichier edmx a dans l' <ConceptualModel> et <EntityContainer> définition d'un attribut pour le chargement paresseux où vous pouvez définir le chargement paresseux généralement à false:

<EntityContainer Name="MyEntitiesContext" annotation:LazyLoadingEnabled="false">

Cela crée le paramètre suivant dans le ObjectContext constructeur:

public MyEntitiesContext() : base("name=MyEntitiesContext", "MyEntitiesContext")
{
    this.ContextOptions.LazyLoadingEnabled = false;
    OnContextCreated();
}

Modifier (en particulier en référence aux ctorx' commentaire ci-dessous):

Mon exemple n'est pas fait de cette façon que le ObjectContext (ou DbContext dans de nouveaux EF versions) doit être modifiée manuellement (ce qui serait écrasé à chaque mise à jour du modèle de la base de données, comme ctorx souligné), mais que l' EntityContainer élément dans l' edmx:ConceptualModels de la section du fichier EDMX doit être modifié par adjonction de l' annotation:LazyLoadingEnabled="false" attribut - soit manuellement dans un éditeur XML ou sur la page de propriétés de la surface de concepteur où cette option est disponible. Cette modification du fichier EDMX va générer automatiquement le contexte de la classe avec les handicapés chargement différé option dans le constructeur comme indiqué ci-dessus. Le fichier EDMX modification elle-même ne pas être écrasé quand le modèle est mis à jour de la base de données.

64voto

ssmith Points 1655

J'ai envoyé un petit exemple montrant comment le nouveau Chargement différé des fonctionnalités de travailler avec EF Premier Code. La réalisation de ce que vous voulez dans le Premier Code modèle est tout simplement une question d'ajouter une ligne à votre DbContext du constructeur, comme suit:

public BlogContext() : base()
{
    this.Configuration.LazyLoadingEnabled = false;
}

24voto

beauXjames Points 1565

Si vous utilisez peut-être EF4 le Premier Code, ouais? Ainsi, lors de l'Initialisation de votre contexte, il est le remplacement de "OnModelCreated'.

Dans cette méthode, j'ai simplement appelé et définissez la propriété et le tout a été résolu.

protected override void OnModelCreating(DbModelBuilder modelBuilder) {
     base.Configuration.LazyLoadingEnabled = false;
}

Mon modèle est maintenant beaucoup plus agréable au goût. Chargement différé est grand...mais pas quand vous n'en voulez pas. Et quand vous commencez à avoir des références circulaires, c'est juste ridicule.

23voto

AminSaghi Points 3844

Vous pouvez également le faire à partir de la designer. Il suffit d'ouvrir le .fichier edmx, cliquez-droit n'importe où sur le modèle et sélectionnez Propriétés. Ensuite, réglez l' LazyLoadingEnabled de faux.

4voto

Todd Points 2386

Si vous êtes à la modélisation de code-première, il suffit de retirer l' virtual mot-clé sur votre référence/propriétés de l'objet. Après avoir virtuel sur une référence permettra LazyLoading sur la référence.

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