当具有导航属性的模型添加到数据库时,会发生外键约束错误

时间:2016-10-04 15:53:08

标签: entity-framework

我有两张桌子,员工和部门  员工
EmpId EmpName DepID
1 Jayaram 1
2 Unni 1
3 Hishan 2
4 Dayeswar 2


1医疗
 2清洁
 3安全性  4食堂

有两个模型对应于这些表

public class EmployeeModel
    {
        [Key]
        public int EmpId { get; set; }
        public string EmpName { get; set; }
        public int DepId { get; set; }

        public virtual DepartmentModel Departments { get; set; }


    }

public class DepartmentModel
    {
        [Key]
        public int DepId { get; set; }
        public string DepName { get; set; }

    }

在EmployeeModel中我将DepartmentModel作为导航属性。这是我的问题是当我用EmployeeModel插入Employee表时。我得到如下错误

  

InnerException:System.Data.SqlClient.SqlException HResult = -2146232060   Message = INSERT语句与FOREIGN KEY冲突   约束" FK_dbo.EmployeeModels_dbo.DepartmentModels_DepId"。该   数据库" MvcApplication2.Models.Connect",表中发生冲突   " dbo.DepartmentModels",column' DepId'。声明一直如此   终止。 Source = .Net SqlClient Data Provider ErrorCode = -2146232060

     

connect.Employees.Add(EmployeeModelObject);                   connect.SaveChanges();

我希望我的一些堆栈兄弟可以解决我的问题

1 个答案:

答案 0 :(得分:0)

根据错误,您的表与您插入的FK值(列:DepId)之间的关系不在“DepartmentModel”表中。

FK的工作方式是它不能在该列中具有值,该值也不在引用的(DepartmentModel)表的主键列中。

为了修复,您需要在保存EmployeeModel之前将值设置为具有现有或新的DepartmentModel对象的EmployeeModelObject.Departments。

样品:

using (var ctx = new CustomContext())
{
    EmployeeModel emp = new EmployeeModel() { EmpId = 1, EmpName="Name" }
    emp.Departments = new DepartmentModel() { DepId = 1, DepName = "D1" }
    ctx.EmployeeModels.Add(emp);
    ctx.SaveChanges();
}