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

时间:2016-08-07 22:44:33

标签: c# entity-framework

问题陈述:

我已经将模型设置为一对多,如下所示:

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);

删除与其连接的所有文章,但我需要删除位于文章内部路径的图像。

我可以轻松地手动迭代文章,但我想知道是否可以覆盖或扩展删除方法,以便我不必多次执行。

1 个答案:

答案 0 :(得分:1)

通常,您需要创建分层体系结构,并在服务或存储库层处理这些问题。在不创建这些层的情况下执行此操作的最佳方法是覆盖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();
}