Mam standardową tabelę samoczynnie odwołującą się Categories
. W moim modelu podmiotu utworzyłem asocjacje Children
i Parent
. Czy możliwe jest załadowanie całego obiektu Category
bez leniwego ładowania?Chętne ładowanie tabeli samoindlinowania
jeśli użyję poniższego kodu, to ładuje tylko do drugiego poziomu.
db.Categories.MergeOption = System.Data.Objects.MergeOption.NoTracking;
var query = from c in db.Categories.Include("Children")
where c.IsVisible == true
orderby c.SortOrder, c.Id
select c;
Czy można załadować referencje, jeśli wszystkie obiekty kategorii zostały już załadowane?
Jednym ze sposobów, aby go załadować jest dodać właściwość Children
wielokrotnie
db.Categories.Include("Children.Children.Children.Children.Children")
ale to generuje bardzo długo szalony kod T-SQL, a także, że nie robi tego, co chcę.
Ale jeśli uruchomię zapytanie "SELECT * FROM Categories", załadowałem całą tabelę, a także załadowałem wszystkie kategorie rodziców i dzieci, ponieważ wszystkie znajdują się w jednej tabeli. Więc w tym przypadku nie jest zbyt skomplikowane przypisywanie tych wczytanych rekordów do właściwości referencyjnych, czy nie? –
Jeśli rzeczywiście wykonałeś iterację całej tabeli, wszystkie obiekty * będą * w pamięci i * zostaną * już ustalone, z włączeniem lub bez. Ale tak się nie stanie, dopóki nie osiągniesz ostatniego rekordu w tabeli. Dołącz gwarancje, że powiązane obiekty będą tam na * pierwszym * rekordzie, które wykonujesz iteracyjnie. –
"Które instrukcje SQL zawierają nieograniczoną głębię w hierarchii odwołującej się do siebie?" -> Common Table Expressions w T-SQL –