2017-01-30 6 views
-1

für Code ersten Modelle:Entity Framework mehrere Tabelle mit 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; } 
} 

Ich habe zuerst von Code Entity Framework-Modell. Es funktioniert gut. Jetzt möchte ich abfragen für Benutzer Tabelle mit Linq abfragen.

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; 
    } 
} 

Es gibt keine Adresstabelle zurück, gibt nur den Benutzernamen zurück.

+0

Sind Sie sicher, dass die Datenbanktabelle zugehörigen Adressen enthält? Haben Sie die generierten Tabellen überprüft - in der Tabelle "Address" muss die Spalte "User_Id" stehen. –

+0

Ja, user_id ist da. Das Problem wird behoben, indem man include ("addresses") benutzt. –

+0

Es gibt keine Möglichkeit, die gepostete Abfrage mit 'Include' zu ​​fixieren. Wenn es behoben wurde, ist die Abfrage anders und der Beitrag ist irreführend. –

Antwort

2

EF standardmäßig aktiviert Lazy Loading-, so müssen Sie durch Anruf eifrig Laden verwenden Include(), diese Methode auch releated Entities erhalten, in Ihrem Fall Include("Addresses") Methode Adressess

Eager Laden releated bekommen ist der Prozess, bei dem ein Abfrage für einen Entitätstyp lädt auch verwandte Entitäten als Teil der Abfrage. Eager-Laden wird durch Verwendung der Include-Methode erreicht.

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; 
     } 
} 

finden hier more

+1

OP verwendet ** Projektion ** Abfrage, so dass keine eifrig oder was auch immer laden benötigt wird. –

+0

@IvanStoev wenn Lazy Loading ist auf – Alex

+0

seine geben Fehler auf (u => u.addresses): Kann Lambda-Ausdruck nicht in Typ "String" konvertieren, weil es kein Delegate-Typ ist. –