Skip to content

批量插入报错 #1990

Open
Open
@liangleiA

Description

@liangleiA

问题描述及重现代码:

使用自动建表情况下执行批量插入分表规则的实体时, 批量插入少量数据可以自动建表并且插入成功, 但是插入稍微多一点数据则出现异常,必须先手动建表后才能插入成功.
失败情况有:

  1. 批量300条 使用 freeSql.Insert(dats).AsTable(formattedDate).ExecuteAffrows(); 插入失败
  2. 批量300条, 设置表头 [Table(Name = "test_{yyyyMMdd}", AsTable = "StartTime=2025-1-1(1 day)")] , 数据设置StartTime批量插入失败

可以成功的情况有:

  1. 其他代码不动 修改只插入30条
  2. 保持300条, 去掉实体中的 string 和 double字段, 只保留StartTime
  3. 保持300条, 在插入前线select执行建表成功后再插入.
        public static void LargeDataSaveTest()
        {
            var freeSql = new FreeSqlBuilder()
                .UseConnectionString(DataType.Sqlite, "Data Source=test.db")
                .UseAutoSyncStructure(true)
                .Build();

            List<Test> dats = new List<Test>();
            for (int i = 0; i < 300; i++)
            {
                var testData = new Test();
                testData.StartTime = DateTime.Now;
                dats.Add(testData);
            }

            //string formattedDate = "test_" + DateTime.Now.ToString("yyyyMMdd");
            //这里使用select先建表可以成功
            //freeSql.Select<Test>().AsTable((a,b)=>formattedDate).ToOne();
            //用AsTable也不能成功
            var executeAffrows = freeSql.Insert(dats).ExecuteAffrows();
            Console.WriteLine(executeAffrows);
        }
    [Table(Name = "test_{yyyyMMdd}", AsTable = "StartTime=2025-1-1(1 day)")]
    public class Test
    {
        /// <summary>
        /// 主键id
        /// </summary>
        [Column(Name = "id", IsPrimary = true, IsIdentity = true)]
        public long Id { get; set; }

        /// <summary>
        /// 开始时间
        /// </summary>
        [Column(Name = "start_time")]
        public DateTime StartTime { get; set; }


        /// <summary>
        /// 工件号
        /// </summary>
        [Column(Name = "workpiece")]
        public string Workpiece { get; set; }

        /// <summary>
        /// 功率
        /// </summary>
        [Column(Name = "power")]
        public double power { get; set; }
    }

Image

数据库版本

sqlite

安装的Nuget包

	<PackageReference Include="FreeSql" Version="3.2.808" />
	<PackageReference Include="FreeSql.Provider.SqliteCore" Version="3.2.808" />

.net framework/. net core? 及具体版本

net5.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions