2017-02-18 60 views
0

在實體框架核心文檔的this page,它加載查詢數據時說:我可以阻止Entity Framework Core使用部分數據填充結果嗎?

實體框架的核心會自動修復式導航性能,以先前加載到上下文實例任何其他實體。因此,即使您沒有明確包含導航屬性的數據,如果先前加載了一些或所有相關實體,該屬性仍可能被填充。

這是真實的它是否是渴望明確

我覺得這很令人沮喪,因爲它會返回部分數據,這使得它看起來像一個完整的列表,因爲沒有任何數據表明它是部分的。

例子:

說我有以下兩類:

class User { 
    int Id { get; set; } 
    string Name { get; set; } 
    List<Message> Messages { get; set; } 
} 

class Message { 
    int Id { get; set; } 
    List<User> Users{ get; set; } 
} 

我查詢使用下面的代碼:

_dbContext.Users 
    .Include(u => u.Messages) 
    .Single(u => u.Id == 1); 

我的輸出如下:

"user" { 
    "id": 1, 
    "name": "Alice", 
    "messages": [ 
     { 
      "id": 1, 
      "users": [ 
       { 
        "id": 1, 
        "name": "Alice", 
       } 
      ] 
     } 
    ] 
} 

我認爲,除非我也加了.ThenInclude(m => m.Users),它會給我一個空或空列表,而不是一個部分列表。

+1

[如何防止EF7急切修復導航屬性?](http://stackoverflow.com/questions/35438600/how-can-i-prevent-ef7-from-eagerly-fixing-up - 導航屬性) – Romoku

+0

@Romoku我真的不知道這將是如何重複的問題。 – bdrelling

回答

0

我從你的例子中假設,愛麗絲的ID爲1的消息被鏈接到更多的一個用戶(她自己)。

我不確定是否需要更改此行爲。正如你所提到的,如果我們需要導航屬性被完全初始化,我們應該使用.ThenInclude(m => m.Users)

我預計,除非我還添加了.ThenInclude(M => m.Users),它 會給我一個空或空列表,而不是部分列表。

當執行延遲加載時,部分結果將是一件好事。如果您要訪問的導航屬性已經加載,那麼您將保存到數據庫的往返行程。

相關問題