【问题标题】:How can I Include child data using SqlQuery in EF 6?如何在 EF 6 中使用 SqlQuery 包含子数据?
【发布时间】:2015-04-25 21:07:00
【问题描述】:

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

【问题讨论】:

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


【解决方案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 对象可以由存储过程的结果填充。但是你不会得到被跟踪的实体。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    相关资源
    最近更新 更多