创建用户关系表
问题描述:
我想在ASP.NET Core中创建用户关系表并遇到一些问题。如果因为这个原因必须禁用级联删除,我该如何防止孤儿?创建用户关系表
错误:
Introducing FOREIGN KEY constraint 'FK_UserRelationships_AspNetUsers_User2Id' on table 'UserRelationships' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
ApplicationDbContext.cs:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<UserRelationship>().HasKey(x => new { x.User1Id, x.User2Id });
}
public DbSet<UserRelationship> UserRelationships { get; set; }
}
我目前的模型:
public class UserRelationship
{
public byte RelationshipType { get; set; }
public ApplicationUser User1 { get; set; }
public string User1Id { get; set; }
public ApplicationUser User2 { get; set; }
public string User2Id { get; set; }
}
答
你有你的ApplicationUsers根据需要使EF将级联默认情况下删除两次到同一班(见here)。
你需要告诉它不要:
builder.Entity<UserRelationship>().HasOne(ur => ur.User1).WithMany().HasForeignKey(ur => ur.UserId1).WillCascadeOnDelete(false);
builder.Entity<UserRelationship>().HasOne(ur => ur.User2).WithMany().HasForeignKey(ur => ur.UserId2).WillCascadeOnDelete(false);
没有命名HasRequired()的方法。我想念什么? – Zack
如果我禁用级联删除,我该如何防止孤儿? – Zack
对不起,没有意识到它是EF Core。请参阅[这里](https://docs.microsoft.com/en-us/ef/core/modeling/relationships)。当你删除UserRelationship时,我假设你不想删除用户。如果你删除了一个用户,你可以检查现有的关系记录并删除它们(请参阅[这里](https://*.com/questions/16565078/delete-parent-with-children-in-one-to-many -关系))。 –