Próbuję wczytać listę różnych kolorów z poprzednio wczytanej listy produktów na stronie. Tak ciągnąć w produktach zrobić to:Entity Framework AsNoTracking przerywa połączenie z Distinct
var products = Products
.Include(p => p.ProductColor)
.ToList();
Potem zrobić niektóre przetwarzania na produkty nich chcę uzyskać listę wszystkich odrębnych kolorów używanych przez produkty, więc mogę to zrobić:
var colors = products
.Select(p => p.ProductColor)
.Distinct();
Działa to świetnie, jednak jeśli dodam połączenie z numerem .AsNoTracking()
do oryginalnego wywołania produktów, otrzymuję teraz wpis na mojej liście kolorów dla każdego wpisu na liście produktów.
Dlaczego jest różnica w tych dwóch? Czy istnieje sposób na utrzymanie Entity Framework w śledzeniu obiektów (są one używane tylko do odczytu) i uzyskania pożądanego zachowania?
Oto moja kwerenda po dodaniu wywołanie AsNoTracking()
var products = Products
.AsNoTracking()
.Include(p => p.ProductColor)
.ToList();
Z tego, co napisałeś .AsNoTracking powinien działać dobrze, gdzie dokładnie umieszczasz go w zapytaniu –
@LukeMcGregor, zaktualizowałem pytanie o moje zapytanie za pomocą '.AsNoTracking' – heavyd
Czy to tylko literówka, zapytanie kończy się na ToList i nie ma w nim Odkrycia? –