实体框架迁移忽略WillCascadeOnDelete

Pat*_*ckB 5 c# entity-framework cascade

以这个问题为例. 实体框架(EF)代码优先级联删除一对一或零关系

我有一个正常的背景等.

如果我改变任何东西,我可以生成一个新的迁移Add-Migration test.

但是,如果我将WillCascadeOnDelete()从true更改为false或添加一些true,它将被实体框架忽略.

我首先使用Code从数据库生成模型.在生成的模型中,一切都已开启WillCascadeOnDelete(false).所以现在我将它从false变为true,但被实体框架忽略了.

我试过这个:http://msdn.microsoft.com/en-us/data/jj591620.aspx#CascadeDelete.

添加这些行后...如果我添加没有任何变化Add-Migration newTest.

modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>()
modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>()
Run Code Online (Sandbox Code Playgroud)

这也被忽略了Add-Migration thirdTest.

modelBuilder.Conventions.Add<OneToManyCascadeDeleteConvention>()
modelBuilder.Conventions.Add<ManyToManyCascadeDeleteConvention>()
Run Code Online (Sandbox Code Playgroud)

我可以用WillCascadeOnDelete改变一切......它被忽略了!

如果我更改了其他所有内容,它会起作用,并会附加到新的迁移中...

此构造的主要类如下.

[Table("SomeToThing")]
public class SomeToThing : Base
{
    [Column("Some")]
    public Guid SomeId { get; set; }
    [ForeignKey("SomeId")]
    public virtual Some Some { get; set; }

    [Column("Thing")]
    public Guid ThingId { get; set; }
    [ForeignKey("ThingId")]
    public virtual Thing Thing { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我有这个表:

  • 一些
  • SomeToThing
  • 事情

SomeToThing有更多的变量,因为我不能映射Some直接Thing.

Ric*_*per 1

我知道这个线程很旧,但我也遇到了同样的问题。

我的解决方案是删除迁移源文件并从头开始重新搭建它。

在我第一次尝试时,我忘记设置.WillCascadeOnDelete(false),出于充分的原因,SQL Server 由于循环而拒绝了迁移。然后,当我在删除方法中的级联后尝试使用相同的名称重新构建迁移时OnModelCreating,EF 只是不会接受这些特定的更改。

然后我删除了迁移源文件并运行了Add-Migration SameMigrationName。级联删除已被删除,并且似乎有效,因为 MSSQL 接受了迁移脚本。顺便说一句,我正在使用 EF 6.1.3。