Отложенная загрузка свойств бизнес-модели с помощью ASP.NET Core

Я хотел бы реализовать ленивую загрузку некоторых свойств в своих бизнес-моделях. Как лучше всего это сделать с помощью ASP.NET Core? Внедрить контекст базы данных в мою модель и запросить его при использовании свойства? Или реализовать общий метод, такой как void LazyLoadProperty(string propertyName, ApplicationDbContext dbContext), в моей модели и вводить контекст базы данных каждый раз, когда мне нужно лениво загруженное значение?

Для информации я использую .NETCoreApp1.1 и Entity Framework Core.


person AdrienTorris    schedule 19.01.2017    source источник
comment
Зачем вообще нужна отложенная загрузка в веб-приложении?   -  person DavidG    schedule 19.01.2017
comment
потому что некоторые свойства требуют сложных запросов с несколькими объединениями, чтобы получить значение, значение, которое мне редко нужно, поэтому я хотел бы загружать их только тогда, когда мне это нужно   -  person AdrienTorris    schedule 19.01.2017
comment
docs.microsoft.com/en-us/ef/core/ querying/related-data Там вы найдете аннотацию о ленивой загрузке - пока это невозможно с EFC.... это в Backlog   -  person mvermef    schedule 20.01.2017


Ответы (1)


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

person RonC    schedule 19.01.2017
comment
Итак, ваша бизнес-модель знает контекст вашей базы данных, не так ли? Как передать контекст базы данных вашей бизнес-модели? По конструктору? - person AdrienTorris; 19.01.2017
comment
Хотя я являюсь поклонником выборочного модульного тестирования, я очень прагматично отношусь к тому, как я распределяю свои усилия по разработке. Поэтому в моем случае я явно кодирую доступ к контексту базы данных в бизнес-модели. Передача через конструктор — это еще один вариант, и его часто предпочитают разработчики, которые регистрируют бизнес-модель в контейнере внедрения зависимостей, чего я предпочитаю не делать. - person RonC; 19.01.2017