c# - 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 核心作为 ORM,所以我创建了我的迁移,但是当我尝试更新数据库时,出现下一个错误
在表“ShoppingCartItem”上引入 FOREIGN KEY 约束“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() { }
}
解决方案
您的更改未应用于您的迁移。您得到了例外点,但是您需要使用 Remove-Migration 删除上次迁移,然后再次添加您的迁移以应用您的更改
modelBuilder.Entity<ShoppingCartItem>().HasOne<Ticket>(t => t.Ticket).WithMany().HasForeignKey(s => s.TicketId).OnDelete(DeleteBehavior.Restrict);
推荐阅读
- c# - .net core 2.0 web api httppost 带有 xml 输入作为 null
- r - 在R中将街道号码与街道名称分开
- node.js - 使用 Sequelize 多次加入同一个表
- angularjs - 剑道时间选择器在输入“10:0”之类的数据时未设置 ng-model
- javascript - 从服务器接收 json 数据以显示 chart.js 图形不起作用
- c++ - 检查输入的语句是否为字符串?
- python - 使用列表中的数据在 seaborn 中创建小提琴图
- mysql - 将 Sqlserver 转换为 Mysql 服务器
- sql - SQL SELECT 用于一对多特征关系以选择具有某些特征的键
- javascript - 反应路由器“内容安全策略指令”错误