可级联的一对一,必需:与 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)
属性会消除错误,但我不确定我是否理解原因。无论是否打开级联,都不应该出现错误吗?我理解这个问题的方式,错误来自这样一个事实,即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;}
}