2016-08-02 15 views
2

Ich habe zwei ähnliche Modelle und wollen über LinqDaten können nicht über Linq von ef lesen

using (var ctx = new TextsContext()) 
{ 
    var data = from e in ctx.Text 
       where e.LanguageCode == lang 
       select e; 

    foreach (var d in data) 
    { 
     Debug.WriteLine(d.Language, d.Fieldname); 
    } 
} 

Erstes Modell

public class Language 
{ 
    public string Code { get; set; } 
    public string Country { get; set; } 
} 

Zweites Modell

public class Text 
{ 
    public string Fieldname { get; set; } 
    public string LanguageCode { get; set; } // Add this foriegn key property 
    public string Description { get; set; } 

    // Navigation properties 
    public virtual Language Language { get; set; } 
} 

Ich verwende lesen Code zuerst (Fluent API), um die Beziehung zwischen den beiden Tabellen aufzubauen. Wenn ich mit Linq abfragen wollen, ich habe Fehlermeldung:

Es gibt bereits eine offene Datareader mit diesem Befehl zugeordnet, die muss zuerst geschlossen werden.

+0

Bitte posten Sie die * full * Ausnahme, einschließlich der Call-Stack * und * der Mapping-Code. Sie können die vollständige Ausnahme abrufen, indem Sie 'Exception.ToString()' aufrufen. Der Code, den Sie gepostet haben, würde keine solche Ausnahme auslösen, wenn Sie nur diesen Code verwenden würden –

Antwort

2

Ich nehme an, dass, wenn Sie eine der und ToList() tun wird es lösen. Vermutlich wegen des langsamen Ladens von linq, während es iteriert, erstellt es einen anderen Leser, um die andere Entität zu erhalten (Language).

using (var ctx = new TextsContext()) 
{ 
    var data = (from e in ctx.Text.Include("Language") 
       where e.LanguageCode == lang 
       select e).ToList(); 

    foreach (var d in data) 
    { 
     Debug.WriteLine(d.Language, d.Fieldname); 
    } 
} 
+1

Vielen Dank, es funktioniert. –

+0

Gern geschehen –