EF Code first cascade delete on foreign key one-to-many

有些话、适合烂在心里 提交于 2020-01-02 01:43:05

问题


We are working in Entity framework Code first

We have a class video

class Video{
   List<ImageInfo> Images{
      get; set;
   }
}

our image infoclass contains a path to the image and some other info

class ImageInfo{
    String path;
    ...
}

we would like to have EF remove the imageinfos when removing the video

so we changed the modelbuilder like follows:

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

we don't want to add a link back to video in our imageinfo class.

is it possible to get cascade delete functionality without a 2 way foreign key?

EDIT

the video_id of the imageInfo doesn't get filled in in the database when saving a video.

http://pbrd.co/14X82vb

how can we fix this?

I don't know if its related, but when we add a new video with images at the same time, we get this error:

Unable to determine a valid ordering for dependent operations. Dependencies may exist due to foreign key constraints, model requirements, or store-generated values.

回答1:


The WithRequired introduces the 2 way relationship. So you should do the following.

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

... and assuming you want the relationship the other way around ...

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

modelBuilder
    .Entity<ImageInfo>()
    .HasRequired(v => v.Video)
    .WithMany()
    .WillCascadeOnDelete(true);

PS: I think the List<ImageInfo> should be virtual, so here is how I'd define it ...

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


来源:https://stackoverflow.com/questions/14898128/ef-code-first-cascade-delete-on-foreign-key-one-to-many

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!