[英]Entity Framework 5 Remove() not deleting from the database
我有一个User对象,当使用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
PS我删除了删除Roles和ActionHistories的代码,以测试问题是否出在相关实体的存在,但是它不能解决问题。
尝试添加:
_context.Entry(user).State = EntityState.Modified;
之前
_context.SaveChanges();
我使用与@ tomsullivan1989相同的答案,但使用EntityState.Deleted;。 它解决了我类似的问题。 出现错误消息的关系无法更改,因为一个或多个外键属性不可为空
我的建议是尝试使用配置文件工具(例如,从休眠犀牛的EFprof中免费试用)。
它会准确显示SQL EF生成的内容,因此您可以观察经过SaveChanges时发生的情况。
听起来确实很奇怪,也许正在抛出探查器可能揭示的一些静默SQL错误。
问题是在这种情况下必须在主上下文中删除“虚拟” _context
Database.Context.Remove<ActionHistories>(actionHistory);
然后在主上下文中保存更改
Database.Context.SaveChanges();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.