gpt4 book ai didi

c# - Entity Framework 迁移忽略 WillCascadeOnDelete

转载 作者:太空狗 更新时间:2023-10-29 23:45:13 28 4
gpt4 key购买 nike

例如看这个问题。 Entity Framework (EF) Code First Cascade Delete for One-to-Zero-or-One relationship

我有一个正常的上下文等

如果我更改任何内容,我可以根据 Add-Migration test 生成新的迁移。

但是如果我将 WillCascadeOnDelete() 从 true 更改为 false 或添加一些 true Entity Framework 将忽略它。

我使用 Code first 和从数据库生成的模型。在生成的模型中,一切都在 WillCascadeOnDelete(false) 上。所以现在我将其从 false 更改为 true 但它被 Entity Framework 忽略了。

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

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

modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>()
modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>()

这也被 Add-Migration thirdTest 忽略。

modelBuilder.Conventions.Add<OneToManyCascadeDeleteConvention>()
modelBuilder.Conventions.Add<ManyToManyCascadeDeleteConvention>()

我可以用 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; }
}

我有这个表:

  • 一些
  • 一些东西
  • 事情

SomeToThing 有额外的变量,因此我无法将 Some 直接映射到 Thing

最佳答案

我知道这个帖子很旧,但我遇到了同样的问题。

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

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

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

关于c# - Entity Framework 迁移忽略 WillCascadeOnDelete,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27487523/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com