实体框架6.1.1中的软删除属性和返回已删除行的查询
本文关键字:返回 查询 属性 删除行 框架 实体 删除 | 更新日期: 2023-09-27 18:20:48
我看过微软关于实体框架6.1.1的视频,也看过软删除的例子。我正在使用这种方法,但现在如何使用"代码优先"的方法来获取那些已删除的行?
(https://github.com/rowanmiller/Demo-TechEd2014)
我不知道这是否适合软删除的实现,但它可能是您可以使用的后备方案。我使用这种针对实体的软删除框架技术。这意味着,如果我需要访问软删除的记录,我必须编写自己的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);
}