FreeSql学习笔记——2.插入

前言

  由于还没有表结构,就先从新增开始,插入一些数据后才好做查询、修改、删除操作。

 

初始化

  前面注入FreeSql时设置过自动同步表结构,那么就不用管数据库了,只需要在项目中定义实体,就会自动生成表结构,这里创建一个学生类Student

/// <summary>
/// 学生
/// </summary>
[Table(Name = "Student")]
public class Student
{
    /// <summary>
    /// 自增主键
    /// </summary>
    [Column(IsIdentity = true, IsPrimary = true)]
    public long Id { get; set; }

    /// <summary>
    /// 姓名
    /// </summary>
    [Column(IsNullable = false, DbType = "varchar(20)")]
    public string Name { get; set; }

    /// <summary>
    /// 年龄
    /// </summary>
    public int Age { get; set; }

    public StatusEnum Status { get; set; }

    /// <summary>
    /// 添加时间
    /// </summary>
    public DateTime AddTime { get; set; }

    /// <summary>
    /// 说明
    /// </summary>
    [Column(IsNullable =true,DbType = "varchar(100)")]
    public string Remark { get; set; }
}

/// <summary>
/// 状态枚举    1.正常   2.冻结
/// </summary>
public enum StatusEnum
{
Normal = 1, Freeze = 2 }

  

有了实体后新增个接口用于插入数据
[HttpGet("AddStudent")]
public async Task<ActionResult> AddStudent()
{
    var student = new Student
    {
        Name = "小明",
        Age = 8,
        Status = StatusEnum.Normal,
        AddTime = DateTime.Now
    };

    var res = await _freeSql.Insert<Student>().AppendData(student).ExecuteInsertedAsync();

    return Ok();
} 

 

 

批量插入

  批量插入可以使用ExecuteAffrows()、ExecuteSqlBulkCopy()方法,BulkCopy操作是扩展方法,可用的数据库有SqlServer/PostgreSQL/MySql,大批量插入使用BulkCopy更快
var studentList = new List<Student>();

for (int i = 0; i < 10; i++)
{
    studentList.Add(new Student
    {
        Name = "小明" + i,
        Age = i,
        Status = StatusEnum.Normal,
        AddTime = DateTime.Now
    });
}

//await _freeSql.Insert(studentList).ExecuteSqlBulkCopyAsync();
var res = await _freeSql.Insert(studentList).ExecuteAffrowsAsync();

return Ok();

  

插入指定列、忽略列

  正常情况下不指定列、不忽略列,将实体所有的字段插入数据库
  插入指定列就是指定字段插入,未指定的列不生成sql
  忽略列指定某一些字段不插入,与指定列相反
  忽略列和指定列同时设置同一字段以优先级为准
  插入的优先级:
    全部列 < 指定列(InsertColumns)< 忽略列(IgnoreColumns)
_freeSql.Insert(student1).ExecuteAffrowsAsync();//正常插入

_freeSql.Insert(student2)
                .InsertColumns(x => new { x.Name, x.Age, x.Status, x.AddTime })
                .ExecuteAffrowsAsync();//指定列
//等价于
_freeSql.Insert(student2)
                .IgnoreColumns(x => x.Remark)
                .ExecuteAffrowsAsync();//忽略列

  

字典插入

  直接使用字典插入,无需使用实体
var dic = new Dictionary<string, object>();
dic.Add("Name", "Dic");
dic.Add("Age", 1);
dic.Add("Status", StatusEnum.Normal);
dic.Add("AddTime", DateTime.Now);

_freeSql.InsertDict(dic).AsTable(nameof(Student)).ExecuteAffrowsAsync();

  

 就插入数据而言,使用的较多的还是单个实体插入(第一种方式),如果是大批量插入建议使用BulkCopy,官方提供的插入方式还有导入表数据、Mysql特有的功能,有需要的同学可以了解下
 
 

 

posted @ 2022-05-23 16:57  贰拾~  阅读(895)  评论(0编辑  收藏  举报