2017-02-06 28 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; 

我得到一個空引用異常,因爲Agentnull

這裏是我的實體:

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

看[this](http://stackoverflow.com/questions/22031536/ef-code-first-lazy-loading-not-working)和[this](http://stackoverflow.com/questions/21951367/ entity-framework-6-lazy-loading-not-working)也許它可以幫助你 – BWA

回答

0

嘗試定義實體之間的關係。它應該工作,如果你的延遲加載已啓用。

+0

請您詳細說明一下嗎? – Antrim

+0

簡單關係EF可以從導航屬性中推導出 – BWA

+0

@Antrim我的意思是將[ForeignKey(「your object」)]添加到代理程序詳細信息表中。 – Pavvy

0

Requirements for Creating POCO Proxies

  1. 自定義數據類必須有公共訪問聲明。
  2. 自定義數據類不能被密封
  3. 自定義數據類不能是抽象的
  4. 自定義數據類必須有一個不帶參數公共或受保護的構造。如果您希望使用CreateObject方法爲POCO實體創建代理,請使用不帶參數的受保護構造函數。調用CreateObject方法並不保證代理的創建:POCO類必須遵循本主題中描述的其他要求。
  5. 該類無法實現IEntityWithChangeTracker或IEntityWithRelationships接口,因爲代理類實現了這些接口。
  6. ProxyCreationEnabled選項必須設置爲true。
  7. 每個導航屬性都必須聲明爲public,virtual(在Visual Basic中爲Overridable),並且未聲明(在Visual Basic中NotOverridable)get accessor。定製數據類中定義的導航屬性必須在概念模型中具有相應的導航屬性。有關更多信息,請參閱加載相關POCO實體。

請在您的課程上查看此點。在您的粘貼代碼AgentDetail havent公共/受保護的構造函數。