0

我们一直在构建一个包含 2 个部分的应用程序。 服务器端: WCF 服务,客户端:遵循 MVVM 模式的 WPF 应用程序

所以我们也使用自我跟踪实体来完成一些数据库工作,但我们遇到了困难。

这是一个示例代码:

public bool UpdateUser(User userToUpdate)
{
    using (DBContext _context = new DBContext())
    {
        try
        {
            userToUpdate.MarkAsModified();
            _context.Users.ApplyChanges(userToUpdate);
            _context.SaveChanges();
            return true;
        }
        catch (Exception ex)
        {
            // LOGS etc.
            return false;
        }
    }
}

所以当我从客户端调用这个函数时,它给了我们这个异常:

AcceptChanges 无法继续,因为对象的键值与 ObjectStateManager 中的另一个对象冲突。在调用 AcceptChanges 之前确保键值是唯一的。

“用户”实体有一个“多对 1..0 (UserType)”和五个“0..1 对多”关联。并且“UserType”具有“多对多(模块)”关联。

当我们向这个函数发送一个 User 实例时,UserType 包含在它的模块中。

如果你能指导我解决这个问题,那就太好了。

谢谢你。

4

1 回答 1

0

这就是我解决这个问题的方法,作为其他与我有同样问题的人的参考。

public bool UpdateUser(User userToUpdate)
{
    using (DBContext _context = new DBContext())
    {
        try
        {
            User outUser = usersModel.Users.Single(x => x.UserId == userToUpdate.UserId);
            outUser = userToUpdate;
            _context.ApplyCurrentValues("Users", outUser);
            _context.SaveChanges();
            return true;
        }
        catch (Exception ex)
        {
            // LOGS etc.
            return false;
        }
    }
}
于 2012-07-11T23:18:55.937 回答