【发布时间】:2014-12-15 15:32:44
【问题描述】:
以这个问题为例。 Entity Framework (EF) Code First Cascade Delete for One-to-Zero-or-One relationship
我有一个正常的上下文等。
如果我更改任何内容,我可以根据 Add-Migration test 生成新的迁移。
但是,如果我将 WillCascadeOnDelete() 从 true 更改为 false 或添加一些 true ,实体框架会忽略它。
我首先将代码与从数据库生成的模型一起使用。
在生成的模型中,一切都在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>()
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
- 东西
SomeToThing 有额外的变量,因为我不能将Some 直接映射到Thing。
【问题讨论】:
-
您可以随时编写自己的迁移
-
是的,这就是我在 Add-Migration 不起作用后尝试的...我认为这是我的失败,而不是 Add-Migration Tool 的失败...因为我问过社区 :)跨度>
-
迁移并不是万能的。如果我没记错的话,它也不会添加唯一索引。
-
你有一个示例迁移函数/字符串,它将外键更改为 CascadeDelete: true?提前致谢!
-
我也遇到了这个问题,似乎当您有某种继承并尝试配置派生实体时,实体框架会无缘无故地忽略 WillCascadeOnDelete。我的场景是:我不想级联删除除一个之外的每个实体。
标签: c# entity-framework cascade