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;
entitymusi 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?