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; }
}