删除将PK用作FK约束的DB表行

时间:2015-06-16 17:16:57

标签: c# sql asp.net asp.net-mvc entity-framework

我有一个方法可以通过userId从我的Users表中删除用户:

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);
}

仍然会出现外部约束错误。

2 个答案:

答案 0 :(得分:0)

您需要配置UserRole实体:

modelBuilder.Entity<UserRole>().HasForeignKey(r => r.UserId).WillCascadeOnDelete(true);

答案 1 :(得分:0)

我在删除userobject之前添加了这个工作:

master