Mam następujący kod, który pobiera dane z tabeli klientaentityframework Jest już otwarty DataReader skojarzony z tym poleceniem, które muszą być zamknięte pierwszy
var customers= context.CustomerEntities.Include("Addresses").Select(Mapper.Map).ToList();
Funkcja mapowania, odwzorowuje obiekt podmiotu do biznesu obiekt i wygląda na to, że powyższy kod działa dobrze.
Jednak gdy próbuję to zrobić:
var customers= context.CustomerEntities.Select(Mapper.Map).ToList();
otrzymuję komunikat o błędzie: There is already an open DataReader associated with this Command which must be closed first
gdy funkcja mapowania jest wykonywany.
Teraz jestem świadomy, że aby rozwiązać ten problem, muszę ustawić multipleactiveresultsets=True
w ciągu połączenia. Próbowałem, i to rozwiązało mój problem.
Jednak po uruchomieniu narzędzia do profilowania SQL, zapytanie do wszystkich klientów ze struktury encji automatycznie pobrało wszystkie adresy, nawet jeśli ich nie potrzebowałem.
Czy istnieje obejście oprócz konieczności ustawienia multipleactiveresultsets=True
? Nie chcę, żeby adresy były leniwie ładowane przez cały czas.
Prawdopodobnie zechcesz sprawdzić swój kod przed swoim przykładem tutaj, założę się, że masz jeszcze aktywny kontekst, zanim twój kod zostanie kiedykolwiek uruchomiony. – Middas
Nie, nie mam innego aktywnego kontekstu –
Dan, możesz być na czymś. pozwól mi to wypróbować. –