1

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

Как я могу реализовать что-то вроде переключателей для LazyLoading?
Любая помощь будет оценена

У меня есть одно решение, которое работает, но я не уверен, что это правильно: в интерфейсе хранилища Я добавил новое свойство

public interface IRepository<T> where T : BaseEntity 
    { 
     T GetById(object id); 
     void Insert(T entity); 
     ..... 
     bool LazyLoadingSwitches { set; } 
    } 

Затем реализовали:

public bool LazyLoadingSwitches 
{ 
    set 
    { 
     this.context.Configuration.LazyLoadingEnabled = value; 
    } 
} 

и когда мне нужно, чтобы получить модель с соответствующими данными, то я использую в контроллере:

repository.LazyLoadingSwitches = true; 
name = order.Customer.FullName; 
repository.LazyLoadingSwitches = false; 

Пожалуйста, предложите мне, что является лучшим решением для этого?

+1

Выглядит хорошо для меня. –

ответ

1

Просто мои два цента:

Я думаю, что реализация обертки вокруг this.context.Configuration.LazyLoadingEnabled = value; вызова OK. Я бы использовал его как метод, но свойство write only довольно странно.

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

1

Я думаю, что вы можете использовать, включают:

order.Include("Customer"); 
var name = order.Customer.FullName; 

образца с лямбда-выражения:

order.Include(o => o.Customer); 
var name = order.Customer.FullName;