循序渐进学.Net Core Web Api开发系列【9】:常用的数据库操作
系列目录
本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi
一、概述
本篇描述一些常用的数据库操作,包括:条件查询、排序、分页、事务等基本数据库操作。试验的数据库为MySQL。
二、条件查询
1、查询所有记录
List<Article> articles = _context.Articles.ToList<Article>();
2、根据主键进行查询
Article article = _context.Articles.Find(id);
3、根据非主键信息字段进行查询
List<Product> products = _context.Products .Where(p => p.Name == name) .ToList<Product>();
如果找不到会返回Null,但不报异常。
4、查询一条记录
Article articles = _context.Articles
.Single(article=>article.Title==title);
此时应要求该字段做唯一性约束,该方法期待必须返回一条记录,0条和多条都会报异常。
而First方法会取众多记录中的第一条,如果找不到会报异常,但有多条符合条件就取一条不报异常。
Article articles = _context.Articles
.First(article=>article.Title.Contains(title));
5、模糊查询
模糊查询有两种方法:
List<Article> articles = _context.Articles
.Where(article => article.Title.Contains(title))
.ToList(); List<Article> articles = _context.Articles
.Where(article => EF.Functions.Like(article.Title,$"{title}%"))
.ToList();
Like方法和String的Contains方法都能实现模糊查询,主要区别在于:EF.Functions.Like()方法支持通配符,而StartsWith、Contains和EndsWith方法是不支持通配符的,比较下面两个方法,第1条语句可以实现预期效果,但第2条语句不行。
(1) EF.Functions.Like(article.Title,“%[a-z]%”)
(2) article.Title.Contains("[a-z]")
提示:如果需要查看实际执行的SQL语句,修改application.json中的日志级别就可以了。
三、排序
List<Article> articles = _context
.Articles.OrderBy(article=>article.Title)
.ToList<Article>(); List<Article> articles = _context
.Articles.OrderByDescending(article=>article.Title)
.ToList<Article>();
四、 预先加载
可以使用Include方法,以便指定要包含在查询结果的相关的数据。
Article article = _context.Articles
.Include(a => a.author)
.First();
上述代码中article的author属性不再为null。
加载多项
var blogs = context.Blogs
.Include(blog => blog.Posts)
.Include(blog => blog.Owner)
.ToList();
多级预加载:
List<Column> columns = _context.Columns
.Include(column => column.Articles)
.ThenInclude(article=> article.author)
.ToList<Column>();
五、非跟踪查询(No-tracking queries)
如果仅仅是只读查询,采用非跟踪查询会提供查询的性能。
List<Article> articles = _context.Articles
.AsNoTracking()
.ToList<Article>();
六、原始的 SQL 查询
可以使用FromSql扩展方法,实现基于原始的 SQL 查询的 LINQ 查询。
List<Article> articles = _context.Articles
.FromSql("select * from cms_article")
.ToList();
也可以使用原始的 SQL 查询来执行存储的过程。
var blogs = context.Blogs
.FromSql("EXECUTE dbo.GetMostPopularBlogs")
.ToList();
或者实现带参数的查询
var sql = $"select * from cms_article where title like '%{titlewithsql}%'";
List<Article> articles = _context.Articles
.FromSql(sql)
.ToList();
预加载Include、Where 与OrderBy都可以使用
List<Article> articles = _context.Articles
.FromSql(sql)
.Include(a=>a.author)
.ToList(); var searchTerm = ".NET";
var blogs = context.Blogs
.FromSql($"SELECT * FROM dbo.SearchBlogs({searchTerm})")
.Where(b => b.Rating > )
.OrderByDescending(b => b.Rating)
.ToList();
注意:如果使用字符串串联来动态生成的查询字符串的任何部分,则你将负责验证任何输入,以防止受到 SQL 注入式攻击
七、分页
int pageSize = ;
int pageNumber = ;
List<Article> articles = _context.Articles
.AsNoTracking()
.Skip(pageSize* pageNumber)
.Take(pageSize)
.ToList<Article>();
八、修改数据
1、添加数据
使用DbSet.Add方法将添加的实体类的新实例。
var blog = new Blog { Url = "http://sample.com" };
context.Blogs.Add(blog);
context.SaveChanges();
2、更新数据
var blog = context.Blogs.Find("xx");
blog.Url = "http://sample.com/blog";
context.SaveChanges();
3、删除数据
var blog = context.Blogs.First();
context.Blogs.Remove(blog);
context.SaveChanges();
4、在单个 SaveChanges 的多个操作
context.Blogs.Add(new Blog { Url = "http://sample.com/blog_one" });
context.Blogs.Add(new Blog { Url = "http://sample.com/blog_two" });
// update
var firstBlog = context.Blogs.First();
firstBlog.Url = "";
// remove
var lastBlog = context.Blogs.Last();
context.Blogs.Remove(lastBlog);
context.SaveChanges();
SaveChanges是事务性的,以上代码不需要额外增加任何事务性代码。
九、 使用连接池
String connStr = Configuration.GetConnectionString("MySQLConnection");
services.AddDbContextPool<SalesContext>(builder=> builder.UseMySQL(connStr));
建议尽量使用连接池方式连接数据库。
循序渐进学.Net Core Web Api开发系列【9】:常用的数据库操作的更多相关文章
- 循序渐进学.Net Core Web Api开发系列【0】:序言与目录
一.序言 我大约在2003年时候开始接触到.NET,最初在.NET framework 1.1版本下写过代码,曾经做过WinForm和ASP.NET开发.大约在2010年的时候转型JAVA环境,这么多 ...
- 循序渐进学.Net Core Web Api开发系列【16】:应用安全续-加密与解密
系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 应用安全除 ...
- 循序渐进学.Net Core Web Api开发系列【15】:应用安全
系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 本篇介绍W ...
- 循序渐进学.Net Core Web Api开发系列【14】:异常处理
系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 本篇介绍异 ...
- 循序渐进学.Net Core Web Api开发系列【13】:中间件(Middleware)
系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 本篇介绍如 ...
- 循序渐进学.Net Core Web Api开发系列【12】:缓存
系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 本篇介绍如 ...
- 循序渐进学.Net Core Web Api开发系列【11】:依赖注入
系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 本篇介绍如 ...
- 循序渐进学.Net Core Web Api开发系列【10】:使用日志
系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.本篇概述 本篇介 ...
- 循序渐进学.Net Core Web Api开发系列【8】:访问数据库(基本功能)
系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 本篇讨论如 ...
随机推荐
- C语言复习---选择法排序
选择排序也是一种简单直观的排序算法 它的工作原理很容易理解:初始时在序列中找到最小(大)元素,放到序列的起始位置作为已排序序列:然后,再从剩余未排序元素中继续寻找最小(大)元素,放到已排序序列的末尾. ...
- C语言复习---迭代法,牛顿迭代法,二分法求根
一:用迭代法求 x=√a.求平方根的迭代公式为:X(n+1)=(Xn+a/Xn) /2. #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> ...
- SQL记录-PLSQL触发器
PL/SQL触发器 触发器是存储程序,它会自动执行或发射当一些事件发生.触发器,事实上,写入响应于以下任一事件将被执行: 数据库操作(DML)语句(DELETE,INSERT,UPDATE或) 数据库 ...
- Codeforces Round #481 (Div. 3) G. Petya's Exams
http://codeforces.com/contest/978/problem/G 感冒是真的受不了...敲代码都没力气... 题目大意: 期末复习周,一共持续n天,有m场考试 每场考试有如下信息 ...
- python 喜马拉雅 音乐下载 演示代码
1.主程序文件 import os import json import requests from contextlib import closing from progressbar import ...
- 一个很实用的css3兼容工具很多属性可以兼容到IE6
当你看到这样的效果图是不是已经崩溃了 css3没出来之前大部分人基本都是用图片的方式拼出来的 腾讯邮箱就是这么做的 然后你想和设计说换直角吧.我用图片的好烦的感觉!而且我们还要兼容到ie6 她和你说别 ...
- 爬虫笔记之刷小怪练级:yymp3爬虫(音乐类爬虫)
一.目标 爬取http://www.yymp3.com网站歌曲相关信息,包括歌曲名字.作者相关信息.歌曲的音频数据.歌曲的歌词数据. 二.分析 2.1 歌曲信息.歌曲音频数据下载地址的获取 随便打开一 ...
- [转]perf + 火焰图分析程序性能
1.perf命令简要介绍 性能调优时,我们通常需要分析查找到程序百分比高的热点代码片段,这便需要使用 perf record 记录单个函数级别的统计信息,并使用 perf report 来显示统计结果 ...
- lucene入门创建索引——(二)
1.程序宏观结构图
- HTTP2.0新特性
参考:http://www.tuicool.com/articles/mq2qm26