人大金仓使用无实体建类插入无重复数据时报错主键重复 返回

SqlSugar 沟通中
14 111

sqlsugarcore:5.1.4.152  人大金仓:V8R6


1、先用db.DbMaintenacne.GetColumnInfosByTableName("xxx"); 从 mysql 中获取表结构信息

2、在根据表结构信息使用无实体建类  _newDb.CodeFirst.InitTables(typeA) 将表创建到人大金仓数据库

3、读取mysql中的表数据

4、再根据无实体建类插入数据到人大金仓数据库

var objList = _newDb.DynamicBuilder().CreateObjectByType(typeA,dicts);

await _newDb.InsertableByObject(objList).PageSize(1000).ExecuteCommandAsync();


批量插入数组时报错主键重复,循环单条插入时不报错

热忱回答14

  • 主键是什么类型, 或者提供一个可以重现的DEMO

    0 回复
  • 是不是自增等

    0 回复
  • 主键不是自增,主键就是string、varchar


    0 回复
  • 转换成DataTable使用批量插入可以成功插入数据

    await _newDb.Fastest<DataTable>().AS("tableA").PageSize(1000).BulkCopyAsync(dt);

    0 回复
  • @提笔画轻风:string是guid吗?你保证你传入的不可能重复

    0 回复
  • 这个需提供DEMO的。因为普通插入和InsertableByObject底层是一个代码。

    0 回复
  • 几乎不可能存在BUG的。除非你构造的类不对

    0 回复
  • ConsoleApp2.zip

    数据、代码都在代码里,需要重新配置下mysql、kdbndp数据库的连接词,已成功浮现

    0 回复
  •    db.CodeFirst.InitTables<Unitfasdsfa>();//建表
       db.DbMaintenance.TruncateTable<Unitfasdsfa>();//清空表
       List<Unitfasdsfa> list = new List<Unitfasdsfa>();
       for (int i = 0; i < 20000; i++)
       {
           list.Add(new Unitfasdsfa() { pk = i + "", Name = "n" + i });
       }
       db.InsertableByObject(list).PageSize(1000).ExecuteCommand();//插入
       
       
       
        //实体
        public class Unitfasdsfa
         {
             [SugarColumn(IsPrimaryKey = true)]
             public string pk { get; set; }
             public string Name { get; set; }
         }

    在我这个基础上改,改个能重现的,你的DEMO数据我不清楚本身没有重复的。

    0 回复
  • image.png

    我这边测试OK

    0 回复
  • sqlsugar也要最新的

    0 回复
  • 数据是没有重复的,因为报错的列在mysql就是主键

    0 回复
  • @提笔画轻风:你DEMO建表都报错,按我的用例改个能重现的

    0 回复
  • var dt=db.Utilities.DictionaryListToDataTable(dicts);

    或者用我这个转datatabe 

    0 回复