2016-07-06 1 views
1

Je suis assez nouveau pour Entity Framework et a obtenu le problème suivant:avec un à plusieurs dans Entity Framework

public class Bank{ 
     //Showed only problem moments 
     public Guid Id {get;set;} 
     public List<Branch> Branches { get; set; } 
     public Bank(){ 
      Branches = new List<Branch>(); 
     }  
} 

public class Branch{ 
    public Guid Id {get;set;} 
    public string Address {get;set;} 
} 

I tryed pour ajouter une nouvelle banque et de la main à partir du code et cela a fonctionné. Il a également créé des tables dans MSSQL avec tous PK et FK. Cependant, quand je tryed faire ce qui suit:

var bankData = new ApplicationContext().Banks; 
return Json(bankData, JsonRequestBehavior.AllowGet) 

je suis arrivé que mes données bancaires et succursales étaient nulles. Est-ce que je me suis trompé dans la création des relations dans CodeFirst? Entity Framework, par défaut, ne remplit pas les objets enfants sur une entité.

Répondre

4

Au EF 4.1 et plus tard, il y a une strongly typed .include qui permet à la profondeur requise de la charge désireux de préciser en fournissant des expressions appropriées Jusqu'aux profondeur.

using System.Data.Entity; // NB! 

var bankData = new ApplicationContext().Banks 
        .Include(b=> b.Branch) 

ou si vous ne voulez pas utiliser System.Data.Entity puis utilisez

new ApplicationContext().Banks.Include("Branches"); 

puis revenir JSON en utilisant le même code

return Json(bankData, JsonRequestBehavior.AllowGet) 

Désireuse Chargement:

Le chargement impatient est le processus par lequel une requête pour un type d'entité charge également des entités liées dans le cadre de la requête. Le chargement anticipé est réalisé à l'aide de la méthode Include().

Dans l'exemple suivant, il obtient tous les étudiants de la base de données en ce compris les normes en utilisant la méthode Include().

Chargement Lazy:

L'une des fonctions importantes de Entity Framework est le chargement paresseux. Le chargement paresseux consiste à retarder le chargement des données associées, jusqu'à ce que vous le demandiez spécifiquement.

0

Il existe cependant des mécanismes pour le faire. L'un est d'utiliser le chargement paresseux (que je n'aime pas parce qu'il utilise plusieurs appels à la base de données et peut causer des problèmes de performances si le développeur ne sait pas ce qui se passe) et utilise includes (qui récupère toutes les données dans un seul appel) .

Pour utiliser un include, vous pouvez:

new ApplicationContext().Banks.Include("Branches"); 
+0

oh, mes sincères remerciements. Cependant, seulement dans des buts académiques, pourriez-vous ajouter l'option de chargement paresseux aussi? – IskanderR

+0

Il y a beaucoup d'informations sur les entités liées au chargement ici: https://msdn.microsoft.com/en-us/data/jj574232.aspx – DVK