删除实体时调用函数-删除文件

本文关键字:删除 文件 函数 调用 实体 | 更新日期: 2023-09-27 18:01:09

问题说明:

我已经设置了如下一对多的模型:

public class ArticleHeading
{
    [Key]
    public int ArticleHeadingID
    public string ArticleHeadingName {get;set;}
    public virtual ICollection<Article> Articles {get;set;}
}
public class Article
{
    [Key]
    public int ArticleID {get;set;}
    [Required]
    public string ArticleContent {get;set;}
    [Required]
    [ForeignKey("ArticleHeadingID")]
    public virtual ArticleHeading Heading {get;set;}
    
    [Required]
    public int ArticleHeadingID {get;set;}
    [Required]
    public string ArticleImagePath {get;set;}
}

注意:一些数据成员被省略,因为它不相关

我想要实现的是,当我删除

ArticleHeading
时,我也想删除具有以下路径的图像:
ArticleImagePath

所以下面的代码:

_context.ArticleHeadings.Remove(someArticleHeading);

成功删除所有连接到它的文章,但我需要删除位于文章内部路径的图像。

我可以很容易地手动迭代文章,但我想知道是否有可能重写或扩展remove方法,这样我就不必多次这样做了。

删除实体时调用函数-删除文件

通常您希望创建一个分层体系结构,并在服务或存储库层处理这些问题。在不制作这些层的情况下,最好的方法是覆盖Context类中的SaveChanges方法。下面这样的事情应该会让你朝着正确的方向前进。

public override int SaveChanges()
{
    var deletedArticleHeadings = ChangeTracker.Entries<ArticleHeading>().Where(x => x.State == EntityState.Deleted).ToList();
    foreach (var headingEntry in deletedArticleHeadings)
    {
        var heading = headingEntry.Entity;
        // Delete things.
    }
    return base.SaveChanges();
}