在.net中插入记录之前检查记录是否存在的最有效方法
本文关键字:记录 存在 方法 有效 是否 net 插入 检查 | 更新日期: 2023-09-27 18:08:36
我正在解析JSON数据并将记录插入到SQL中的表中。问题是数据量大,并且在插入之前必须在循环中检查每条记录,这会减慢程序的速度。
我使用AddRange()一次插入一个数据块,但检查每个值会导致效率问题。
下面是我在JSON数据上执行循环并检查值是否存在的代码片段:
foreach (JObject item in content2)
{
try
{
Assignment assignment = JsonConvert.DeserializeObject<Assignment>(item.ToString());
//Begin Assignments
var assignment_id = (int) item["id"];
var course_id = (int) item["course_id"];
if (!CheckIfAssignmentRecordExists(assignment_id))
{
newAssignment.Add(assignment);
log.Info("Inserted Assignment ID: " + assignment_id + " for course id: " + course_id);
writeCountA = writeCountA + 1;
}
else
{
log.Info("Skipping Assignment ID: " + assignment_id);
skipCountA = skipCountA + 1;
}
//End Assignments
}
catch (Exception)
{
log.Info("Error Processing: " + (int) item["id"]);
return;
}
}
赋值检查函数:
private static bool CheckIfAssignmentRecordExists(int id)
{
var retVal = false;
using (var db = new DataContext())
{
retVal = db.Assignments.Any(record => record.id == id);
}
return retVal;
}
我看到过其他建议,如保存到临时表和执行合并,但不确定如何完成。
在插入之前检查增量数据的最有效方法是什么?
我在。net中使用实体框架6和MVC 5。谢谢。
你说的"SQL"是指MS SQL Server吗?如果是这样,那么看看MERGE语句。您可以为MERGE语句提供一个记录集来处理,它将决定它是否存在(sql语言中的MATCH),您可以决定是否插入/更新/忽略相应的
如果没有数据库设计和代码插入,很难回答这个问题。尽管你可以尝试用你当前的代码做一些事情来提高效率。
1)将你的for each改为Parallel。ForEach,可以同时检查多个记录
2)我也相信在数据库查询FirstOrDefault比任何
更有效= = = = =
如果这仍然不够有效,我将考虑编写自己的存储过程,并调用它并使用SQLBulkCopy插入数据。