# 数据库访问说明

以下示例[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

# 模糊查询、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

# 主子表查询

       //主子表查询需要在代码生成器上配置明细表并生成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

# 动态查询

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

# 分页查询

//1为分页页的数,30为分页每页的大小
var list = repository.repository.FindAsIQueryable((x) => 条件).TakePage(1, 30);
//查询单条数据,将上面的ToList改为FirstOrDefault
//异步查询将上面的改为 await repository.xxx().ToListAsync();
//如果要操作其他表,见下面【获取表依赖注入 Repository 实例】,获取表的 Repository对象后调用数据库访问
1
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

# 更新操作

    //单表更新
    //更新时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

# 新建操作

    //单表写入
    表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

# 删除操作

    //删除时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

# 原生 EF 操作

     repository.DbContext.Set<>();
    //如果要操作其他表,见下面【获取表依赖注入 Repository 实例】,获取表的 Repository对象后调用数据库访问
1
2

# 原生 SqlSugar 操作

     repository.SqlSugarClient
      DbManger.
    //如果要操作其他表,见下面【获取表依赖注入 Repository 实例】,获取表的 Repository对象后调用数据库访问
1
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