Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 可级联一对一,必需:必需与EF的关系_C#_Entity Framework_Foreign Keys_One To One - Fatal编程技术网

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

C# 可级联一对一,必需:必需与EF的关系,c#,entity-framework,foreign-keys,one-to-one,C#,Entity Framework,Foreign Keys,One To One,我有一个视频类和一个MediaContent类,它们由一个1-1,required:required关系链接起来:每个视频必须正好有一个关联的MediaContent。删除MediaContent对象必须导致删除关联的视频对象 使用fluent API,可以按如下方式对关系进行建模: modelBuilder.Entity<Video.Video>() .HasRequired(v => v.MediaContent).WithRequiredPrinc

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

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

modelBuilder.Entity<Video.Video>()
            .HasRequired(v => v.MediaContent).WithRequiredPrincipal(mc => mc.Video)
            .WillCascadeOnDelete(true);
更新数据库时,出现以下错误:

Cascading foreign key 'FK_MediaContents_Videos_MediaContentId' cannot be created where the referencing column 'MediaContents.MediaContentId' is an identity column.
删除WillCascadeOnDeletetrue属性将删除错误,但我不确定我是否理解原因。不管是否开启级联,错误不应该出现吗?我对问题的理解是,错误来自这样一个事实,即VideoId和MediaContentId的生成是通过自动增量或任何id生成策略来处理的,这可能与外键约束相矛盾。但我看不出这和删除级联有什么关系


我错过了什么?更一般地说,您将如何建模可级联的一对一必需:必需与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;}
}
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;}
}