无法在 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);
}
我的问题:它工作得很好,可以进行所需的更改。但有时随机的数据库操作没有正确完成。就像某些值未更新或某些行未删除一样。
我尝试了很多来找出背后的可能原因。可能的原因是什么(竞争条件或其他什么?)和纠正它。提前谢谢。
排除 SaveChanges 或其他在查询后更改记录值的查询,您需要跟踪异常和 ExecuteCommand 的结果(应为 1),否则将很难理解问题。
无论如何,只是为了开始,错误可能是:
1.SQL 语法(更新查询中的 SQL 注入或无效字段名称)。因此,请将dbChange.PreviousValue
替换为dbChange.PreviousValue.Replace("'", "''")
并引用字段名称。
2. 引用完整性冲突(您可以使用 ExecuteCommand 返回值进行检查。