我已经看过有关实体框架6.1.1的微软视频,并看过软删除示例。我正在使用这种方法,但我现在如何使用Code first aproach获取那些已删除的行?
答案 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);
}