浏览器标题切换
浏览器标题切换end

Intern Day78 - C#使用EF连接PostgreSQL数据库

同样问题

该问题等同于:

  • C#如何读取数据库中我们需要的一条数据

  • C#后端如何接收表单数据

  • C#后台如何查询数据库

  • C#如何读取数据库中的JSON配置信息/表单

  • C#如何获取后台数据库里的一条配置信息

  • C#连接数据库,并从数据库中取值并进行增删改查操作

前置知识

首先补充一些前置知识:

  1. FirstOrDefaultAsync:只取数据库中第一条数据;没有数据返回null

    • 如果是SingleOrDefaultAsync的话:只取第一条数据,并且大于1条数据报异常;没有数据返回null
  2. await:表示异步操作,基本都加

  3. _unitofwork.DbContext.AxxBxx:对 AxxBxx 数据表/数据库进行操作(增删改查)

  4. 有些会在 AxxBxx 后加上 .AsNoTracking().Join(……).where(c=>c.xxx==input.xxx&&!xxx).selecct(x=>new{Id=x.Id,Name=x.Name}).ToListAsync();

    • .AsNoTracking():就是说是否需要跟踪数据库。如果我们只是需要查询,后续没有其他操作,那就不需要跟踪,这句话可以不用写;如果是其他操作,比如增删改,那么就需要跟踪。

具体代码

var config = await _unitofwork.DbContext.AxxBxx(DbSet中配置文件数据表对应的名称 需要操作的数据表名)
    .FirstOrDefaultAsync(x=>x.Key=="xxx.xxx_xxx"&&x.IsDeleted == false);
// Key的位置写什么,取决于需要取的数据 除了主键(一般是id 但是不同数据在不同表中id又不一定相同)外,
// 能区分其他行的唯一字段性质
// xxx.xxx_xxx部分写:数据库中对应的该条信息的 Key
// x=>x.Key=="xxx.xxx_xxx":表示判断集合中是否存在 x.Key=="xxx.xxx_xxx" 的元素

if (config == null) // 判断配置文件是否为空
{
    // _logger.LogDebug($"后台xx数据为空");
    throw new xxxxException($"项目xx配置为空"); // 这个抛异常的同时也打了log出来,所以上面那个语句不用写
}

// 注意:如果得到的数据后续使用的话,需要 JSON反序列化 操作(一行代码)
posted @ 2021-05-05 15:34  抓水母的派大星  阅读(145)  评论(0编辑  收藏  举报