2011-04-07 2 views
4

J'essaie de renvoyer en tant qu'objet complètement profond JSON (avec toutes les relations de clés étrangères remplies), mais j'obtiens des valeurs NULL pour tous les objets référencés.Obtention d'un objet complet avec le code First Entity Framework 4.1

Voici l'appel pour obtenir l'objet:

public ActionResult GetAll() 
    { 
     return Json(ppEFContext.Orders, JsonRequestBehavior.AllowGet); 
    } 

Et voici l'objet de la commande elle-même:

public class Order 
{ 
    public int Id { get; set; } 

    public Patient Patient { get; set; } 

    public CertificationPeriod CertificationPeriod { get; set; } 

    public Agency Agency { get; set; } 

    public Diagnosis PrimaryDiagnosis { get; set; } 

    public OrderApprovalStatus ApprovalStatus { get; set; } 

    public User Approver { get; set; } 

    public User Submitter { get; set; } 

    public DateTime ApprovalDate { get; set; } 

    public DateTime SubmittedDate { get; set; } 
    public Boolean IsDeprecated { get; set; } 
} 

Je n'ai pas encore trouvé une bonne ressource sur l'utilisation EF 4.1 annotations. Si vous pouviez en suggérer une bonne, qui a la réponse, vous pourriez me donner le lien et ce serait assez une réponse pour moi!

Cordialement,

Guido

Mise à jour

j'ai ajouté le mot-clé virtuel comme par Saxman et je suis maintenant traitant de la référence circulaire numéro d'erreur.

+0

Jetez un oeil ici: http://stackoverflow.com/questions/4251794/how-to-have-many-to-many-association-in-entity-framework-code-first quel type d'un Enumerable est le OrderApprovalStatus etc –

Répondre

2

Ajouter le mot-clé virtual devant vos entités apparentées:

public class Order 
{ 
    public int Id { get; set; } 

    public virtual Patient Patient { get; set; } 

    public virtual CertificationPeriod CertificationPeriod { get; set; } 

    public virtual Agency Agency { get; set; } 

    public virtual Diagnosis PrimaryDiagnosis { get; set; } 

    public virtual OrderApprovalStatus ApprovalStatus { get; set; } 

    public virtual User Approver { get; set; } 

    public virtual User Submitter { get; set; } 

    public DateTime ApprovalDate { get; set; } 

    public DateTime SubmittedDate { get; set; } 
    public Boolean IsDeprecated { get; set; } 
} 

Vous pourriez finir avec une erreur A circular reference was detected while serializing an object... si vos objets ont des références les uns des autres. Dans ce cas, vous devrez créer un ViewModel ou quelque chose de similaire pour surmonter ce problème. Ou utilisez LINQ pour projeter un objet anonyme.

+0

Cela a progressé, mais maintenant je suis là où vous décrivez. Avec une exception de référence circulaire. Je suis en train de lire sur l'ajout de l'ID de l'objet étranger au modèle et d'autres solutions. –

+0

Vous ne pouvez pas vraiment faire grand-chose à ce sujet pour l'instant, la sérialisation avec un objet référençant un autre objet n'est pas possible. Comme je l'ai suggéré, vous pouvez créer un ViewModel qui n'a que les données dont vous avez besoin, ou un projet vers un objet anonyme, par exemple: http://stackoverflow.com/questions/4436328/how-do-i-avoid-a- circular-reference-while-sérialisation-entity-framework-classe – Saxman

2

En savoir plus sur Loading Related Objects

+0

Ma première pensée était de regarder le chargement paresseux. –

+0

Oui, mais si vous avez toujours besoin de charger chaque propriété référencée, écrire explicitement Inclure avec chaque chargement n'est pas confortable, peut-être il y a une autre façon de configurer le chargement paresseux – archil

Questions connexes