【发布时间】:2019-11-02 15:37:06
【问题描述】:
尝试使用 Asp Net Core 创建简单的 CRUD 应用程序。我有 2 个实体:
部门和员工(一对多)。我需要从部门表中删除记录。但是当我尝试使用OnDelete(DeleteBehavior.Restrict) 或OnDelete(DeleteBehavior.ClientSetNull) 删除记录时,我遇到了异常:
表“Departments”中的 UPDATE 或 DELETE 违反外键约束 “FK_Employees_Departments_DepartmentCode”表“员工”
我该如何解决这个问题? 实体员工:
public class Employee
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required(ErrorMessage = "Input fullname of employee")]
public string FullName { get; set; }
[Required(ErrorMessage = "Input date of birth")]
public DateTime DateOfBirth { get; set; }
[Required(ErrorMessage = "Input code")]
public string Code { get; set; }
[Required(ErrorMessage = "Input fullname of employee")]
public int Salary { get; set; }
public string DepartmentCode { get; set; }
public Department Department { get; set; }
}
实体部门:
public class Department
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required(ErrorMessage = "Input name of department")]
public string Name { get; set; }
[Required(ErrorMessage = "Input code of department")]
public string Code { get; set; }
public ICollection<Employee> Employees { get; set; }
public Department()
{
Employees = new List<Employee>();
}
}
上下文类设置:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Department>()
.HasMany<Employee>(d => d.Employees)
.WithOne(e => e.Department)
.HasForeignKey(e => e.DepartmentCode)
.OnDelete(DeleteBehavior.Restrict);
modelBuilder.Entity<Department>()
.HasKey(d => d.Code);
modelBuilder.Entity<Employee>()
.HasKey(e => e.Code);
modelBuilder.Entity<Department>()
.HasIndex(d => d.Name).IsUnique();
}
【问题讨论】:
-
删除部门后是否要删除员工?我会在您的架构中引入一个新表。一个 EmployeeDepartment 表。这将是一个更好的设计 IMO。
-
不,我想删除部门而不级联删除员工。
标签: postgresql asp.net-core entity-framework-core