删除将 PK 用作 FK 约束的数据库表行
本文关键字:数据库 约束 FK PK 用作 删除 | 更新日期: 2023-09-27 17:56:29
我有一个方法,可以通过userId从我的用户表中删除用户:
public void DeleteUser(int id)
{
User delObj = (Users.Where(u => u.UserId == id)).Single();
Users.Remove(delObj);
SaveChanges();
}
主键 userId 也用作 userroles 表中的外键,其中有 UserRoleId (PK)、UserId (FK) 和 RoleId (FK)。我不确定如何使用一种方法删除两个表中的两行。
以下是确切的属性:
public class User
{
[Key]
public int UserId { get; set; }
public string UserName { get; set; }
public virtual ICollection<UserRole> UserRoles { get; set; }
}
public class UserRole
{
[Key]
public int UserRoleId { get; set; }
public int UserId { get; set; }
public short RoleId { get; set; }
public virtual Role Role { get; set; }
}
我将其添加到我的 DbContext 中,但它仍然无法正常工作:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.HasMany(u => u.UserRoles)
.WithOptional().WillCascadeOnDelete(true);
base.OnModelCreating(modelBuilder);
}
仍然发生外部约束错误。
您需要改为配置用户角色实体:
modelBuilder.Entity<UserRole>().HasForeignKey(r => r.UserId).WillCascadeOnDelete(true);
我在删除用户对象之前添加它来解决这个问题:
UserRole deleteUserRoleObject = (UserRoles.Where(ur => ur.UserId == id)).Single();
UserRoles.Remove(deleteUserRoleObject);
SaveChanges();