这是我的情况:
public abstract class Article
{
[key]
public Guid Guid { get; set;}
public string Name { get; set;}
.
.
.
}
public class Download : Article
{
...
}
public abstract class Category : Article
{
...
}
public class DownloadCategory : Category
{
....
}
然后,我应该在下载和“DownloadCategory”之间建立多对多关系,如下所示:
public class DownloadInCategory
{
[Key, Column(Order = 1), Required]
[ForeignKey("Download")]
Public Guid DownloadGuid { get; set; }
Public Download Download { get; set; }
[Key, Column(Order = 2), Required]
[ForeignKey("Category")]
Public Guid CategoryGuid { get; set; }
Public DownloadCategory Category { get; set; }
}
当我调用
Add-Migration
命令时,为DownloadInCategory
实体创建的迁移如下:CreateTable("dbo.DownloadInCategories",
c => new
{
CategoryGuid = c.Guid(nullable: false),
DownloadGuid = c.Guid(nullable: false),
})
.PrimaryKey(t => new { t.CategoryGuid, t.DownloadGuid })
.ForeignKey("dbo.DownloadCategories", t => t.CategoryGuid)
.ForeignKey("dbo.Downloads", t => t.DownloadGuid, cascadeDelete: true)
.Index(t => t.CategoryGuid)
.Index(t => t.DownloadGuid);
这是我的问题:
你可能注意到其中一个外键没有添加 cascadeDelete: true
。为什么啊!!!!???
我应该提到我没有更改任何 modelbuilder
的约定。
因此,此模式应在迁移中添加Casscade on delete。 我的属性为[Required]
。
我做错了什么?
谢谢大家...
更新:
请注意Article
和Category
类是abstract
。
我更改了上面的类
更新2: 此模式不存在逻辑问题。 如果我手动编辑迁移,它将正常更新数据库。
更新3:
我的 EF 继承方法论是 TPC
更新4:
经过一些调查和测试,似乎问题是从Category
继承而来的。
当DownloadCategory
从Category
继承时,级联未部署。 但当我直接从 Article 继承 DownloadCategory
时,级联被部署。
可是为什么呢?
__MigrationsHistory
表中提取)甚至似乎包含适当的OnDelete Action="Cascade"
,但不知何故它没有传递给CreateForeignKeyOperation
...而且确实似乎仅限于具有相对复杂继承链的类。 - lc.