2017-01-30 2 views
-1

pour le code premiers modèles:Entity Framework Table multiple avec LINQ

public class User 
{ 
    [Key] 
    public long Id { get; set; } 
    public virtual List<Address> Addresses { get; set; } 
    public string UserName { get; set; } 
} 

public class Address 
{ 
    [Key] 
    public long Id { get; set; } 
    public string Reference { get; set; } 
    public string Street { get; set; } 
} 

J'ai créé modèle Entity Framework à partir du code premier. Cela fonctionne bien. Maintenant, je veux interroger select pour User table en utilisant linq.

public IEnumerable GetLicensee() 
{ 
    using (var db = new DataModelContext()) 
    { 
     IEnumerable query = (from b in db.User 
          select new { UserName= b.UserName,Address=b.Addresses }).ToList(); 

     return query; 
    } 
} 

Il ne retourne pas la table d'adresse, ne renvoie que le nom d'utilisateur.

+0

Etes-vous sûr de la table de base de données contient des adresses liées? Avez-vous vérifié les tables générées - il doit y avoir une colonne 'User_Id' dans la table' Address'. –

+0

oui, user_id est là. Le problème est résolu en utilisant include ("addresses") –

+0

Il est impossible de corriger la requête publiée avec 'Include'. Si elle a été corrigée, la requête est différente et le message est trompeur. –

Répondre

2

EF par défaut activée Chargement Lazy, vous devez donc utiliser le chargement hâte par appel Include(), cette méthode pouvez également obtenir des entités releated, dans votre cas la méthode Include("Addresses") se releated Adressess

chargement Désireuse est le processus par lequel un La requête d'un type d'entité charge également les entités associées dans le cadre de la requête. Le chargement anticipé est réalisé en utilisant la méthode Include.

public IEnumerable GetLicensee() 
{ 
     using (var db = new DataModelContext()) 
     { 
     IEnumerable query = (from b in db.User.Include("Addresses") 
        select new { UserName= b.UserName,Address=b.Addresses }).ToList(); 

      return query; 
     } 
} 

trouver ici more

+1

OP utilise la requête ** projection **, donc pas de chargement avide ou autre. –

+0

@IvanStoev si le chargement paresseux est sur – Alex

+0

son erreur donnant sur (u => adresse.u): Impossible de convertir l'expression lambda en type 'chaîne' car ce n'est pas un type délégué. –