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;
        }
    }
}

したがって、クライアントからこの関数を呼び出すと、次の例外が発生します。

オブジェクトのキー値がObjectStateManager内の別のオブジェクトと競合しているため、AcceptChangesを続行できません。AcceptChangesを呼び出す前に、キー値が一意であることを確認してください。

「User」エンティティには、1つの「many-to-1..0(UserType)」と5つの「0..1-to-many」の関連付けがあります。そして、その「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 に答える