2012-12-19 2 views
9

Angenommen, ich habe eine DataContext Objekt und den Zugang zwei Tabellen zur gleichen Zeit:Kann ich gleichzeitig über dasselbe DataContext-Objekt auf mehr als eine Tabelle zugreifen?

using(var context = new DataContext(connectionString)) { 
    foreach(firstTableEntry in context.GetTable<FirstTable>()) { 
     switch(firstTableEntry.Type) { 
     case RequiresSecondTableAccess: 
     { 
      var secondTable = context.GetTable<SecondTable>(); 
      var items = secondTable.Where(item => item.Id = firstTableEntry.SecondId); 
      foreach(var item in items) { 
       handleItem(item); 
      } 
     } 
     default: 
      // not accessing the second table 
    } 
} 

Bitte beachte, dass ich die gleichen DataContext nicht mit den ersten Abfrageergebnissen stoppen, während Anfragen an den anderen Tisch zu machen und alle Objekte verwende die Zeit.

Ist eine solche Verwendung zulässig? Sollte ich Probleme mit diesem Ansatz erwarten?

Antwort

3

Dies funktioniert nur, wenn Sie Unterstützung für Multiple Active Recordsets (MARS) in Ihrer Datenbank-Engine haben. Wenn nicht, erzeugen Sie eine Ausnahme. Ansonsten können Sie das auf jeden Fall tun.

Wenn Sie keine MARS-Unterstützung haben, müssen Sie .AsEnumerable verwenden, um alle Datensätze gleichzeitig aus der Datenbank herunterzuladen und in ein In-Memory-Enumerable zu konvertieren.

Hier ist another great resource auf was in Entity Framework verwendet MARS und was Sie nicht tun können, wenn Sie es nicht haben.

1

Wie von David kommentiert. Ich würde zu seiner Info hinzufügen ... Siehe WEB.CONFIG wie folgt, MARS = True in Verbindungszeichenfolge

<connectionStrings> 
<add name="ContextNameXYZ" connectionString="Data Source=ServerName;Initial Catalog=DBName;Integrated Security=True;MultipleActiveResultSets=True;App=EntityFramework" 
    providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
Verwandte Themen