2014-10-09 27 views
0

的圖我有這樣的模型結構:實體框架6和顯式裝載對象

public class Blog 
{ 
    public ICollection<Post> Posts { get; set; } 
} 

public class Post 
{ 
    public ICollection<Comment> Comments { get; set; } 
} 

public class Comment 
{ 

} 

我想顯式地加載「文章」和「評論」的集合。

不能(使用包括運營商),因爲我加載的集合必須過濾之前加載到每個對象(因爲它們可能包含的項目數量巨大)使用延遲加載,也沒有預先加載。

任何意見,以實現這一目標的最佳方式?

謝謝!

Riana

回答

0

我發現的靈感和基於this Rowan Miller's presentation at TechEd 2014的解決方案。

我主要關心的是能夠在加載博客聚合時過濾出「帖子」和「評論」集合(根據已知條件)。

延遲加載並不是一個很好的解決方案,因爲它會以加載所有需要的信息及其相應的意見(帖子和評論作品集可以是巨大的)

我想預先加載了太多的查詢發送到數據庫,使用「包含」運算符不是一個好的解決方案,因爲「包含」運算符不支持篩選。這意味着如果我加載我的博客是這樣的:myContext.Blogs.Include(「帖子」),帖子集合沒有被過濾,並且數據庫中的所有帖子都會被加載,我不希望那樣。

在EF6中,現在可以在將查詢語句轉換爲SQL併發送到數據庫之前攔截和修改查詢。這個功能是關鍵的解決方案。

我的解決方案是攔截Post和Comment對象上的所有SELECT查詢,並修改它們以應用我的過濾器。通過這個實現,我可以進行急切的加載,並且Post和Comment對象上的所有SELECT查詢仍然有自動應用的過濾器。

Rowan Miller通過實施軟刪除來演示此功能。

希望這有助於,

Riana