Open
Description
问题描述及重现代码:
使用自动建表情况下执行批量插入分表规则的实体时, 批量插入少量数据可以自动建表并且插入成功, 但是插入稍微多一点数据则出现异常,必须先手动建表后才能插入成功.
失败情况有:
- 批量300条 使用 freeSql.Insert(dats).AsTable(formattedDate).ExecuteAffrows(); 插入失败
- 批量300条, 设置表头 [Table(Name = "test_{yyyyMMdd}", AsTable = "StartTime=2025-1-1(1 day)")] , 数据设置StartTime批量插入失败
可以成功的情况有:
- 其他代码不动 修改只插入30条
- 保持300条, 去掉实体中的 string 和 double字段, 只保留StartTime
- 保持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; }
}
数据库版本
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
Labels
No labels