如何在EF 6中使用SqlQuery包含子数据?
问题描述:
我在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();
答
以下不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对象可以是由存储过程的结果填充。但你不会被追踪的实体。
不要认为这是可能的:http://*.com/a/13039222/1663001 – DavidG 2015-02-24 09:57:46