2017-02-06 5 views
3

Использование модели EF 6, Lazy Loading Enabled установлено в True в модели. Вот пример моей проблемы:EF6, ленивая загрузка не работает должным образом

var agent = context.AgentDetail.Where(a => a.Agent.GroupCode == "1234"); 

Запуск, который вернет 5 результатов. Если после этого я бег (для целей тестирования только)

var code = agent.FirstOrDefault().Agent.GroupCode; 

Я получаю нулевое ссылочное исключение, потому что Agent является null.

Вот мои объекты:

public partial class AgentDetail : Entity<int> 
    { 
     public Nullable<System.DateTime> Date { get; set; } 
     public string Name { get; set; } 
     public decimal Balance { get; set; } 
     ... 

     public virtual Agent Agent { get; set; } 
    } 

    public partial class Agent : Entity<int> 
    { 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] 
     public Agent() 
     { 
      this.AgentAspNetUsers = new HashSet<AgentAspNetUsers>(); 
      this.AgentDetail = new HashSet<AgentDetail>(); 
     } 

     public string GroupCode { get; set; } 
     ... 

     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<AgentAspNetUsers> AgentAspNetUsers { get; set; } 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<AgentDetail> AgentDetail { get; set; } 
    } 

Как это может дать мне 5 результатов в первом запросе, а затем? Я не могу понять, что здесь не так, любая помощь будет оценена.

+1

Показать, ваши сущности, для ленивой загрузки в сущности Агент должен быть виртуальным. – BWA

+0

@BWA Просто добавил их. – Antrim

+0

смотрите [это] (http://stackoverflow.com/questions/22031536/ef-code-first-lazy-loading-not-working) и [это] (http://stackoverflow.com/questions/21951367/ entity-framework-6-lazy-load-not-working), может быть, это поможет вам – BWA

ответ

0

Попробуйте определить взаимосвязь между объектами. Он должен работать, если ваша ленивая загрузка активирована.

+0

Не могли бы вы немного рассказать, пожалуйста? – Antrim

+0

Простые отношения EF могут выводиться из навигационных свойств – BWA

+0

@Antrim Я хочу добавить [ForeignKey («ваш объект»)] в таблицу сведений о агентах. – Pavvy

0

От Requirements for Creating POCO Proxies

  1. пользовательского класса данных должны быть объявлены с открытым доступом.
  2. Пользовательский класс данных не должны быть запечатаны
  3. Пользовательский класс данных не должен быть абстрактным
  4. Пользовательский класс данных должен иметь открытый или защищенный конструктор, который не имеет параметров. Используйте защищенный конструктор без параметров, если вы хотите, чтобы метод CreateObject использовался для создания прокси-сервера для объекта POCO. Вызов метода CreateObject не гарантирует создание прокси-сервера: класс POCO должен соответствовать другим требованиям, описанным в этом разделе.
  5. Класс не может реализовать интерфейсы IEntityWithChangeTracker или IEntityWithRelationships, поскольку прокси-классы реализуют эти интерфейсы.
  6. Параметр ProxyCreationEnabled должен иметь значение true.
  7. Каждое свойство навигации должно быть объявлено как общедоступное, виртуальное (переопределяемое в Visual Basic), а не запечатанное (NotOverridable в Visual Basic) получить accessor. Свойство навигации, определенное в классе пользовательских данных, должно иметь соответствующее свойство навигации в концептуальной модели. Дополнительные сведения см. В разделе «Загрузка связанных объектов POCO».

Проверьте этот пункт на своих классах. В вашем вставленном коде AgentDetail havent public/protected constructor.

Смежные вопросы