L'instance de ObjectContext a été éliminé et ne peut plus être utilisé pour les opérations qui nécessitent une connexion. dans le tableau de Référence
J'ai deux tables Clients et Pays et d'utilisation ( Entity Framework avec vs 2012 )
Et le modèle de la classe
using System;
using System.Collections.Generic;
public partial class Customer
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
public Nullable<int> CountrryId { get; set; }
public string Note { get; set; }
public virtual Country Country { get; set; }
}
J'essaie de construire une requête select pour obtenir tous les clients avec un Nom de Pays. Mais je reçois toujours le message d'erreur ci-dessous.
- essayez de fermer
using
après le retour Lazy Loading
peut être activé pour que votre contexte, ce qui signifieCountry
est chargé à partir de la base de données à l'aide de la mère contexte de la connexion lorsque vous essayez de lire sa valeur en accédant à la propriété.- oui, les autres pièces sont déjà des valeurs en raison de
ToList
là, maisCountry
ne l'est pas (même dans le modèle, il estvirtual
où getter va db)
Vous devez vous connecter pour publier un commentaire.
Vous essayez d'accéder à une propriété d'association
Country
après le contexte de données a été disposé. Entity Framework, par défaut, les charges de l'association de propriétés paresseusement. En d'autres termes, il fait un autre voyage à la base de données lorsque vous essayez d'accéder à la propriété de l'association pour la première fois. Pour rendre ce voyage à la base de données, Cadre de l'Entité doit utiliser un contexte de données. Dans votre cas, il serait tentant d'utiliser les données de contexte créé parjQGridDemoEntities db = new jQGridDemoEntities()
, qui a malheureusement été éliminés à ce stade de votre code. Le contexte de données a été éliminé parce que vous avez quitté le à l'aide de bloc.Vous disposez de trois options pour contourner ce problème:
Accéder à la propriété d'association lorsque le contexte de données est encore en vie. Plus concrètement, déplacez votre code lorsque vous accédez à la propriété d'association dans votre utilisation de bloc
Avec impatience la charge de l'association de la propriété, comme expliqué dans le premier lien que j'ai précisé
customers = db.Customers.Include(c => c.Country).ToList()
Explicitement sélectionner ce que vous voulez de retour à partir de la base de données alors que le contexte de données est encore en vie. Et utiliser cette information pour construire l'objet json de votre retour.
Vous avez un chargement différé activé. Ainsi, lorsque vous essayez de charger de référence de la propriété il n'y a aucun moyen de le faire, parce que ObjectContext disposé à droite après
using
bloc.Il y a deux façons de résoudre ce problème:
Vous pouvez également désactiver le chargement paresseux, mais dans ce cas, vous obtiendrez
NullReferenceException
, qui peut aussi être fixé à l'aide de.Include(c => c.Country)
.Include
n'aide pas?Vous de l'élimination de la base de données par
using
blocMettre votre code dans
using
bloc de pas à l'extérieur.Lors de l'utilisation de
using
élément de bloc que dansusing(var element)
être éliminés lors de l'utilisation de bloc se termineCountry
propriétéil y a une solution, à l'aide de ViewBag