如何在EF 6中使用SqlQuery包含子数据?

时间:2015-02-24 09:45:51

标签: asp.net entity-framework asp.net-mvc-5 entity-framework-6

我在MVC中使用EF 6并且有一个这样的查询来获取我的所有文章,然后列出文章所列的类别。这将返回结果:

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();

1 个答案:

答案 0 :(得分:1)

以下内容并不是问题的答案:如何在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对象可以由存储过程的结果填充。但是你不会得到被跟踪的实体。