【发布时间】:2022-11-14 01:13:55
【问题描述】:
我在 SQL Server 中有一个名为“JobInfos”的数据库表,其中包含许多列。
JobID - (int) 添加数据时自动填充递增值 组织代码 - (字符串) 订单号 - (int) 工单 - (int) 客户 - (字符串) BaseModelItem -(字符串) OrdQty - (int) PromiseDate -(字符串) LineType -(字符串)
使用带有实体框架和 CSVHelper 的 Blazor 应用程序每天多次写入此表。这完美地工作。 CSV 文件中的所有行都添加到数据库中。
if (fileExist)
{
using (var reader = new StreamReader(@path))
using (var csv = new CsvReader(reader, config))
{
var records = csv.GetRecords<CsvRow>().Select(row => new JobInfo()
{
OrgCode = row.OrgCode,
OrderNumber = row.OrderNumber,
WorkOrder = row.WorkOrder,
Customer = row.Customer,
BaseModelItem = row.BaseModelItem,
OrdQty = row.OrdQty,
PromiseDate = row.PromiseDate,
LineType = row.LineType,
});
using (var db = new ApplicationDbContext())
{
while (!reader.EndOfStream)
{
if (lineNumber != 0)
{
db.AddRange(records.ToList());
db.SaveChanges();
}
lineNumber++;
}
NavigationManager.NavigateTo("/", true);
}
}
由于这些多个 CSV 文件可能包含可能已经在数据库表中的行,因此在读取表时我会得到重复的记录,这会导致用户手动删除所有较新的重复行以仅保留原始条目。
我无法控制 CSV 文件或它们的创建。我正在尝试仅添加包含基于 WorkOrder 编号的新数据的行,该编号不能与任何其他编号相同。
我在 StackOverflow 上找到了另一篇有帮助的帖子,但我遇到了一个我无法弄清楚的剩余错误。
我在这里更改了我的代码...
if (lineNumber != 0)
{
var recordworkorder = records.Select(x => x.WorkOrder).ToList();
var workordersindb = db.JobInfos.Where(x => recordworkorder.Contains(x.WorkOrder)).ToList();
var workordersNotindb = records.Where(x => !workordersindb.Contains(x.WorkOrder));
db.AddRange(records.ToList(workordersNotindb));
db.SaveChanges();
}
但是这条线...
var workordersNotindb = records.Where(x => !workordersindb.Contains(x.WorkOrder));`
最后引发错误 (x.WorkOrder) - CS1503 参数 1:无法从“int”转换为“DepotQ4.Data.JobInfo”
WorkOrder 是一个整数 JobID 是主键和一个 int 表中的每条记录都必须有一个唯一的 WorkOrder
我不确定我没有看到什么。可以在这里使用一些帮助吗?
【问题讨论】:
标签: sql-server entity-framework duplicates blazor csvhelper