11

我有一个用户对象,当使用 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的代码来测试问题是否与存在的相关实体有关,但它并没有解决问题。

4

3 回答 3

6

尝试添加:

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

_context.SaveChanges();
于 2013-08-21T15:19:12.750 回答
4

我使用了与@tomsullivan1989 相同的答案,但使用的是EntityState.Deleted;它解决了我的类似问题。哪个有错误消息无法更改关系,因为一个或多个外键属性不可为空

于 2014-08-21T18:01:08.490 回答
1

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

它将准确地向您展示 SQL EF 生成的内容,因此您可以看到当您越过 SaveChanges 时会发生什么。

听起来确实很奇怪,也许有一些静默的 SQL 错误被抛出,分析器可能会揭示这些错误。

于 2013-08-21T14:59:58.363 回答