In 实体框架核心 2.1我们可以用查询类型 https://learn.microsoft.com/en-us/ef/core/modeling/query-types正如尤里·N 所建议的。
有关如何使用它们的更详细的文章可以找到here https://msdn.microsoft.com/magazine/mt847184
根据本文的示例,最直接的方法是:
1.例如,我们有以下实体模型来管理出版物
public class Magazine
{
public int MagazineId { get; set; }
public string Name { get; set; }
public string Publisher { get; set; }
public List<Article> Articles { get; set; }
}
public class Article
{
public int ArticleId { get; set; }
public string Title { get; set; }
public int MagazineId { get; set; }
public DateTime PublishDate { get; set; }
public Author Author { get; set; }
public int AuthorId { get; set; }
}
public class Author
{
public int AuthorId { get; set; }
public string Name { get; set; }
public List<Article> Articles { get; set; }
}
2.我们有一个名为AuthorArticleCounts的视图,定义为返回作者撰写的文章的名称和数量
SELECT
a.AuthorName,
Count(r.ArticleId) as ArticleCount
from Authors a
JOIN Articles r on r.AuthorId = a.AuthorId
GROUP BY a.AuthorName
3.我们去创建一个用于视图的模型
public class AuthorArticleCount
{
public string AuthorName { get; private set; }
public int ArticleCount { get; private set; }
}
4.之后我们在 DbContext 中创建一个 DbQuery 属性来使用模型内的视图结果
public DbQuery<AuthorArticleCount> AuthorArticleCounts{get;set;}
4.1.您可能需要重写 OnModelCreating() 并设置视图,特别是当您的视图名称与类不同时。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Query<AuthorArticleCount>().ToView("AuthorArticleCount");
}
5.最后我们就可以像这样轻松得到View的结果了。
var results=_context.AuthorArticleCounts.ToList();
UPDATE根据 ssougnez 的评论
值得注意的是,EF 中将不再支持 DbQuery
核心3.0。See here https://learn.microsoft.com/en-us/ef/core/modeling/keyless-entity-types