实体框架5删除()不从数据库中删除

时间:2013-08-21 12:46:05

标签: c# .net entity-framework

我有一个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

P.S我添加了删除角色和ActionHistories的代码,以测试问题是否存在相关实体,但是它没有解决问题。

4 个答案:

答案 0 :(得分:5)

尝试添加:

_context.Entry(user).State = EntityState.Modified;

_context.SaveChanges();

答案 1 :(得分:2)

我使用与@ tomsullivan1989相同的答案但使用了EntityState.Deleted; 它解决了我的类似问题。哪个有错误信息 由于一个或多个外键属性是不可为空的

,因此无法更改关系

答案 2 :(得分:1)

我的建议是尝试使用分析工具(例如来自冬眠的犀牛的EFprof,它有免费试用版)。

它将准确显示SQL EF生成的内容,因此您可以查看在跳过SaveChanges时发生的情况。

听起来确实很奇怪,也许有一些无意义的SQL错误会被探测器显示出来。

答案 3 :(得分:0)

问题是在这种情况下必须在主上下文中删除的“虚拟” _context 像这样

Database.Context.Remove<ActionHistories>(actionHistory); 

然后保存主要上下文中的更改

Database.Context.SaveChanges();