Это ожидаемая часть любого языка программирования, потому что всегда можно создавать объекты, которые ссылаются друг на друга.При визуализации этого отладчик В visual studio просто отображает ссылки в том виде, в каком он их видит, в ответ на вашу навигацию по дереву объектов
Отойдя на мгновение от Entity Framework, рассмотрим универсальный класс коллекции LinkedList, которыйсцепленная коллекция объектов LinkedListNode.У каждого узла есть Next и Previous, в то время как сам список имеет First и Last (следовательно, связь является двунаправленной)
Если вы поместите два элемента в свой список, «hello» и «world», тогда изучитев отладчике вы увидите:
list.First LinkedListNode "hello"
.Next LinkedListNode "world"
.Previous LinkedListNode "hello"
.Next LinkedListNode "world"
Вы можете переходить весь день назад и вперед, делая дерево в визуализаторе отладчика все глубже и глубже.Это не ошибка или проблема, это просто концептуальный визуальный эквивалент написания кода:
list.First.Next.Previous.Next; //"world
Вы также можете чередовать набор Next и Previous весь день - это допустимо в C #, хотя, вероятно, и не нужно, если вы не гуляетедерево, которое ветвится, и вы хотите подняться ближе к корню, прежде чем идти по другой ветке
Эта «циклическая» структура появляется везде, где объект ссылается на другой объект, который ссылается на оригинал - DataRows DataTableу каждого есть свойство .Table, которое ссылается на таблицу, которой принадлежит строка, и так далее.Не проблема и не приведет к поломке вашего кода в каком-то бесконечном цикле - EF не будет пытаться спасти Клиентов, затем Заказы Клиента, затем Заказы Клиентов, а затем Заказы Клиентов.и т. д. Он знает, когда прекратить сохранение пары заказов клиентов