簡體   English   中英

在實體框架中包含子對象

[英]Including child Objects in Entityframework

我想在IQueryable列表中包括子對象。

我想在某些表類型IQueryable列表的選定列上包括一個子對象。

我試過這樣的:

IQueryable<Persons> persons = Context.Persons.Select(x=> new persons{Pkid=x.pkid, FirstName=x.FirstName}).AsQueryable();

persons= persons.Include("Address");

這包括子對象不起作用..任何人都請幫助...我做錯了..非常感謝...

Include不適用於投影。 此外,它是不需要的。 這樣做:

var query = context.Persons
                   .Select(x => new PersonDto
                       {
                          Id = x.pkid, 
                          FirstName = x.FirstName,
                          Address = x.Address
                       });

這里的幾點:

  • Include
  • 直接在投影中訪問的Address ,EF會處理
  • 我正在使用PersonDto作為投影目標。 PersonDto只有IdFirstNameAddress
  • 您可以投影到自定義類型或匿名類型,但不能投影到實體類型(映射的類型)-它不起作用並且會引發異常。
  • 如果要使用映射類型,則不能僅返回選定的標量列-所有列將始終被加載。 只能有選擇地加載導航屬性。 為了克服這個問題,有時可以使用表拆分,但是如果您可以將大實體划分為分離的實體,那么這是可行的。 在您的方案中,僅使用投影。

您不能在投影上使用Include() ,請嘗試以下操作:

Iquerable<Persons> persons = Context.Persons
                                    .Include("Address")
                                    .Select(x=> new persons{Pkid=x.pkid, FirstName=x.FirstName})
                                    .AsQuerable();

另外,您還存在命名沖突,您投影到類型persons並希望將結果保存在IQueryable命名persons -其中之一是錯誤的。 您有理由完全需要投影嗎? 你可以做到

Iquerable<Persons> persons = Context.Persons.Include("Address");

首先:檢查是否啟用了延遲加載 啟用它時,我遇到了不同的結果。 我更喜歡禁用惰性加載。

第二:檢查以下語法:

result = (From person In context.Persons.Include("Address")).ToList();

PS :有用的EF技巧和竅門: http : //blogs.msdn.com/b/alexj/archive/2009/03/26/index-of-tips.aspx

更新:

Include不起作用,因為您是在新創建的對象上使用它,而不是在上下文中可用的對象上。 您應該在創建新對象之前使用Include。

檢查一下:

result = (From person In context.Persons.Include("Address") Select New With {.FirstName = item.FirstName, .AddressValue = item.Address.Value}).ToList();

暫無
暫無

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

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