C# EF代码首先对外键进行级联删除一对多

C# EF代码首先对外键进行级联删除一对多,c#,entity-framework,sql-server-ce,C#,Entity Framework,Sql Server Ce,我们首先在实体框架代码中工作 我们有一个课堂录像 class Video{ List<ImageInfo> Images{ get; set; } } 我们希望EF在删除视频时删除imageinfos 因此,我们对modelbuilder进行了如下更改: modelBuilder .Entity<Video>() .HasMany(v => v.Images) .WithRequired() .WillCas

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

我们有一个课堂录像

class Video{
   List<ImageInfo> Images{
      get; set;
   }
}
我们希望EF在删除视频时删除imageinfos

因此,我们对modelbuilder进行了如下更改:

modelBuilder
    .Entity<Video>()
    .HasMany(v => v.Images)
    .WithRequired()
    .WillCascadeOnDelete(true);

WithRequired
引入了双向关系。因此,您应该执行以下操作

modelBuilder
    .Entity<Video>()
    .HasMany(v => v.Imgages)
    .WithOptional()
    .WillCascadeOnDelete(true);

工作起来很有魅力。我们还有第二个问题。我们为Images属性分配了一个新列表,导致数据库同步失败。因此,我们学会了永远不要将新列表分配给属性。(与observableCollection和databinding类似)接受答案将不胜感激:-)。此外,这也有助于您自己的声誉,从而获得更多/更好的答案。我们仍然存在删除视频时级联图像的问题:请参阅原始问题(编辑部分)
Unable to determine a valid ordering for dependent operations. Dependencies may exist due to foreign key constraints, model requirements, or store-generated values.
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);
public class Video {
    public Video() { this.Images = new List<ImageInfo>(); }
    public virtual ICollection<ImageInfo> Images { get; set; }
}