繁体   English   中英

可与EF一对一级联

[英]Cascadable one-to-one, required:required relationship with EF

我有一个通过1-1链接的Video类和MediaContent类,required:required:required关系:每个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建立可级联的一对一的required:required:required关系?

我避免使用modelBuilder替代方法,通常使用简单的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;}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM