Cześć,
uczę się EfCore i jestem na temacie tworzenia relacji. Przeglądałem dokumentację MS (https://learn.microsoft.com/en-us/ef/core/modeling/relationships/many-to-many) i dostosowując trzeci przykład, stworzyłem dwie klasy:
public class User
{
...
public int Id { get => _id; set => _id = value; }
public string FirstName { get => _firstName; set => _firstName = value; }
public string LastName { get => _lastName; set => _lastName = value; }
public List<Privilege> Privileges { get => _privileges; set => _privileges = value; }
}
public class Privilege
{
...
public int Id { get => _id; set => _id = value; }
public string Name { get => _name; set => _name = value; }
public List<User> Users { get => _users; set { _users = value; } }
}
I mam pytanie - jak EF zarządza pamięcią w takim przypadku?
Pobrałem użytkownika za pomocą:
User u = context.Users
.Include(x => x.Privileges)
.First();
Gdy podejrzę go w debuggerze, tworzy się pętla instancji:

Chodzi mi o to, że użytkownik ma listę uprawnień, a każde uprawnienie ma listę użytkowników. Problem w tym, że nie jest ona pusta, a po rozwinięciu pokazuje się ten sam użytkownik.
Jest to najbardziej widoczne podczas serializacji danych, bo wywołanie:
JsonSerializer.Serialize(user);
Wyrzuca wyjątek:
System.Text.Json.JsonException: „A possible object cycle was detected. This can either be due to a cycle or if the object depth is larger than the maximum allowed depth of 64. Consider using ReferenceHandler.Preserve on JsonSerializerOptions to support cycles. Path: $.Privileges.Users.Privileges.Users.Privileges.Users.Privileges.Users.Privileges.Users.Privileges.Users.Privileges.Users.Privileges.Users.Privileges.Users.Privi
Pomaga jedynie dodanie atrybutu [JsonIgnore] przed właściwością Privileges.
Czy ma to jakiś wpływ na wydajność aplikacji lub zużycie pamięci?
Z góry dziękuję za wszystkie odpowiedzi