EF Code首先级联删除外键一对多
Posted
技术标签:
【中文标题】EF Code首先级联删除外键一对多【英文标题】:EF Code first cascade delete on foreign key one-to-many 【发布时间】:2013-02-15 15:39:04 【问题描述】:我们首先在实体框架代码中工作
我们有一个课堂视频
class Video
List<ImageInfo> Images
get; set;
我们的图像信息类包含图像的路径和一些其他信息
class ImageInfo
String path;
...
我们希望 EF 在删除视频时删除图像信息
所以我们改变了模型构建器如下:
modelBuilder
.Entity<Video>()
.HasMany(v => v.Images)
.WithRequired()
.WillCascadeOnDelete(true);
我们不想在我们的 imageinfo 类中添加指向视频的链接。
是否可以在没有 2 路外键的情况下获得级联删除功能?
编辑
保存视频时,imageInfo的video_id没有填入数据库。
http://pbrd.co/14X82vb
我们如何解决这个问题?
我不知道它是否相关,但是当我们同时添加一个带有图像的新视频时,我们会得到这个错误:
Unable to determine a valid ordering for dependent operations. Dependencies may exist due to foreign key constraints, model requirements, or store-generated values.
【问题讨论】:
【参考方案1】:WithRequired
引入了 2 路关系。因此,您应该执行以下操作。
modelBuilder
.Entity<Video>()
.HasMany(v => v.Imgages)
.WithOptional()
.WillCascadeOnDelete(true);
...并假设您希望这种关系反过来...
public class Video
public class ImageInfo
public virtual Video get; set;
modelBuilder
.Entity<ImageInfo>()
.HasRequired(v => v.Video)
.WithMany()
.WillCascadeOnDelete(true);
PS:我认为List<ImageInfo>
应该是virtual
,所以这是我的定义...
public class Video
public Video() this.Images = new List<ImageInfo>();
public virtual ICollection<ImageInfo> Images get; set;
【讨论】:
像魅力一样工作。我们还有第二个问题。我们为 Images 属性分配了一个新列表,导致数据库同步失败。因此,我们学会了永远不要为属性分配新列表。 (类似于 observableCollection 和数据绑定) 届时将不胜感激接受答案:-)。此外,它还有助于提高您自己的声誉,从而获得更多/更好的答案。 我们仍然有删除视频时级联图像的问题:请参阅原始问题(已编辑部分)以上是关于EF Code首先级联删除外键一对多的主要内容,如果未能解决你的问题,请参考以下文章