Laden...

Entity Framework, Daten teilweise oder komplett In Memory auslagern?

Erstellt von Sera vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.325 Views
S
Sera Themenstarter:in
285 Beiträge seit 2005
vor 13 Jahren
Entity Framework, Daten teilweise oder komplett In Memory auslagern?

verwendetes Datenbanksystem: <bSQL Server 2008>

Ist es möglich, daß nach dem ersten Durchlauf die gelesenen Daten über EF (kein eSQL) quasi im Speicher bleiben? Zwar werden die Daten nach dem 2. Durchlauf schneller gelesen, dennoch zeigt der Activity Monitor im SQL Server diverse Aktivität.
Meine derzeitige Lösung ist es mit .ToList() dies zu umgehen, nur fehlen mir dann die Relations über mehrere Tabellen. Über L2O würde ich dann explizit in memory auslesen.

Danke für jeden Lösungsvorschlag.

2.891 Beiträge seit 2004
vor 13 Jahren

[...]nur fehlen mir dann die Relations über mehrere Tabellen. Include kennst du aber? Siehe z.B. Gewusst wie : Explizites Laden verbundener Objekte (Entity Framework)

Gruß,
dN!3L

S
Sera Themenstarter:in
285 Beiträge seit 2005
vor 13 Jahren

[...]nur fehlen mir dann die Relations über mehrere Tabellen.
Include kennst du aber? Siehe z.B.
>

Gruß,
dN!3L

Ja, ändert jedoch nichts am eigentlichen Problem. Auch wenn ich alles explizit lade, ist nicht alles wirklich offline verfügbar, wie sonst bei Dataset & co. Mit Include gibts immer noch Aktivität während des Monitoring.

2.891 Beiträge seit 2004
vor 13 Jahren

Mit Include gibts immer noch Aktivität während des Monitoring.

Und welche genau?

S
Sera Themenstarter:in
285 Beiträge seit 2005
vor 13 Jahren

Im Activity Monitor unter dem Abschnitt "Prozesse". Zwar keine I/O Aktivität, dennoch Zugriff auf den SQL Server. Wahrscheinlich hat das mit Precompilation zu tun.

Task State => RUNNING
Command => SELECT

scheint in jedem Durchlauf auf. Verschwindet nach Beenden des Programms.

mit ToList und einer foreach Schleife auf das neue Objekt gibts natürlich keine Aktivität.

2.891 Beiträge seit 2004
vor 13 Jahren

verwendetes Datenbanksystem: <bSQL Server 2008>

Ist das "b" ein Tippfehler oder bewusst?
Wenn es ein Tippfehler ist und du den MS SQL Server hat, dann schalte doch mal den SQL Server Profiler an. Dann siehst du, was genau gefragt wird.
Denn beim EF (welche Version eigentlich) kenn ich es so, dass man sämtliche DB-Aktivitäten explizit anstoßen muss. Das war eine bewusste Designentscheidung vom EF-Team - daher würde mich wundern, wenn da noch irgendwas im Hintergrund läuft.

Gruß,
dN!3L

S
Sera Themenstarter:in
285 Beiträge seit 2005
vor 13 Jahren

Tippfehler.
EF Version 4

Der SQL Profiler bestätigt das, was ich bereits schon vorhin gepostet habe. Ab dem 2.ten Durchlauf werden exakt die selben SELECTS aufgerufen, nur die Dauer ist eben weitaus geringer.

Habe mich durch einige Webseiten durchgewurschtelt und gesehen, daß eine quasi In Memory Datenbank mit EF Zugriff realisiert wurde. Quasi eben. Serialisierte POCOs werden deserialisiert und dem EF Layer übergeben. Bedeutet, daß ich in 2 verschiedenen Layern (EF und eigenes Repository für In-Memory) dieselben Objekte anlegen darf. Dachte eben, daß das EF die Daten einmalig mit NoTracking und no deferred loading in den Speicher legt und keine weiteren Zugriffe auf die DB benötigt, und die Abfragen über L2O weitergeführt werden.

Denn beim EF (welche Version eigentlich) kenn ich es so, dass man sämtliche DB-Aktivitäten explizit anstoßen muss. Das war eine bewusste Designentscheidung vom EF-Team - daher würde mich wundern, wenn da noch irgendwas im Hintergrund läuft.

Was man in den context Optionen einstellen kann. Im Hintergrund läuft ja nichts, nur eben wenn man eine Abfrage erneut im selben context anstößt.