无法在 C# 实体框架中以迭代方式正确执行数据库更改

本文关键字:执行 方式正 执行数 数据库 迭代 实体 框架 | 更新日期: 2023-09-27 18:37:18

我维护要在数据库中完成的操作(删除和更新)列表。我使用 foreach 迭代列表并执行这些操作。下面是伪代码示例。我正在使用实体框架和SQL Server作为其背后的数据库。

foreach ( dbChange in dbChanges)
        {
            switch (dbChange.Operation)
            {
                case Add:
                    queryStr = String.Format("DELETE FROM {0} WHERE {1} = {2}",
                        dbChange.TableName,
                        dbChange.PrimaryKeyName,
                        dbChange.PrimaryKeyValue);
                    break;
                case Update:
                    queryStr = String.Format("UPDATE {0} SET {1} = '{2}' WHERE {3} = {4}",
                        dbChange.TableName,
                        dbChange.ColumnName,
                        dbChange.PreviousValue,
                        dbChange.PrimaryKeyName,
                        dbChange.PrimaryKeyValue);
                    break;
            }
         DBQuery.ExecuteCommand(ConnectionString, queryStr, 10);
        }

我的问题:它工作得很好,可以进行所需的更改。但有时随机的数据库操作没有正确完成。就像某些值未更新或某些行未删除一样。

我尝试了很多来找出背后的可能原因。可能的原因是什么(竞争条件或其他什么?)和纠正它。提前谢谢。

无法在 C# 实体框架中以迭代方式正确执行数据库更改

排除 SaveChanges 或其他在查询后更改记录值的查询,您需要跟踪异常和 ExecuteCommand 的结果(应为 1),否则将很难理解问题。

无论如何,只是为了开始,错误可能是:
1.SQL 语法(更新查询中的 SQL 注入或无效字段名称)。因此,请将dbChange.PreviousValue替换为dbChange.PreviousValue.Replace("'", "''")并引用字段名称。
2. 引用完整性冲突(您可以使用 ExecuteCommand 返回值进行检查。