簡體   English   中英

禁用的延遲加載EF無法正常工作?

[英]Disabled lazy loading EF not working correctly?

我試圖通過WCF服務返回幾個元素列表,並且我想控制列表中加載的每個對象,以避免在序列化和返回結果時出現堆棧溢出異常。

我使用LINQ to Entities填充了此列表,並且為EF模型禁用了延遲加載...但是當我嘗試使用它時,將填充許多引用,並且在嘗試返回列表時會引發異常。

這是一個例子:

public class DelegacionesDAO : IDelegacionesDAO
    {
        Model.Entities entities = new Model.Entities();

        public DelegacionesDAO()
        {
            entities.ContextOptions.ProxyCreationEnabled = false;
            entities.ContextOptions.LazyLoadingEnabled = false;
        }

    public List<Model.Things> GetDelegaciones()
            {
                IQueryable<Model.Things> thingsList= from things in entities.Things
                                                     select things;

                return thingsList.ToList<Model.Things>();
            }
}

該表“ Things”被其他類似“ Persons”(擁有事物)的人引用,這就是問題所在,當我嘗試將其返回時,每個“ Thing”都有一個“ Persons”及其他列表。

我錯過了什么嗎?

提前致謝!

編輯:添加了更多的代碼。 現在它正在工作...我認為即使您未“加載”它,它也會加載每個導航屬性:-S

現在,我只是懷疑是否通過在構造函數中創建實體實例以通過WCF使用它來做得很好。

使用WCF時,請勿使用長期存在的上下文(在您的情況下為“字段”實體):

  • 它不是線程安全的(特別是在其他線程准備數據時,從其他線程調用SaveChanges)
  • 上下文收集並關聯您正在加載的每個實體(只要您不顯式使用MergeOption.NoTracking)

如果您關閉了“延遲加載”,則必須告訴EF加載引用。

嘗試這個:

var thingsList= (from things in entities.Things
                select things) as ObjectQuery<Model.Things>;
thingsList = thingsList.Include("Persons"); //name of navigation property

return thingsList.ToList<Model.Things>();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM