【问题标题】:Introducing FOREIGN KEY constraint 'FK_Jobs_AspNetUsers_UserId' on table 'Jobs' may cause cycles or multiple cascade paths在表 'Jobs' 上引入 FOREIGN KEY 约束 'FK_Jobs_AspNetUsers_UserId' 可能会导致循环或多个级联路径
【发布时间】:2021-05-30 03:12:21
【问题描述】:

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

我的AppUser 实体:

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] 添加约束 [FK_Jobs_AspNetUsers_UserId] 外键 ([UserId]) 引用 [AspNetUsers] ([Id]) 删除 级联;执行 DbCommand 失败 (28ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] ALTER TABLE [作业] 添加 约束 [FK_Jobs_AspNetUsers_UserId] 外键 ([UserId]) 参考 [AspNetUsers] ([Id]) 删除级联; Microsoft.Data.SqlClient.SqlException (0x80131904):介绍 表 'Jobs' 上的 FOREIGN KEY 约束 'FK_Jobs_AspNetUsers_UserId' 可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。无法创建约束或索引。见上 错误。

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

【问题讨论】:

  • 您能分享一下您对这些领域模型的迁移历史吗?我认为它的迁移版本问题。你添加了一个迁移然后你添加了级联删除的东西,所以它仍然在第一个中断
  • 哦..好的,我应该删除之前的迁移直到我添加级联?
  • 首先运行 Update-Database –TargetMigration: 然后 remove-migration name_of_bad_migration 现在添加一个新的迁移,如果它可以帮助我将其标记为答案

标签: c# asp.net-core .net-core entity-framework-core


【解决方案1】:

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

运行Update-Database –TargetMigration: &lt;name of last good migration&gt;

然后

运行remove-migration name_of_bad_migration

现在添加带有新更改的新迁移

【讨论】:

    猜你喜欢
    • 2011-05-08
    • 2013-10-22
    • 2020-12-20
    • 2019-01-18
    • 1970-01-01
    • 2014-06-20
    相关资源
    最近更新 更多