【发布时间】:2020-06-24 17:24:49
【问题描述】:
我的代码:
using var context = new NorthwindContext();
var csvConfig = new CsvConfiguration(CultureInfo.InvariantCulture)
{
Delimiter = ";",
HeaderValidated = null,
MissingFieldFound = null
};
using var reader = new StreamReader("csvfile.csv");
using var csv = new CsvReader(reader, csvConfig);
var records = csv.GetRecords<Employees>().ToList();
foreach (var item in records)
Console.WriteLine($"{item.FirstName} {item.LastName}"); //results as expected
context.AddRange(records);
await context.SaveChangesAsync();
await context.DisposeAsync();
CSV 文件:
FirstName;LastName
John;Doe
结果:
John Doe 在数据库中保存了两次。
预期结果:
John Doe 在数据库中只保存一次。
【问题讨论】:
-
你可以试试 HasHeaderRecord = true, inside new CsvConfiguration?
-
您似乎没有跳过标题行。
-
那是可能的,但是为什么在VS中它有1个元素,但在数据库端有2个元素?编辑 - 结果仍然相同 - 值重复。
-
故障排除 1. 删除 AddRange(records) 并查看是否有任何其他代码插入到您的数据库中。 2. 在你的 foreach 循环中使用 Add 并调试它。
-
已经尝试在
foreach循环中使用Add和Add- 结果完全相同。除了仅使用Add时出现异常(不能以这种方式在数据库中插入List)。
标签: c# csv entity-framework-core csvhelper