网络核心实体框架中的迁移冲突

时间:2021-02-08 20:30:09

标签: sql-server entity-framework alter-table

我的 SQL Server 数据库中有两个表 - 一个用于类别:

public class Category
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int? ParentId { get; set; }
    [ForeignKey("ParentId")]
    public Category Parent { get; set; }
}

然后是 Assistant 表:

public class Assistant
{
    public int Id { get; set; }
    public int UserId { get; set; }
    public DateTime CreatedAtUtc { get; set; }
    public Status Status { get; set; }
    public int? CategoryId { get; set; }
 
    [ForeignKey("CategoryId")]
    public Category Category { get; set; }
}

当我尝试进行迁移时,出现此错误:

<块引用>

ALTER TABLE 语句与 FOREIGN KEY 约束“FK_Assistants_Categories_CategoryId”冲突。冲突发生在数据库“Pirma isMsSql”,表“dbo.Categories”,列“Id”。

我不知道为什么。

谢谢

1 个答案:

答案 0 :(得分:0)

修复您的课程:


 public partial class Assistent
    {
       [Key]
       public int Id { get; set; }

       public int UserId { get; set; }
       public User User{ get; set; }

       public DateTime CreatedAtUtc { get; set; }

       public int StatusId { get; set; }
       public Status Status { get; set; }

        public int? CategoryId { get; set; }

        [ForeignKey(nameof(CategoryId))]
        [InverseProperty("Assistents")]
        public virtual Category Category { get; set; }
    }

     public partial class Category
    {
        [Key]
        public int Id { get; set; }
        
        public string Name { get; set; }
        public int? ParentId { get; set; }

         [ForeignKey(nameof(ParentId))]
        [InverseProperty(nameof(Category.InverseParent))]
        public virtual Category Parent { get; set; }

        [InverseProperty(nameof(Assistent.Category))]
        public virtual ICollection<Assistent> Assistents { get; set; }

        [InverseProperty(nameof(Category.Parent))]
        public virtual ICollection<Category> InverseParent { get; set; }
    }

这是数据库上下文:


 public partial class AssistentsContext : DbContext
    {
        public AssistentsContext()
        {
        }

        public AssistentsContext(DbContextOptions<AssistentsContext> options)
            : base(options)
        {
        }

        public virtual DbSet<Assistent> Assistents { get; set; }
        public virtual DbSet<Category> Categories { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            

            modelBuilder.Entity<Assistent>(entity =>
            {
               
                entity.HasOne(d => d.Category)
                    .WithMany(p => p.Assistents)
                    .HasForeignKey(d => d.CategoryId);
                   
            });

            modelBuilder.Entity<Category>(entity =>
            {
               
                     entity.HasOne(d => d.Parent)
                    .WithMany(p => p.InverseParent)
                    .HasForeignKey(d => d.ParentId);
                   
            });

            OnModelCreatingPartial(modelBuilder);
        }

        partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
    }