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特有的功能,有需要的同学可以了解下
浙公网安备 33010602011771号