Reputation: 1137
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.
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.
Upvotes: 9
Views: 7130
Reputation: 16926
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; }
}
Upvotes: 18