0

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

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

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

4

1 回答 1

0

我避免使用 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;}
}
于 2013-03-31T00:53:59.323 回答