FreeSql学习笔记——2.插入
前言
由于还没有表结构,就先从新增开始,插入一些数据后才好做查询、修改、删除操作。
初始化
前面注入FreeSql时设置过自动同步表结构,那么就不用管数据库了,只需要在项目中定义实体,就会自动生成表结构,这里创建一个学生类Student
///有了实体后新增个接口用于插入数据/// 学生 /// [Table(Name = "Student")] public class Student { ////// 自增主键 /// [Column(IsIdentity = true, IsPrimary = true)] public long Id { get; set; } ////// 姓名 /// [Column(IsNullable = false, DbType = "varchar(20)")] public string Name { get; set; } ////// 年龄 /// public int Age { get; set; } public StatusEnum Status { get; set; } ////// 添加时间 /// public DateTime AddTime { get; set; } ////// 说明 /// [Column(IsNullable =true,DbType = "varchar(100)")] public string Remark { get; set; } } ////// 状态枚举 1.正常 2.冻结 /// public enum StatusEnum {
Normal = 1, Freeze = 2 }
[HttpGet("AddStudent")]
public async Task AddStudent()
{
var student = new Student
{
Name = "小明",
Age = 8,
Status = StatusEnum.Normal,
AddTime = DateTime.Now
};
var res = await _freeSql.Insert().AppendData(student).ExecuteInsertedAsync();
return Ok();
}
批量插入
批量插入可以使用ExecuteAffrows()、ExecuteSqlBulkCopy()方法,BulkCopy操作是扩展方法,可用的数据库有SqlServer/PostgreSQL/MySql,大批量插入使用BulkCopy更快var studentList = new List(); 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就插入数据而言,使用的较多的还是单个实体插入(第一种方式),如果是大批量插入建议使用BulkCopy,官方提供的插入方式还有导入表数据、Mysql特有的功能,有需要的同学可以了解下(); 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();