Nie ma Detach(object entity)
na DbContext
.
Czy mogę najpierw odłączyć obiekty w kodzie EF?
Nie ma Detach(object entity)
na DbContext
.
Czy mogę najpierw odłączyć obiekty w kodzie EF?
Odpowiedzi:
Jeśli chcesz odłączyć istniejący obiekt, postępuj zgodnie z radą @ Slauma. Jeśli chcesz wczytać obiekty bez śledzenia zmian użyj:
var data = context.MyEntities.AsNoTracking().Where(...).ToList();
Jak wspomniano w komentarzu, nie spowoduje to całkowitego odłączenia jednostek. Nadal są podłączone i leniwe ładowanie działa, ale jednostki nie są śledzone. Powinno to być używane na przykład, jeśli chcesz załadować encję tylko do odczytu danych i nie planujesz ich modyfikować.
To jest opcja:
dbContext.Entry(entity).State = EntityState.Detached;
entity
musi to być zmaterializowany obiekt typu, który jest częścią twoich klas modelowych (osoba, klient, zamówienie itp.). Nie można bezpośrednio przekazać IQueryable <T> do dbContext.Entry(...)
. Czy to było pytanie, które miałeś na myśli?
Detached
. Jeśli chcesz załadować jednostki z bazy danych bez dołączania ich w ogóle do kontekstu (bez śledzenia zmian), użyj AsNoTracking
.
Detached
.
using(ctx){ return ctx....ToList(); }
. W takich przypadkach użycieAsNoTracking()
miałoby sens, ponieważ zaoszczędziłbym niepotrzebnie wypełnianie kontekstu obiektu. Myślę, że prawdopodobnie przyniosłoby to korzyści w zakresie wydajności i zużycia pamięci, szczególnie w przypadku dużych list, prawda?