2

我在MVC中使用EF 6,並有這樣的查詢來獲取我所有的文章,然後獲取文章所列的類別。這返回結果:如何在EF 6中使用SqlQuery包含子數據?

list = db.Articles.Where(a => a.PublishDate <= DateTime.Now) 
      .OrderByDescending(a => a.PublishDate) 
      .Skip(page * ArticleCount) 
      .Take(ArticleCount) 
      .Include(a => a.Category).ToList(); 

我也有一個過濾查詢按類別或子類別,我有一個存儲過程。我正在使用SqlQuery。類別模型未加載並且Include不起作用。我似乎無法在網上找到任何與EF 6使用代碼有關的例子。我如何獲取類別數據?

list = db.Database.SqlQuery<Article>(
       "sp_GetArticlesByCategory @category, @subcategory", 
       new SqlParameter("@category", category), 
       new SqlParameter("@subcategory", subcategory)) 
      .Skip(page * ArticleCount) 
      .Take(ArticleCount) 
      .ToList(); 
+0

不要認爲這是可能的:http://stackoverflow.com/a/13039222/1663001 – DavidG 2015-02-24 09:57:46

回答

1

以下不preciselly一個問題的答案:我如何可以包括EF 6 SqlQuery還使用子數據?

但基於解釋和問題:爲什麼你需要一個存儲過程?,我會顯示以下內容:

如果您需要跟蹤的實體,可以使用eager loading multiple levels完成此操作。

from a in db.Articles.Include("Category.SubCategory") 
where a.Category.SomeProperty == someValue 
select a 

但如果沒有,你可以使用DAO對象,並使用LINQ查詢

from a in db.Articles 
where a.Category.SomeProperty == someValue 
select new DaoArtType { 
    ArticleId = a.Id, 
    //... 
    Cat = new DaoCatType { 
     CatId = a.Category.Id 
     //... 
    } 
} 

從這裏我們可以想像另一個DAO對象

public class DAOArticleWithCat { 
    public int ArticleId {get; set;} 
    //... 
    public int ArticleCatId {get; set;} 
    //... 
    public int ArticleSubCatId {get; set;} 
    //... 
} 

這樣的DAO對象可以是由存儲過程的結果填充。但你不會被追蹤的實體。