2010-05-06 7 views
1

Je viens de mettre à jour pour utiliser EF 4.0 où avant j'utilisais Linq 2 SQL.Entity Framework (4.0) comment exclure une table liée

J'ai une requête:

var UserList = this.repository.GetUsers(); 
    return Json(UserList, JsonRequestBehavior.AllowGet); 

Ce générait une erreur: "A circular reference was detected while serializing an object of type"

Cela a incité ce code qui a bien fonctionné dans L2S:

var UserList = this.repository.GetUsers(); 
     foreach (User u in UserList){ 
      u.Subscriptions = null; 
     } 
    return Json(UserList, JsonRequestBehavior.AllowGet); 

Comment puis-je arrêter EF de regarder dans la table des abonnements, je veux juste la liste des utilisateurs, aucune des propriétés connexes et l'exemple ci-dessus ne semble pas fonctionner pour cela.

Cheers, Kohan

Répondre

2

Projetez votre UserList avant de passer à la sérialiseur JSON afin qu'il ne plonge pas dans l'une des propriétés générées EF.

var UserList = this.repository.GetUsers().Select(user => new {Name = user.Name, Email = user.Email, ...); 
+0

Bien sûr :) - Merci pour cela. Travail terminé. – 4imble

1

Il existe une approche beaucoup plus simple pour cela.
Tout ce que vous avez à faire est de mettre LazyLoadingEnabled propriété sur la configuration de votre contexte faux

Ce sera à peu près comme la ligne suivante:

context.Configuration.LazyLoadingEnabled = false; 

Et vous pouvez avoir votre requête comme suit:

var userList = from u in context.users 
       select u; 

Hope it helps

Questions connexes