笔记源于课堂编写:BiliBili
源视频教程:https://www.bilibili.com/video/BV1xa4y1v7rR/
一、添加和查询
1.添加
- 一次添加一条数据:
- 数据上下文类.表名.Add(添加的数据)
- 一次添加多条数据:
- 数据上下文类.表名.AddRange(数据1,数据2…)
- 数据上下文类.表名.AddRange(new List<表名>(数据1,数据2…))
- 一次添加不同表多条数据:
- 数据上下文类.AddRange(表1数据,表1数据,表2数据…)
2.查询:
- 返回集合:ToList()
- 返回符合条件的第一条数据,没有数据则报错:First()
- 返回符合条件的第一条数据,可以没有数据:FirstOrDefault()
- 符合查询条件的只能是一个数据:Single()
- 符合查询条件的只能是一个数据,或者没有数据:SingleOrDefault()
- 返回符合条件最后一条数据,没有数据则报错:Last()
- 返回符合条件最后一条数据,可以没有数据:LastOrDefault()
- 结果数量:Count()
- LongCount()
- Min()
- Max()
- Average()
- Sum()
- Find()
- 异步版本:”xxx”+async
3.删除
- 一次删除单条数据
- 数据上下文类.表名.Remove(查询出来要删除的数据)
- 数据上下文类.Remove(查询出来要删除的数据)
- 一次性删除多条数据
- 数据上下文类.表名.RemoveRange(查询出来要删除的数据1,数据2…)
- 数据上下文类.RemoveRange(查询出来要删除的数据1,数据2…)
二、加载关联数据
1.加载关联数据
- 预加载:Eager loading
- 显示加载:Ecplicit loading
- 懒加载:Lazy loading
Context无法追踪匿名类,只能追踪他所识别的类。
2.无主键的Entity
- .NET Core3.1允许无主键的Entity
- 他们不会被追踪
- 映射到没有主键的Table或View
三、执行原生SQL
1.执行原生SQL的两组方法
- 使用SQL语句
- FormSQLRaw(“select * from …”)
- FormSQLRawAsync(“select * from …”):异步
- 使用C#6,插值语法的SQL语句
- FormSQLInterpolated($”select * from {xx}”)
- FormSQLInterpolatedAsync($”select * from {xx}”):异步
2.原生SQL查询的要求
- 必须返回Entity类型的所有(标量)属性
- 字段名和Entity的属性名匹配
- 无法包含关联的属性
- 只能查询已知的Entity
3.执行非查询类SQL
- Context.Database.ExecuteSQLRaw()
- Context.Database.ExecuteSQLRawAsync()
- Context.Database.ExecuteSQLInterpolated()
- Context.Database.ExecuteSQLInterpolatedAsync()
- 注意:
- 无法用于查询
- 只能返回受影响的行数