.net - Entity Framework 应用程序中的虚假重复键错误

标签 .net entity-framework

我有一个使用 Entity Framework 模型的 ASP.NET 应用程序。在导入例程中,使用下面的代码,我在 SaveChanges 调用上收到 AccountNum 的“无法插入重复键”异常,但是当执行因异常而停止时,我可以在数据库中查询明显的重复的字段,并且不存在先前的记录。

        using (var ents = new PvmmsEntities())
        {
            foreach (DataRow row in importedResources.Rows)
            {
                var empCode = row["EmployeeCode"].ToString();
                try
                {
                    var resource = ents.ActivationResources.FirstOrDefault(rs => rs.EmployeeCode == empCode);
                    if (resource == null)
                    {
                        resource = new ActivationResources();
                        resource.EmployeeCode = empCode;
                        ents.AddToActivationResources(resource);
                    }
                    resource.AccountNum = row["AccountNum"].ToString();
                    ents.SaveChanges(true);
                } catch(Exception ex)
                {
                }
            }
        }

更新: 对于员工 1546,我捕获了一个有效的重复键异常;他有一个重复的银行帐户。然后,下一个员工是 1548(1547 确实丢失了)。 1548 有一个唯一的银行帐户,但对于 1548,我在 SaveChanges 上遇到重复 key 异常。配置文件显示 SaveChanges 仍在尝试插入 1546,实际上它仍然有一个重复的银行帐户。

最佳答案

您的原始对象(具有“真实”重复错误的对象)仍在上下文中。稍后添加“好”对象后执行 SaveChanges 尝试保存这两个对象。您必须删除添加到上下文中的“坏”对象新建一个不添加“坏”对象的新上下文。

关于.net - Entity Framework 应用程序中的虚假重复键错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2991534/

相关文章:

c# - NancyFx 测试 : The type or namespace Bootstrapper cannot be found

c# - 动态调用方法和类名

c# - 如何在 LINQ 中使用 ToString() 方法将整数转换为字符串

.net - 写入大型 BLOB 会抛出 InvalidOperationException

.net - 类库项目构建错误,引用损坏

c# - SetWindowPos 不改变最大化状态

c# - 将数据从 Entity Framework 模型绑定(bind)到 DataGridView C#

c# - EntityFrameworks.dll 文件丢失?

c# - EF Core 左连接计数

c# - 在 LINQ 中将多行连接成一行