实体框架6.1.1中的软删除属性和返回已删除行的查询

本文关键字:返回 查询 属性 删除行 框架 实体 删除 | 更新日期: 2023-09-27 18:20:48

我看过微软关于实体框架6.1.1的视频,也看过软删除的例子。我正在使用这种方法,但现在如何使用"代码优先"的方法来获取那些已删除的行?

(https://github.com/rowanmiller/Demo-TechEd2014)

实体框架6.1.1中的软删除属性和返回已删除行的查询

我不知道这是否适合软删除的实现,但它可能是您可以使用的后备方案。我使用这种针对实体的软删除框架技术。这意味着,如果我需要访问软删除的记录,我必须编写自己的sql查询。我是这样做的:

DbSet有一个SqlQuery方法,该方法创建一个将返回实体的原始SQL查询。

我在我的通用存储库中有这样的方法:

   protected IEnumerable<T> SqlQuery(string sql, params object[] parameters)
    {
        if (String.IsNullOrEmpty(sql))
            throw new ArgumentException("sql is null or empty.", "sql");
        DbSqlQuery<T> q = Context.Set<T>().SqlQuery(sql, parameters);
        return q;
    }

我可以从继承我的通用存储库的存储库中调用它,如下所示:

    public override void Delete(int id)
    {
        var files = SqlQuery(@"SELECT * FROM dbo.PropertyFiles WHERE 
            IsDeleted = 1 AND DATEADD(MINUTE, 30, DeletedAt) < GETUTCDATE()");
        foreach (PropertyFile file in files)
        {
            try
            {
                File.Delete(file.FilePath);
            }
            catch (Exception ex)
            {
                //TODO log the errors encountered when attempting to delete
            }
        }
        base.Delete(id);
    }