2016-07-18 3 views
0

У меня есть автоматически сгенерированный класс (класс Заказы), который ссылается на другие объекты. То, что я пытаюсь выполнить, - получить заказ с использованием идентификатора заказа и пользователя, связанного с этим заказом.Как загрузить определенные объекты в инфраструктуре сущности

Однако при загрузке объекта он занимает 2 секунды, чтобы загрузить его. Я посмотрел на объект, и EF заполняет список всех зависимых объектов (язык, страна, пользователь клиента).

Как получить только конкретный объект, например, только свойства заказа и объект пользователя? Я попытался сделать это, используя приведенный ниже код, но он загружает все объекты.

//Code for getting order id and user related to it 
    using (var _storeEntities = new StoreEntities()) 
    { 
    var test = _storeEntities.Orders.Where(r => r.Id.ToString() == orderId).Include(x => x.User).ToList(); 
    } 



// Parent entity 
    public partial class StoreEntities: DbContext 
    { 
    public virtual DbSet<Orders> Orders { get; set; } 
    } 

// Order object  
    public partial class Orders 
    { 
    public System.Guid Id { get; set; } 
    public bool IsActive { get; set; } 
    public System.DateTime OrderDate{ get; set; } 
    public Nullable<int> CustomerId { get; set; } 
    public string LanguageId { get; set; } 
    public Nullable<System.Guid> UserId { get; set; } 
    public string CountryId { get; set; } 

    public virtual Customer Customer{ get; set; } 
    public virtual User User{ get; set; } 
    public virtual Country Country { get; set; } 
    public virtual Language Language { get; set; } 
    } 

ответ

2

следует отключить отложенную загрузку в конфигурации

public class YourContext : DbContext 
{ 
    public YourContext() 
    { 
     this.Configuration.LazyLoadingEnabled = false; 
    } 
} 

Или только во время вызова

using (var _storeEntities = new StoreEntities()) 
     { 
     _storeEntities .Configuration.LazyLoadingEnabled = false; 

     var test = _storeEntities.Orders.Where(r => r.Id.ToString() == orderId) 
             .Include(x => x.User).ToList(); 
     } 

Вот статья MSDN для каждого типа нагрузки

https://msdn.microsoft.com/en-nz/data/jj574232.aspx

2

Отключить lazy loading:

_storeEntities.Configuration.LazyLoadingEnabled = false; 

В конструкторе или перед запросом вы хотите запустить. Или просто удалите virtual ключевое слово.

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

_storeEntities.Configuration.ProxyCreationEnabled = false; 
Смежные вопросы