Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
DbContext bei Multi-User Anwendung gibt veraltete Daten wieder
DanielK
myCSharp.de - Member



Dabei seit:
Beiträge: 2

Themenstarter:

DbContext bei Multi-User Anwendung gibt veraltete Daten wieder

beantworten | zitieren | melden

verwendetes Datenbanksystem: <MSSQL>

Hallo zusammen!
Ich schreibe ein Multi-User Programm, welches Datensätze in verschiedenen Clients anzeigt und zur Bearbeitung frei gibt. Dennoch sollten alle Clients in regelmäßigen Abständen die gleichen Daten aus der DB bekommen.

Nun zu der eigentlichen Frage…

Die Objekte werden regelmäßig von einem Thread ( alle ~30 Sekunden derzeit ) aus der DB abgefragt und beim ersten Abfragen vollkommen richtig angezeigt. Sollte ein anderer Client oder in der DB jedoch ein Wert geändert werden, ist keine Änderung bei anderen Clients sichtbar. Der Lokale Context bekam die Änderung mit und zeigt sie auch Fehlerfrei, während die anderen Clients weiterhin den alten, falschen, Wert bekommen.

Wie kann ich dafür Sorgen das alle Clients immer die aktuellen Werte aus der Datenbank bekommen?

Beispiel:
Das Objekt Property Order.StateId == 1 wird bei einem Client auf 2 geändert. In der DB und dem Client der die Änderung ausführte ist die ID nun auf 2 gesetzt, während alle anderen Clients trotz neuem Abfragen des Contexts die 1 als Ausgabe bekommen.

public IQueryable<T> All()
        {
        	return _context.Set<T>().AsQueryable();
        }

Problem ist, dass die Daten nicht frisch aus der DB kommen.

MfG
Daniel
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von DanielK am .
private Nachricht | Beiträge des Benutzers
[email protected]
myCSharp.de - Member



Dabei seit:
Beiträge: 407

beantworten | zitieren | melden

Hi...

Wann bzw. wie instanzierst du den DbContext?

Wenn der DbContext beim Starten instanziert und bis zum Schließen der Anwendung weiterverwendet wird könnte dabei dieses Verhalten rauskommen.

lg
private Nachricht | Beiträge des Benutzers
f_igy
myCSharp.de - Member



Dabei seit:
Beiträge: 117

beantworten | zitieren | melden

Huhu,

hast Du nach der Änderung ein COMMIT durchgeführt? Sonst ist die Änderung nur in der eigenen Transaktion zu sehen.

Gruß
f_igy
private Nachricht | Beiträge des Benutzers
DanielK
myCSharp.de - Member



Dabei seit:
Beiträge: 2

Themenstarter:

beantworten | zitieren | melden

@ [email protected]

Derzeit wird unser DbContext beim Start instanziert und dann weiterverwendet.
Wäre es denn eher sinniger den DbContext zu verwerfen und neu generieren zu lassen?

Das hier ist übrigens die Stelle zur DbContext instanzierung.

public UnitOfWork()
        {
            if (_context == null)
            {
                _context = new UltranizerV2Context(this);
                
            }
        }

MfG
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7561
Herkunft: Waidring

beantworten | zitieren | melden

Hallo DanielK,

schau dir dazu auch Lebensdauer von DataContext / DbContext - Wie lange offen halten? an.

mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
[email protected]
myCSharp.de - Member



Dabei seit:
Beiträge: 407

beantworten | zitieren | melden

@DanielK

"UnitOfWork" aus deinem Code-Schnippsl wäre genau das richtige Stichwort.

Da ihr den DbContext aber beim Start instanziert und weiterverwendet, hat der Einsatz des Begriffs im Code wohl nur eine symbolische Bedeutung... ;)

lg
private Nachricht | Beiträge des Benutzers