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

时间:2014-09-05 06:58:01

标签: c# entity-framework

我已经看过有关实体框架6.1.1的微软视频,并看过软删除示例。我正在使用这种方法,但我现在如何使用Code first aproach获取那些已删除的行?

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

1 个答案:

答案 0 :(得分:0)

我不知道这是否适合您的软删除实施,但它可能是您可以使用的后备。我使用这种soft delete for entity framework技术。这意味着如果我需要访问软删除的记录,我必须编写自己的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);
    }