【发布时间】:2019-01-12 22:11:16
【问题描述】:
我有一个用户对象,当使用 DbContext 上的 Remove() 删除它时,它并没有从数据库中删除。奇怪的是,我检索用户的查询不再返回它。
此代码通过我的应用程序使用,并且适用于其他实体,没有任何问题。
我真的很感激关于这可能是什么的建议,因为我很难过!
#region Delete
public virtual void Delete(User entity)
{
var user = _context.Users.FirstOrDefault(u => u.UserId == entity.UserId);
if (user != null)
{
user.Roles.Clear();
var actionHistories = _context.ActionHistories.Where(u => u.User.UserId == user.UserId);
foreach (var actionHistory in actionHistories)
{
_context.ActionHistories.Remove(actionHistory);
}
_context.Users.Remove(user);
_context.SaveChanges();
}
}
#endregion
P.S 删除 Roles 和 ActionHistories 的代码是我添加的,用于测试问题是否与存在的相关实体有关,但并没有解决问题。
【问题讨论】:
-
您是否在 Delete 方法之外打开了事务?在您提交事务之前,不会从数据库中删除实体。使用相同上下文的其他查询不会看到已删除的
User,因为上下文中的实体标记为deleted -
“它没有从数据库中删除。奇怪的是,我检索用户的查询不再返回它。” - 然后分析它。您是否使用自定义
DbContext,例如设置Deleted标志而不是硬删除行?您如何查询用户,如果该行仍然存在,为什么不返回它?您的应用程序在检查数据库时是否使用与您相同的连接字符串? -
没有错误或异常。一切似乎都正常,直到我检查数据库并看到记录仍然存在
-
@CodeCaster 不,这是硬删除,因为它会从数据库中删除用户......好吧,这就是它应该做的。 GetQueries 类似 GetAll 从数据库中
-
但是“我的检索用户查询不再返回它虽然”并不意味着您可以重新启动计算机,用户仍在数据库中并且您运行对这个用户的查询没有结果,还是这样?
标签: c# .net entity-framework