У меня есть приложение ASP.NET MVC, использующее Entity Framework для слоя данных.Отключение ленивой Загрузка опасно?
В одном из моих методов я получаю данные о сезонной доступности продукта, а затем - лучшую налоговую ставку для продукта.
public ProductList FetchProductSearchList(ProductSearchCriteria criteria)
{
...
var avail = ProductAvailabilityTemplate.Get(criteria.ProductID);
...
var tr = TaxRate.BestMatchFor(criteria.ProductID, criteria.TaxCode);
...
}
В слое данных для ProductAvailabilityTemplate.Get, я был оптимизации производительности моего кода LINQ. В частности, я установил ctx.ObjectContext.ContextOptions.LazyLoadingEnabled = false;
, чтобы предотвратить загрузку некоторых объектов (через свойства навигации), которые мне не нужны в этом сценарии.
Однако, как только это изменение было внесено, я заметил, что мои налоговые реестры не загружались полностью, потому что ctx.ObjectContext.ContextOptions.LazyLoadingEnabled
все еще был ложным в моем коде слоя данных налогообложения. Это означало, что объект, связанный с TaxRate через свойство навигации, не загружается.
Чтобы преодолеть эту проблему, я просто установил ctx.ObjectContext.ContextOptions.LazyLoadingEnabled = true;
в методе уровня налоговых данных, но я обеспокоен тем, что несвязанные изменения могут вызвать такую проблему. Кажется, что вы не можете безопасно отключить ленивую загрузку для одной функции, не оказывая потенциального влияния на работу того, что вызывается впоследствии. У меня возникает соблазн удалить все свойства навигации, отключить ленивую загрузку и использовать старые старомодные соединения для загрузки именно того, что мне нужно для каждого вызова уровня данных, не более того.
Приветствуем любые советы.
«В частности, я установил' ctx.ObjectContext.ContextOptions.LazyLoadingEnabled = false; ', чтобы предотвратить загрузку некоторыми объектами EF (через свойства навигации), которые мне не нужны в этом сценарии ». - Lazy loading заставляет объекты загружаться при доступе к свойствам навигации, поэтому, если они вам не нужны, почему вы получаете доступ к этим свойствам? Если они вам не нужны и просто не используют их, они не загрузятся. – hvd