创建用户关系表

问题描述:

我想在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); 
+0

没有命名HasRequired()的方法。我想念什么? – Zack

+0

如果我禁用级联删除,我该如何防止孤儿? – Zack

+0

对不起,没有意识到它是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 -关系))。 –