可级联的一对一,必需:与 EF 的必需关系

本文关键字:EF 关系 必需 级联 一对一 | 更新日期: 2023-09-27 18:33:40

我有一个Video类和一个MediaContent类,它们由1-1链接,必需:必需关系:每个Video必须正好有1个关联的MediaContent。删除MediaContent对象必须导致删除关联的Video对象。

使用流畅的 API,可以按如下方式对关系进行建模:

modelBuilder.Entity<Video.Video>()
            .HasRequired(v => v.MediaContent).WithRequiredPrincipal(mc => mc.Video)
            .WillCascadeOnDelete(true);

在数据库中添加迁移以反映此更改时,以下是根据外键转录关系的方式:

AddForeignKey("MediaContents", "MediaContentId", "Videos", "VideoId", cascadeDelete: true);

更新数据库时,出现以下错误:

Cascading foreign key 'FK_MediaContents_Videos_MediaContentId' cannot be created where the referencing column 'MediaContents.MediaContentId' is an identity column.

删除 WillCascadeOnDelete(true) 属性会消除错误,但我不确定我是否理解原因。无论是否打开级联,都不应该出现错误吗?我理解这个问题的方式,错误来自这样一个事实,即VideoIdMediaContentId的生成是通过自动增量(或任何 id 生成策略(处理的,这可能与外键约束相矛盾。但我看不出这与删除级联有什么关系......

我错过了什么?更一般地说,您将如何与 EF 建立可级联的一对一必需:必需关系?

可级联的一对一,必需:与 EF 的必需关系

我避免使用modelBuilder cruft方法,通常使用简单的POCO和属性 - 您可以使用它们来实现您的目标,如下所示:

public class Video
{
    public int Id { get; set; }
    // Adding this doesn't change the db/schema, but it is enforced in code if
    // you try to add a Video without a MediaContent.
    [Required]
    public MediaContent MediaContent { get; set; }
}
public class MediaContent
{
    [ForeignKey("Video")]
    public int Id { get; set; }
    public Video Video { get; set;}
}