我从PMC收到此错误消息:
在表'OrderDetails'上引入FOREIGN KEY约束'FK_dbo.OrderDetails_dbo.Order_OrderId'可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。 无法创建约束。查看以前的错误。
我在SO上找到了一个帖子,其中有一个已接受的答案,但它对我不起作用。
这些是我的表格:
[Table("Order")]
public class Order
{
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity), Key]
public int Id { get; set; }
[Required]
public string UserId { get; set; }
public virtual List<OrderDetails> OrderDetails { get; set; }
[ForeignKey("UserId")]
public virtual ApplicationUser User { get; set; }
}
[Table("OrderDetails")]
public class OrderDetails
{
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity), Key]
public int Id { get; set; }
[Required]
public int OrderId { get; set; }
[ForeignKey("OrderId")]
public virtual Order Order { get; set; }
}
FluentApi
:
modelBuilder.Entity<OrderDetails>()
.HasRequired(u => u.Order)
.WithMany()
.WillCascadeOnDelete(false);
如果OrderDetails
被删除,我不希望删除Order
。但另一种方式对我来说很好。
那么我尝试过的是什么问题?
答案 0 :(得分:2)
我发现了问题!
我一直在运行执行最后生成的迁移文件的命令Update-Database
。
我删除了我创建的上一个迁移文件,并再次运行了Add-Migration
命令,该命令生成了一个新文件,其中包含我最近的modelBuilder.Entity<OrderDetails>()...
(FluentApi
}代码更改。
然后运行命令Update-Database
并且它有效!
所以我不知道的是每次你在
中改变一些东西 protected override void OnModelCreating(DbModelBuilder modelBuilder) { ... }
,
您需要再次执行Add-Migration filename
。
答案 1 :(得分:1)
在这里使用不带参数的.WithMany()
是错误的。因为Order.OrderDetails
表示关系的反向导航属性,所以必须使用...
.WithMany(o => o.OrderDetails)