我正在.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() { }
}
答案 0 :(得分:0)
您的更改未应用于您的迁移。 您有个例外,但是您需要使用Remove-Migration删除上一次迁移,然后再次添加迁移以应用
中的更改modelBuilder.Entity<ShoppingCartItem>().HasOne<Ticket>(t => t.Ticket).WithMany().HasForeignKey(s => s.TicketId).OnDelete(DeleteBehavior.Restrict);