# 数据库访问说明
以下示例[repistory.]都在[表 Service.cs]类进行的操作,如果在控制器使用 repistory.访问数据库,见下面【获取表依赖注入 Repository 实例】
# 查询操作
# 单表查询
//按查询全表查询
var list = repository.FindAsIQueryable(x=>条件).Tolist();
//指定查询返回匿名字段
var data = repository.FindAsIQueryable(x=>条件).Select(s=>new {s.字段}).Tolist();
//异步查询
var list2 = await repository.FindAsIQueryable(x=>条件).TolistAsync();
//查询单条数据
var data3 = repository.FindAsIQueryable(x=>条件).FirstOrDefault();
//查询单条数据,将上面的ToList改为FirstOrDefault
//异步查询将上面的改为 await repository.xxx().ToListAsync();
//如果要操作其他表,见下面【获取表依赖注入 Repository 实例】,获取表的 Repository对象后调用数据库访问
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 模糊查询、in 查询
//对应sql like '%查询的值%'
var list = repository.FindAsIQueryable(x=>x.字段.Contains(值)).ToList();
//对应sql like '%查询的值'
var list2 = repository.FindAsIQueryable(x=>x.字段.StartsWith(值)).ToList();
//对应sql like '查询的值%'
var list3 = repository.FindAsIQueryable(x=>x.字段.EndsWith(值)).ToList();
//对应sql where 字段 in ('value1','value2','value3')
List<string> values=new List<string>() { "value1","value2","value3"};
var list4 = repository.FindAsIQueryable(x => values.Contains(x.字段)).ToList();
//查询单条数据,将上面的ToList改为FirstOrDefault
//异步查询将上面的改为 await repository.xxx().ToListAsync();
//如果要操作其他表,见下面【获取表依赖注入 Repository 实例】,获取表的 Repository对象后调用数据库访问
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 主子表查询
//主子表查询需要在代码生成器上配置明细表并生成model
//按查询全表查询
var list = repository.FindAsIQueryable(x=>true).Include(x=>x.明细表).Tolist();
//处理返回的结果
foreach (var item in list)
{
List<明细表> 明细表= item.明细表;
}
//指定查询返回匿名字段
var data2 = repository.FindAsIQueryable(x=>条件).Include(x=>x.明细表)
.Select(s => new {
s.主表字段1,
s.主表字段1,
detail = s.明细表.Select(c=>new {c.明细表字段1,c.明细表字段2})
}).ToList();
//查询单条数据,将上面的ToList改为FirstOrDefault
//异步查询将上面的改为 await repository.xxx().ToListAsync();
//如果要操作其他表,见下面【获取表依赖注入 Repository 实例】,获取表的 Repository对象后调用数据库访问
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 动态查询
repository.WhereIF(判断条件, 查询条件).WhereIF(前面一样).Tolist();
//例:string value=null;
var list = repository
.WhereIF(string.IsNullOrEmpty(value), (x) => x.字段 == "查询值")
.WhereIF(前面一样)
.Tolist();
//例:int value=0;
var list = repository
.WhereIF(value > 0, (x) => x.字段 == "查询值")
.WhereIF(前面一样)
.Tolist();
//查询单条数据,将上面的ToList改为FirstOrDefault
//异步查询将上面的改为 await repository.xxx().ToListAsync();
//如果要操作其他表,见下面【获取表依赖注入 Repository 实例】,获取表的 Repository对象后调用数据库访问
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 分页查询
//1为分页页的数,30为分页每页的大小
var list = repository.repository.FindAsIQueryable((x) => 条件).TakePage(1, 30);
//查询单条数据,将上面的ToList改为FirstOrDefault
//异步查询将上面的改为 await repository.xxx().ToListAsync();
//如果要操作其他表,见下面【获取表依赖注入 Repository 实例】,获取表的 Repository对象后调用数据库访问
1
2
3
4
5
2
3
4
5
# 判断数据是否存在
//判断数据是否存在
var b = repository.Exists((x) => 条件);
//对应sql where 字段 in ('value1','value2','value3')
List<string> values=new List<string>() { "value1","value2","value3"};
var b2 = repository.Exists(x => values.Contains(x.字段));
var b3 = await repository.ExistsAsync((x) => 条件);
//查询单条数据,将上面的ToList改为FirstOrDefault
//异步查询将上面的改为 await repository.xxx().ToListAsync();
//如果要操作其他表,见下面【获取表依赖注入 Repository 实例】,获取表的 Repository对象后调用数据库访问
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 更新操作
//单表更新
//更新时model里面主键字段必须要有值
表Model model = new 表Model();
user.SetModifyDefaultVal();//设置默认修改时间、修改人信息等,可选操作
//第一个参数更新的model,第二个参数指定哪些字段更新
repository.Update(表Model,x=>new { x.字段1,x.字段2});
repository.SaveChanges();
//多表批量更新
List<表Model> list = new List<表Model>();
//第一个参数更新的model,第二个参数指定哪些字段更新
repository.UpdateRange(list,x=>new { x.字段1,x.字段2});
repository.SaveChanges();
//如果使用的sqlsugar版后台更多操作请使用原生sqlsugar操作: repository.SqlSugarClient
//查询单条数据,将上面的ToList改为FirstOrDefault
//异步查询将上面的改为 await repository.xxx().ToListAsync();
//如果要操作其他表,见下面【获取表依赖注入 Repository 实例】,获取表的 Repository对象后调用数据库访问
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 新建操作
//单表写入
表Model model = new 表Model();
model.SetCreateDefaultVal();//设置默认创建时间、创建人信息等,可选操作
//第一个参数更新的model,第二个参数指定哪些字段更新
//EF版
repository.Add(表Model);
//sqlsugar版后台使用
repository.AddWithSetIdentity(表Model);
repository.SaveChanges();//保存后model里主键字段自动就有值了
//多表批量写入
List<表Model> list = new List<表Model>();
//第一个参数更新的model,第二个参数指定哪些字段更新
repository.AddRange(list);
repository.SaveChanges();//保存后model里主键字段自动就有值了
//如果使用的sqlsugar版后台更多操作请使用原生sqlsugar操作: repository.SqlSugarClient
//如果要操作其他表,见下面【获取表依赖注入 Repository 实例】,获取表的 Repository对象后调用数据库访问
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 删除操作
//删除时model里面主键字段必须要有值
表Model model = new 表Model();
repository.Delete(model);
repository.SaveChanges();
//根据主键id批量删除
object[] keys = new object[] { 主键值1, 主键值2 };
repository.DeleteWithKeys(keys);
//如果使用的sqlsugar版后台更多操作请使用原生sqlsugar操作: repository.SqlSugarClient
//如果要操作其他表,见下面【获取表依赖注入 Repository 实例】,获取表的 Repository对象后调用数据库访问
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 原生 EF 操作
repository.DbContext.Set<表>();
//如果要操作其他表,见下面【获取表依赖注入 Repository 实例】,获取表的 Repository对象后调用数据库访问
1
2
2
# 原生 SqlSugar 操作
repository.SqlSugarClient
DbManger.
//如果要操作其他表,见下面【获取表依赖注入 Repository 实例】,获取表的 Repository对象后调用数据库访问
1
2
3
2
3
# 更新数据库操作
左边菜单接着往后面看
# 其他一些操作
1、repository.
2、repository.DapperContext.xx.
3、repository.DbContext.xx.
4、repository.FindAsIQueryable(x=>条件).Select(s=>new {s.字段}).Tolist();
5、repository.DbContext.Set<Sys_User>().Find()
//repository.仅限在表xxx.Service.cs中使用
6、SellOrderRepository.Instance.Find()
7、SellOrderListRepository.Instance.Find()
8、DBServerProvider.SqlDapper
9、DBServerProvider.DbContext
//链式查询,需要最新代码才支持
10、repository.WhereIF(string.IsNullOrEmpty("值"),x=>x.字段=="值").WhereIF(前面一样)
//按条件删除
11、 repository.Delete(x => 条件,false)//第一个参数更新条件,第二个参数是否提交到数据
//更新:第一个参数要更新的对象,第二个参数指定要更新的字段,第三个参数是否提交到数据
12、repository.Update(model,x=>new {x.字段1,x.字段2},false)
//批量更新
13、repository.UpdateRange(model,x=>new {x.字段1,x.字段2},false)
//以上方式都能访问数据库
//框架使用EF时,默认开启了NoTracking,如果要更新操作调用repository.Update
//如果需要使用其他表的数据库访问,在【表Service】类的构造方法中获取即可
public partial class Sys_WorkFlowTableService
{
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly ISys_WorkFlowTableRepository _repository;//访问数据库
private readonly ISys_WorkFlowTableStepRepository _stepRepository;//访问数据库
[ActivatorUtilitiesConstructor]
public Sys_WorkFlowTableService(
ISys_WorkFlowTableRepository dbRepository,
IHttpContextAccessor httpContextAccessor,
ISys_WorkFlowTableStepRepository stepRepository
)
: base(dbRepository)
{
_httpContextAccessor = httpContextAccessor;
_repository = dbRepository;
//获取其他表的数据库访问
_stepRepository = stepRepository;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
← 接口返回字段大小写问题 EF执行原生sql →