我们正在实体框架代码中首先
我们有一个课堂视频
class Video{
List<ImageInfo> Images{
get; set;
}
}
我们的图片信息类包含图片的路径和其他一些信息
class ImageInfo{
String path;
...
}
我们希望EF在删除视频时移除imageinfos
所以我们改变了模型构建器,如下所示:
modelBuilder
.Entity<Video>()
.HasMany(v => v.Images)
.WithRequired()
.WillCascadeOnDelete(true);
我们不想在imageinfo类中添加回视频链接。
是否可以在没有双向外键的情况下获得级联删除功能?
修改 的
保存视频时,imageInfo的video_id没有填入数据库。
我们如何解决这个问题?
我不知道它是否相关,但是当我们同时添加带有图像的新视频时,我们会收到此错误:
Unable to determine a valid ordering for dependent operations. Dependencies may exist due to foreign key constraints, model requirements, or store-generated values.
答案 0 :(得分:17)
WithRequired
引入了双向关系。所以你应该做到以下几点。
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; }
}