程序猿阵线联盟-汇总各类技术干货

EF Core—查询数据

2019-04-18  本文已影响0人  JeetChan

查询数据

Entity Framework(EF) Core 使用语言集成查询 (LINQ) 来查询数据库中的数据。 通过 LINQ 可使用 C# (或你选择的其
他 .NET 语言)基于派生上下文和实体类编写强类型查询。 LINQ 查询的一种表示形式会传递给数据库提供程序,进
而转换为特定于数据库的查询语言(例如,适用于关系数据库的 SQL )。有关 LINQ 的示例可参阅 101 LINQ Samples

调用 LINQ 运算符时,只会构建查询在内存中的表示形式。 只有在使用结果时,查询才会发送到数据库。导致查询发送到数据库的最常见操作如下:

执行查询

通过 LINQ 可加载单个实体,使用导航属性来加载关联数据。也支持自定义查询结果。

在无法使用 LINQ 表达要执行的
查询或低效时,还可以使用原生 SQL 语句。

同样的,有关查询的内容也挺多,可以快速浏览一遍,遇到模糊的就敲代码运行一次,让自己有一个直观的理解,并记住这一章的主要内容,当在实践应用时再通过看文档的详细信息。

示例

在学习或开发模式中,日志输出的 SQL 语句参数可设为可见options.EnableSensitiveDataLogging(true);,这样方便调试理解。

在查询中参数应该设置为变量,否则是字面值的话发送到数据库的语句也是字面值,而不是参数。

加载所有数据

using (var context = new BloggingContext())
{
      var blogs = context.Blogs.ToList();
}

加载单个实体

            int blogId = 1; // 变量
            using (var context = new BloggingContext())
            {
                var blog = context.Blogs
                    .Single(b => b.BlogId == blogId);
            }

筛选

            using (var context = new BloggingContext())
            {
                var blogs = context.Blogs
                    .Where(b => b.Url.Contains("dotnet")) // 字面值
                    .ToList();
            }

加载关联数据

可以使用 Include 方法来指定要包含在查询结果中的关联数据。使用 ThenInclude 方法可以依循关系包含多个层级的关联数据。

using (var context = new BloggingContext())
{
var blogs = context.Blogs
.Include(blog => blog.Posts)
.ThenInclude(post => post.Author)
.ToList();
}

自定义查询结果

List<dynamic> viewBlogs = context.Blogs
.OrderByDescending(blog => blog.Rating)
.Select(blog => new
{
Id = blog.BlogId,
Url = StandardizeUrl(blog.Url)
})
.ToList();

原生 SQL 语句

var blogs = context.Blogs
.FromSql("SELECT * FROM dbo.Blogs")
.ToList();

参考

Entity Framework Core 2.x 入门 (完结)

上一篇 下一篇

猜你喜欢

热点阅读