实体框架 - 级联删除

时间:2014-12-02 16:53:58

标签: c# linq entity-framework entity cascade

我们假设我有两节课:

public class Photo 
{
     public int Id {get;set;}
     public string Name {get;set;}
     public int AlbumId {get;set;

     publiv virtual Album Album {get;set;}
}

public class Album
{
     public int Id {get;set;}
     public decimal Price {get;set;}

     public ICollection<Photo> Photos {get;set;}
}

现在我想删除所有价格的相册,例如2.我试过:

Context.RemoveRange(Context.Albums.Where(x = > x.Price == 2))

没关系,但在删除相册之前,我需要删除我要删除的AlbumId的每张照片。

2 个答案:

答案 0 :(得分:1)

在Context中使用Fluent API来应用Cascade删除

modelBuilder.Entity<Photo>()
                        .HasRequired(c => c.Album)
                        .WithMany(a => a.Photoes)
                        .WillCascadeOnDelete(true);

答案 1 :(得分:1)

EF不执行级联删除。它依赖于数据库定义是正确的,然后假定数据库将执行级联删除(如果指定)。有关详细信息,请参阅this article。你将不得不像其他用户指出的那样使用Fluent,EF不会自己这样做。