efcore的基础使用
一、基础查询
//查询第一条数据,为空则抛出异常
数据库上下文.查询类.first()
//查询第一条数据,为空则返回null
数据库上下文.查询类.firstOrdefault()
//查询一条数据,为空则抛出异常,多条数据也抛出异常
数据库上下文.查询类.single()
//查询一条数据,为空则返回null
数据库上下文.查询类.singleOrdefault()
//查询所有数据
数据库上下文.查询类.tolist()
//条件查询
数据库上下文.查询类.where(p => p.id > 1).tolist()
//排序查询——正序
数据库上下文.查询类.OrderBy(p => p.id).tolist()
//排序查询——倒序
数据库上下文.查询类.OrderByDescending(p => p.id).tolist()
//跳过10条数据
数据库上下文.查询类.skip(10).tolist()
//取10条数据
数据库上下文.查询类.take(10).tolist()
//分页查询
var pageIndex = 1;
var pageSize = 10;
var room = context.classRooms.Skip((pageIndex - 1)*pageSize).Take(pageSize).ToList();
//非跟踪查询
1.AsNoTracking()——单条
2.批量——修改context
context.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;
3.UseQueryTrackingBehavior
二、基础新增
//单个添加
数据库上下文.Add(new 查询类(){属性})
//多个添加
context.AddRange(new List<>(Student){
new Student(){classid = 2,name="aaa"},
new Student(){classid = 2,name="bbb"}
})
三、保存数据
1、SaveChange()
2、批量更新和删除ExecuteUpdate/ExecuteDelete
上下文.查询类.where(条件).ExecuteDelete();
四、基础修改
//读取一个条数
var stuUpdate = context.Students.FirstOrDefault(p => p.Name == "aa");
//修改属性
stuUpdate.Name += "测试修改";
//设置状态为修改
context.Entry().State = EntityState.Modified;
context.SaveChanges();
//批量修改
context.Students.where(p=>p.classid == 2).ExecuteUpdate(s => s.SetProperty(b => b.Name,"[修改]"));
五、基础删除
//单个删除
var delstu = context.Students.FirstOrDefault();
context.Students.Remove(delstu);
context.SaveChanges();
//批量删除
上下文.查询类.where(条件).ExecuteDelete();
六、事务
//开启事务
using var transaction = context.Database.BeginTransaction();
try
{
数据库操作代码
。。。。
//提交事务
transaction.commit();
}catch(Exception ex)
{
//回滚事务
transaction.rollback();
throw;
}
七、分组和统计
var groupData = context.Students
//使用groupby分组,依据classid
.GroupBy(s => s.ClassId)
.Select(g => new
{
//拿到classId,由于是按classid分组的,所以使用min或者max都是一样的
ClassId = g.Max(s=>s.classId),
StudentCount = g.Count()
});