Entity Framework-собственные ссылки

У меня есть вопрос относительно ссылок на себя в entity framework, просто чтобы определить загрузку приложения.

К сожалению, у меня есть некоторые отношения в моих таблицах.
Из-за этого у меня есть некоторые объекты, ссылающиеся на себя.
Например:
Компания имеет некоторого клиента, клиент принадлежит к некоторым записям, эти записи сопоставлены с компанией, которая содержит различных клиентов…

(Company — > Customer — > > Entry — > > > Company — > > > > Customer ….)

Когда я хочу сериализовать это в строке json, я получу сообщение об ошибке относительно петель само ссылки (это ясно)
Делая этот запрос с Entity framework, я не получаю сообщение об ошибке.
Но когда я смотрю в отладчик, я вижу «цикл».

Мой вопрос:
Приводит ли это к высокой производительности нагрузки на моем сервере?
Или это другое обработано, поэтому я могу игнорировать эти ссылки на себя в C#?

В противном случае, я думаю, что должен внести изменения в отношения в таблицах…

Я просто хочу предотвратить проблемы с загрузкой сервера, когда у меня больше записей в таблицах.

Спасибо заранее.

1 ответ

  1. Я думаю, что статья о ленивой загрузке была бы полезна для вас. Take are look at next parts

    Ленивая загрузка-это процесс, при котором сущность или коллекция сущностей автоматически загружается из базы данных при первом доступе к свойству, ссылающемуся на сущность/сущности. При использовании типов сущностей POCO ленивая загрузка достигается путем создания экземпляров производных прокси-типов, а затем переопределения виртуальных свойств для добавления крюка загрузки.

    Ленивая загрузка и сериализация плохо сочетаются, и если вы не будете осторожны, вы можете в конечном итоге запросить всю базу данных только потому, что включена ленивая загрузка. Большинство сериализаторов работают путем доступа к каждому свойству на экземпляре типа. Доступ к свойствам вызывает ленивую загрузку, поэтому больше сущностей сериализуются. На этих сущностях осуществляется доступ к свойствам и загружается еще больше сущностей.

    Ответ для вас perfromance вопрос-Entity Framework будет загружать данные для ваших ссылочных свойств только при доступе к нему.

    И если вы хотите сериализовать классы Entity Framework, вы можете отключить LazyLoading и than Eagle load only data, которые вы хотите сериализовать

    public Company GetCompany(int id)
    {
        using (var context = new DBData())
        {
            context.Configuration.LazyLoadingEnabled = false;
            return context.Set<Company>()
                .Include(x => x.Customer)//you can add other includes which you want
                .Where(x => x.Id == id).FirstOrDefault();
        }
    }
    

    Но я настоятельно рекомендую создать другой класс только с теми свойствами, которые вы хотите сериализовать, сопоставить данные из класса EF с этим новым классом (используя AutoMapper или вручную), а затем сериализовать его с безопасностью.