实体框架核心:可能会导致循环或多个级联路径

时间:2020-03-02 05:12:11

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

我正在.net core 3.1中开发REST API

我有一个实体购物车项目:

        public class ShoppingCartItem
    {
        [Key]
        public int Id { get; set; }
        [Column("ticket_id")]
        public int? TicketId { get; set; }
        [Column("shopping_cart_id")]
        public int ShoppingCartId { get; set; }
        [Column("created_at")]
        public DateTime CreatedAt { get; set; }
        [Column("updated_at")]
        public DateTime UpdatedAt { get; set; }
        [ForeignKey(nameof(TicketId))]
        public Ticket Ticket { get; set; }
        [ForeignKey(nameof(ShoppingCartId))]
        public ShoppingCart ShoppingCart { get; set; }

        public ShoppingCartItem() { }

    }
}

我使用EF core作为ORM,因此创建了迁移,但是当我尝试更新数据库时,出现下一个错误

介绍FOREIGN KEY约束 表“ ShoppingCartItem”上的“ FK_ShoppingCartItem_Tikcet_ticket_id”可能 导致循环或多个级联路径。指定ON DELETE NO ACTION或 ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。可以 不创建约束或索引。查看先前的错误。

通过研究,我在DataContext中添加了以下几行:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{

    modelBuilder.Entity<ShoppingCartItem>().HasOne<Ticket>(t => t.Ticket).WithMany().HasForeignKey(s => s.TicketId).OnDelete(DeleteBehavior.Restrict);
}

但是错误仍然存​​在,我不确定这是否正确(我是本框架中的菜鸟)。你知道我在做什么错吗?

这是我的票证实体:

public class Ticket
{
    [Key]
    public int Id { get; set; }
    [Column("folio")]
    public string Folio { get; set; }
    [Column("status")]
    public string Status { get; set; }
    [Column("is_winner")]
    public bool IsWinner { get; set; }
    [Column("custom_name")]
    public string CustomName { get; set; }
    [Column("contestant_id")]
    public int ContestantId { get; set; }
    [Column("contest_id")]
    public int ContestId { get; set; }
    [ForeignKey(nameof(ContestantId))]
    public Contestant Contestant { get; set; }
    [ForeignKey(nameof(ContestId))]
    public Contest Contest { get; set; }
    [Column("created_at")]
    public DateTime CreatedAt { get; set; }
    [Column("updated_at")]
    public DateTime UpdatedAt { get; set; }
    public Ticket() { }
}

1 个答案:

答案 0 :(得分:0)

您的更改未应用于您的迁移。 您有个例外,但是您需要使用Remove-Migration删除上一次迁移,然后再次添加迁移以应用

中的更改
modelBuilder.Entity<ShoppingCartItem>().HasOne<Ticket>(t => t.Ticket).WithMany().HasForeignKey(s => s.TicketId).OnDelete(DeleteBehavior.Restrict);