【问题标题】:Delete Cascade on Code First - One-to–Zero-or-One删除代码优先级联 - 一对零或一
【发布时间】:2014-08-18 17:30:47
【问题描述】:

我有一个名为 Items 的实体,然后我有几个实体有一个外键 (NOT NULLABLE) 到这个表键 ItemId .

然后我有另一个名为 Soldiers 的表,它也依赖于 Items,但在本例中它是一个 (NULLABLE) 外键。

当我删除 Items 表中的项目时,我收到有关 Soldiers 表中存在的项目的错误消息。如果我没有 Soldiers 物品,我不会收到错误消息,并且所有其他表都已正确级联删除。

我想我必须在 Fluent API 上放一些东西才能在这张表上级联删除,但我不知道该怎么做。

谢谢

【问题讨论】:

    标签: c# .net entity-framework ef-fluent-api


    【解决方案1】:

    您可以使用WithCascadeOnDelete 进行配置。

    modelBuilder.Entity<Item>()
       .HasMany(i => i.Soldiers)
       .WithOptional(s => s.Item)
       .HasForeignKey(s => s.ItemId)
       .WillCascadeOnDelete(true);
    

    或者

    modelBuilder.Entity<Soldier>()
       .HasOptional(s => s.Item)
       .WithMany() // -> use i => i.Soldiers if any
       .HasForeignKey(i => i.ItemId)
       .WillCascadeOnDelete(true);
    

    【讨论】:

    • 感谢您的回答,但我在 i =&gt; i. 上看不到 Soldiers 属性。
    • @ChristopherBailey,您可以在Item 上添加public virtual ICollection&lt;Soldier&gt; Soldiers {get;set;},我还提供了另一个选项从Soldier 配置它
    • 它不起作用:(当我运行update-databaseIntroducing FOREIGN KEY constraint 'FK_dbo.Soldiers_dbo.Items_ItemId' on table 'Soldiers' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. Could not create constraint.时得到以下信息
    • @ChristopherBailey,你能发布你的课程和配置吗?
    • 我发现我有另一个级联路径可能会删除相同的表数据。现在好了。谢谢你的帮助。 +1
    猜你喜欢
    • 1970-01-01
    • 2013-07-03
    • 2014-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    相关资源
    最近更新 更多