无键实体类型查询数据库视图
下面的示例演示如何使用无键实体类型来查询数据库视图。
首先,我们定义一个简单的博客和文章模型:
public class Blog
{
public int BlogId { get; set; }
public string Name { get; set; }
public string Url { get; set; }
public ICollection<Post> Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int BlogId { get; set; }
}Code language: JavaScript (javascript)
接下来,我们定义一个简单的数据库视图,这样就可以查询与每个博客关联的帖子数:
db.Database.ExecuteSqlRaw(
@"CREATE VIEW View_BlogPostCounts AS
SELECT b.Name, Count(p.PostId) as PostCount
FROM Blogs b
JOIN Posts p on p.BlogId = b.BlogId
GROUP BY b.Name");Code language: CSS (css)
接下来,我们定义一个类来保存数据库视图的结果:
public class BlogPostsCount
{
public string BlogName { get; set; }
public int PostCount { get; set; }
}Code language: JavaScript (javascript)
接下来,使用 HasNoKey API 在 OnModelCreating 中配置无键实体类型。我们使用 Fluent API 来配置无键实体类型的映射:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder
.Entity<BlogPostsCount>(eb =>
{
eb.HasNoKey();
eb.ToView("View_BlogPostCounts");
eb.Property(v => v.BlogName).HasColumnName("Name");
});
}Code language: JavaScript (javascript)
接下来,将 DbContext 配置为包括 DbSet<T>:
public DbSet<BlogPostsCount> BlogPostCounts { get; set; }Code language: JavaScript (javascript)
最后,我们可以采用标准方式来查询数据库视图:
var postCounts = db.BlogPostCounts.ToList();
foreach (var postCount in postCounts)
{
Console.WriteLine($"{postCount.BlogName} has {postCount.PostCount} posts.");
Console.WriteLine();
}Code language: PHP (php)