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特有的功能,有需要的同学可以了解下