【问题标题】:The UPDATE statement conflicted with the FOREIGN KEY constraint when saving my Employee object保存我的 Employee 对象时,UPDATE 语句与 FOREIGN KEY 约束冲突
【发布时间】:2015-12-07 15:11:34
【问题描述】:

我发现我的员工版页面存在错误,我可以在其中更改有关选定员工的信息(姓名、登录名、密码等)

_service.Edit(objToEdit)

将我发送到以下版本:

public bool Edit(Employee objEmployee)
{            
    if (!Validate(objEmployee))
        return false;
    try
    {
        _repository.Edit(objEmployee);
    }
    catch
    {
        return false;
    }
    return true;
}

最后到以下地方保存更改:

public Employee Edit(Employee objEmployee) 
{
     var Original = Get(objEmployee.Login);
     if (Original != null)
     {
         var attachedEmp = _entities.Entry(Original);
         attachedEmp.CurrentValues.SetValues(objEmployee);
     }
     else
     {
         _entities.Employees.Add(objEmployee);
     }
     _entities.SaveChanges();
     return objEmployee;
 }

但是一旦我到达_entities.SaveChanges(),我就会收到以下错误:

UPDATE 语句与 FOREIGN KEY SAME TABLE 约束“FK_EmployeeEmployee2”冲突。冲突发生在数据库“CRAV34”、表“dbo.Employee”、列“登录”中。 声明已终止。

我查了一下,但找不到任何真正帮助我的东西。我最近用新员工更新了我的数据库,版本适用于旧员工,但似乎在新员工上出现此错误。

任何帮助将不胜感激!

【问题讨论】:

    标签: c# sql asp.net-mvc sql-server-2008


    【解决方案1】:

    从提供的详细信息中可以看出,您似乎在列 Login 上存在从表 Employee 到表 Employee 的 FK 约束。当您尝试更改 Login 列的值(在 Edit 方法中)时,您实际上违反了约束,因此不允许您这样做。

    要解决此问题,请删除该约束。

    如果您需要登录列的查找表,请创建一个单独的表。

    我想不出一个很好的理由来证明使用“反射”FK 是合理的。也许有,但似乎不是这样。

    编辑: 如何删除约束: 右键单击它,可能会有一个删除/删除选项(假设您使用的是 SQL Server)。

    您也可以使用 SQL 代码 (enter link description here):

    ALTER TABLE <schema_name, sysname, dbo>.<table_name, sysname, table_name>
       DROP CONSTRAINT <default_constraint_name, sysname, default_constraint_name>
    GO
    

    【讨论】:

    • 我怎样才能放弃这个约束?
    • 用那个编辑了答案
    • 谢谢,但遗憾的是这似乎不是问题。我在那个文件夹中没有约束。问题可能是别的。
    • 从您的错误消息中,您必须有一个约束,同时检查键。
    猜你喜欢
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多