9

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

我们有一个课堂视频

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.
4

1 回答 1

18

介绍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; }
}
于 2013-02-15T16:22:59.113 回答