[英]The Insert statement conflict with the foreign key constraint. Entity Framework error
[英]Entity Framework seeding causes insert statement conflict with foreign key
我有一個簡單的模型:
class Employee {
int EmployeeId {get;set;}
List<Task> Tasks {get;set;}
}
class Manager {
int ManagerId {get;set;}
List<Task> Tasks {get;set;}
}
class Task {
int TaskId {get;set;}
EmployeeId {get;set;}
ManagerId {get;set;}
[ForeignKey("EmployeeId")]
Employee Employee {get;set;}
[ForeignKey("ManagerId")]
Manager Manager {get;set;}
}
class Task1 : Task { }
class Task2 : Task { }
當我嘗試播種數據庫時,出現異常,這就是播種方式:
Employee employee = new Employee();
context.Employees.Add(employee);
context.SaveChanges();
Manager manager = new Manager();
context.Managers.Add(manager);
context.SaveChanges();
List<Task> EmpTask = new List<Task>();
//EXCEPTION OCCURS HERE WHEN I TRY TO ADD NEW TASK ITEMS
Task EmpOne = new Task1();
Task EmpTwo = new Task2();
EmpTask.Add(EmpOne);
EmpTask.Add(EmpTwo);
Employee.Tasks = EmpTask;
Context.Entry(employee).State = EntityState.Modified;
Context.SaveChanges();
List<Task> ManagerTask = new List<Task>();
Task ManagerOne = new Task1();
Task ManagerTwo = new Task2();
ManagerTask.Add(ManagerOne);
ManagerTask.Add(ManagerTwo);
Manager.Tasks = ManagerTask;
Context.Entry(manager).State = EntityState.Modified;
Context.SaveChanges();
我不斷得到的例外是:
{“ INSERT語句與FOREIGN KEY約束\\“ FK_dbo.Task_dbo.Employee_EmployeeId \\”沖突。沖突發生在數據庫\\“ GIP \\”,表\\“ dbo.Employee \\”,列'EmployeeId'中。\\ r \\ nThe語句已終止。“}
但是,當我將代碼更改為以下代碼時,我沒有任何問題(播種方式相同,但沒有Manager部分):
class Employee {
int EmployeeId {get;set;}
List<Task> Tasks {get;set;}
}
class Task {
int TaskId {get;set;}
int EmployeeId {get;set;}
[ForeignKey("EmployeeId")]
Employee Employee {get;set;}
}
似乎當Task類具有2個外鍵約束時,它會變得混亂或其他問題。
另外,如果我重新添加Manager類,但是從Task類中刪除了所有ForeignKey約束,則它沒有問題,因為它在數據庫中創建了自己的自動生成的外鍵列,而某些員工外鍵對於Manager任務而言為Null,和經理外鍵對於員工任務為空
確保您的FK列為空,例如。 int?
而不是int
。 如果它們不為null,則默認情況下為0,它將使用0鍵引用實體,這將違反FK約束。
如果要指定自己的外鍵,則屬性必須是虛擬的。
例:
[ForeignKey(“ Employee”)] public virtual int EmployeeId {get; 組; }
[ForeignKey(“ EmployeeId”)]公共虛擬Employee員工{get; 組; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.