在表 'Jobs' 上引入外键约束'FK_Jobs_AspNetUsers_UserId'可能会导致循环或多个级联路径



我有以下实体在我的项目,我得到一个错误时,试图更新我的数据库(SQL Server)。我已经环顾了堆栈溢出,看到一些人和我有完全相同的问题,但是当我尝试他们的修复时,我仍然得到相同的错误。我已经处理这个错误一段时间了,我似乎不知道到底是什么错了。我想我可能需要一些帮助来解决这个问题。

MyAppUserentity:

public class ApplicationUser : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Bio { get; set; }
public string City { get; set; }
public DateTime CreatedAt { get; set; }
public virtual ICollection<Job> CreatedJobs { get; set; }
public virtual ICollection<Job> AssignedJobs{ get; set; }
public string Avatar { get; set; }
public virtual ICollection<Watch> Watching { get; set; }
public string Tagline { get; set; }
public Socials Socials { get; set; } 
public virtual ICollection<Skill> SkillSet { get; set; }
public virtual ICollection<Language> Languages { get; set; }
}

我的Job实体

public class Job
{
public Guid Id { get; set; }
public virtual ICollection<Photo> Photos { get; set; }
public string Title { get; set; }
public string Description { get; set; }
[Column(TypeName = "decimal(18,2)")] 
public decimal InitialPrice { get; set; }
public string UserId { get; set; }
public virtual ApplicationUser User { get; set; }
public string AssignedUserId { get; set; }
public virtual ApplicationUser AssignedUser { get; set; }
public DateTime CreatedAt { get; set; }
public DateTime DeliveryDate { get; set; }
public virtual ICollection<Bid> Bids { get; set; }
public virtual ICollection<Watch> Watching { get; set; }
public string Address{ get; set; }
public DeliveryTypes DeliveryType { get; set; }
public string PostCode { get; set; }
public int Views { get; set; }
public Category Category { get; set; }
public JobStatus JobStatus { get; set; }
}

我为我的表配置做了什么:

modelBuilder.Entity<ApplicationUser>()
.HasMany(c => c.CreatedJobs)
.WithOne(t => t.User)
.HasForeignKey(t => t.UserId)
.OnDelete(DeleteBehavior.NoAction);
modelBuilder.Entity<ApplicationUser>()
.HasMany(c => c.AssignedJobs)
.WithOne(t => t.AssignedUser)
.HasForeignKey(t => t.AssignedUserId)
.OnDelete(DeleteBehavior.NoAction);

我已经尝试了所有的DeleteBehavior值,似乎没有工作。

我仍然得到错误-

Microsoft.EntityFrameworkCore.Database.Command [20102]执行DbCommand失败(28ms) [Parameters=[], CommandType='Text', CommandTimeout='30']ALTER TABLE [Jobs] ADD CONSTRAINT [FK_Jobs_AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [AspNetUsers] ([Id]) ON DELETE级联;执行DbCommand失败(28ms) [Parameters=[],CommandType='Text', CommandTimeout='30'] ALTER TABLE [Jobs] ADD约束[FK_Jobs_AspNetUsers_UserId]外键([UserId])[AspNetUsers] ([Id]) ON DELETE CASCADE;Microsoft.Data.SqlClient.SqlException (0x80131904):引入表"Jobs"上的外键约束"FK_Jobs_AspNetUsers_UserId"可能导致循环或多个ca级联路径。指定ON DELETE NO没有动作,或者修改其他外键约束。无法创建约束或索引。见以前的错误。

我知道这个问题以前有人问过。我已经尝试了人们建议的修复程序,但它似乎对我的情况不起作用,因此我觉得有必要再问一次。

我认为这是迁移版本问题。你添加了一个迁移然后你添加了级联删除的东西,所以它仍然在第一个上中断,以实现

runUpdate-Database –TargetMigration: <name of last good migration>

然后

runremove-migration name_of_bad_migration

现在用新的更改

添加一个新的迁移

最新更新