10
votes

Déclarer des contextes de cadre d'entité avec l'utilisation

Quelle est la meilleure pratique de déclarer l'entité cadre Contexts xxx pré>

ou p> xxx pré>

Avons-nous besoin d'utiliser en entitéFramework? Si oui, ma 2e question p>

dans la couche de dataAccess est exécutant EF et stocker le résultat dans Ienumerable Inside à l'aide de P>

My DL P>

"The operation cannot be completed because the DbContext has been disposed Entity Framework"


3 commentaires

Je pense que ce lien est exactement ce que vous avez posé: Stackoverflow.com/Questtions/824330/...


Oui, s'il vous plaît vérifier ma 2e question


Dupliqué possible de Utilisation de la déclaration et de l'entité framework


3 Réponses :


8
votes

Vous pouvez éviter le comportement EF de chargement paresseux en appelant .tolist () sur le ienumerable avant que le contexte ne soit disposé (c.-à-d. Dans votre en utilisant bloc)


3 commentaires

Oui, utilisez toujours l'utilisation de Paul. +1 donné. Vous avez toujours un problème similaire si votre modèle a des objets de petits-enfants cependant. Je n'ai pas passé de temps à résoudre ce temps.


@James je pense que vous pouvez obtenir vos enfants / petits-enfants en utilisant .include () dans la relève d'origine LINQ


Le problème est que, avec de grands ensembles de données, cela chargera toute la chose en mémoire, ce que vous voulez éviter en premier lieu en utilisant des curseurs et ienumérables.



3
votes

Votre demande sera exécutée vers la DataSource dès que vous appellerez la méthode .tolist ().

C'est pourquoi vous ne pouvez pas exécuter .tolist () dans votre contrôleur comme votre contexte que votre contexte soit disposé à la fin de l'utilisation du bloc. p>

dans votre méthode DL, faites simplement quelque chose comme: P>

var mySomethingIEnumerable = DL.Function();


0 commentaires

6
votes

Oui, une utilisation est la meilleure pratique car elle nettoie votre contexte. Utilisation de l'instruction est un raccourci pour:

public IEnumerable<Employee> GetEmployeesInAccounting()
{
    using(var myContext = new MyDbContext())
    {
        return myContext.Employees.Where(emp => emp.Department == 'Accounting');
    }
}

// Code that fails, Assuming Manager is a lazy loaded entity, this results in an exception but it compiles no problem
var acctEmps = GetEmployeesInAccounting();
var something = acctEmps.First().Department.Manager.Department;


0 commentaires