EF Code首次级联删除外键一对多

Ale*_*man 9 c# entity-framework sql-server-ce

我们首先在Entity框架代码中工作

我们有一个课堂视频

class Video{
   List<ImageInfo> Images{
      get; set;
   }
}
Run Code Online (Sandbox Code Playgroud)

我们的图像infoclass包含图像的路径和一些其他信息

class ImageInfo{
    String path;
    ...
}
Run Code Online (Sandbox Code Playgroud)

我们希望在删除视频时让EF删除imageinfos

所以我们改变了模型构建器,如下所示:

modelBuilder
    .Entity<Video>()
    .HasMany(v => v.Images)
    .WithRequired()
    .WillCascadeOnDelete(true);
Run Code Online (Sandbox Code Playgroud)

我们不想在imageinfo类中添加回到视频的链接.

是否有可能在没有双向外键的情况下获得级联删除功能?

编辑

保存视频时,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.
Run Code Online (Sandbox Code Playgroud)

Axe*_*ger 18

WithRequired介绍了2单向关系.所以你应该做以下事情.

modelBuilder
    .Entity<Video>()
    .HasMany(v => v.Imgages)
    .WithOptional()
    .WillCascadeOnDelete(true);
Run Code Online (Sandbox Code Playgroud)

......并假设你想要这种关系反过来......

public class Video { }
public class ImageInfo {
    public virtual Video { get; set; }
}

modelBuilder
    .Entity<ImageInfo>()
    .HasRequired(v => v.Video)
    .WithMany()
    .WillCascadeOnDelete(true);
Run Code Online (Sandbox Code Playgroud)

PS:我认为List<ImageInfo>应该是virtual,所以这就是我如何定义它...

public class Video {
    public Video() { this.Images = new List<ImageInfo>(); }
    public virtual ICollection<ImageInfo> Images { get; set; }
}
Run Code Online (Sandbox Code Playgroud)