【问题标题】:Entity Framework Core: may cause cycles or multiple cascade pathsEntity Framework Core:可能导致循环或多个级联路径
【发布时间】:2020-06-14 09:29:54
【问题描述】:

我正在.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 核心作为 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() { }
}

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-04-26
      • 2019-09-22
      • 1970-01-01
      • 2020-02-04
      • 2021-08-24
      • 2017-06-04
      • 2021-08-12
      • 2021-10-06
      • 2016-03-26
      相关资源
      最近更新 更多