在.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。谢谢。

在.net中插入记录之前检查记录是否存在的最有效方法

你说的"SQL"是指MS SQL Server吗?如果是这样,那么看看MERGE语句。您可以为MERGE语句提供一个记录集来处理,它将决定它是否存在(sql语言中的MATCH),您可以决定是否插入/更新/忽略相应的

如果没有数据库设计和代码插入,很难回答这个问题。尽管你可以尝试用你当前的代码做一些事情来提高效率。

1)将你的for each改为Parallel。ForEach,可以同时检查多个记录

2)我也相信在数据库查询FirstOrDefault比任何

更有效

= = = = =

如果这仍然不够有效,我将考虑编写自己的存储过程,并调用它并使用SQLBulkCopy插入数据。