版本不提,也不管什么细节原因,遇到了就这么干就完了。
dapper批量插入mysql时提示必须声明标量变量@XXX
我记得曾经是可以成功的,别人的某些实例也可以。
也许是版本或者别的什么原因,现在不行了。
原因也简单,就是插入时的列名和list对象的属性名没有了对应关系。
直接上代码就完了。
/// <summary>
/// 批量插入
/// </summary>
/// <param name="list"></param>
/// <returns></returns>
public int BatchInsert(List<NewNetSchoolCategoryInfo> list)
{
var connectionPool = new ConnectionPool.ConnectionPool(ConnectionString);
using (SqlConnection con = connectionPool.GetConnection())
{
//插入数据,并得到主键
var sql = $"insert into NewNetSchoolCategory values (@Name,@Code,@Level,@ParentCode,@Remark,@OldCrmTableId) ;";
//正是因为报错我才加了这个selec,转换
var newList = list.Select(l => new
{
Name = l.Name,
Code = l.Code,
Level = l.Level,
ParentCode = l.ParentCode,
Remark = l.Remark,
OldCrmTableId = l.OldCrmTableId
}).ToList();
var count = con.Execute(sql, newList);
connectionPool.ReturnConnection(con);
//return count;
return 0;
}
}
其中主要是select的那一行。
其中 NewNetSchoolCategoryInfo
就是个普通表的 Model 的class,没什么特别的。