[英]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)
属性可消除该错误,但是我不确定我为什么会这样。 无论是否打开级联,错误都不会出现吗? 以我理解问题的方式,该错误来自以下事实: VideoId
和MediaContentId
的生成是通过自动增量(或通过任何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.