Mam aplikację, która składa się z 2 części w momencieJak ... Wyświetlanie danych z bazy
- widza, który odbiera dane z bazy danych przy użyciu EF
- usługę, która manipuluje danymi z bazy danych w czasie wykonywania.
Logika za kulisami obejmuje niektóre projekty, takie jak repozytoria - dostęp do danych realizowany jest za pomocą jednostki pracy. Sam przeglądarka jest formą WPF z podstawowym ViewModel.
ViewModel zawiera ObservableCollection, które jest źródłem danych mojej przeglądarki.
Teraz pytanie brzmi - Jak mogę odzyskać dane z bazy danych co kilka minut? Zdaję sobie sprawę z dwóch następujących problemów:
To nie jest moje ostatnie dane repozytorium „loading” - robi EF „inteligentne” rzeczy i pobiera dane z lokalnej pamięci podręcznej? Jeśli tak, jak mogę wymusić na EF ładowanie danych z bazy danych?Ponowne ustawienie całej ObservableCollection lub dodawanie/usuwanie obiektów z innego wątku/backgroundworker (z wywołaniem) nie jest możliwe. Jak mam to rozwiązać?
Dodam niektóre z mojego kodu w razie potrzeby, ale w tej chwili nie sądzę, że to w ogóle mogłoby pomóc.
Edit:
public IEnumerable<Request> GetAllUnResolvedRequests() {
return AccessContext.Requests.Where(o => !o.IsResolved);
}
Ten kawałek kodu nie będzie otrzymywać najnowsze dane - edytować niektóre wiersze ręcznie (Set IsResolved true), ale ta metoda pobiera go mimo wszystko.
Edit2:
Edit3:
var requests = AccessContext.Requests.Where(o => o.Date >= fromDate && o.Date <= toDate).ToList();
foreach (var request in requests) {
AccessContext.Entry(request).Reload();
}
return requests;
Ostatnie pytanie: Powyższy kod "rozwiązuje" problem - ale moim zdaniem nie jest czysty. Czy istnieje inny sposób?
EF będzie ładować dane z bazy danych, a nie z pamięci podręcznej. Wygląda na to, że potrzebujesz asynchronicznej architektury pub/sub. –
Dziękuję za odpowiedź, ale jeśli punkt przerwania tuż za zwrotem trafi wszystkie żądania (bez względu na to, czy zmieniłem je w db ręcznie (przed powrotem)) zawierają właściwość IsResolved z wartością false => Modyfikowanie danych podczas działania nie spowoduje wyniku w zaktualizowanych danych – C4p741nZ