0

現在、正常に機能しているAJAXを介してデータベーステーブルに新しい行を追加しようとしています。しかし、別のテーブルを更新しようとすると、エラーが発生します。これが私のコードと私が遭遇しているエラーです。

エラー

オブジェクトはすでにオブジェクトコンテキストにあるため、アタッチできません。オブジェクトは、変更されていない状態の場合にのみ再アタッチできます。

41行目:_db.ChampionCounters.Attach(champion);

コード

[HttpPost]
    public ActionResult VoteYes(int id)
    {
        string results;

        if (Request.IsAuthenticated)
        {
            var checkFirst =
                from c in _db.UserCounterLinks
                where c.counterId == id && c.userName == User.Identity.Name
                select c;

            if (checkFirst.Any())
            {
                results = "You have already voted on this counter.";
                return Json(results);
            }

            var userVoteLink = new UserCounterLink { counterId = id, userName = User.Identity.Name, userAgree = true };

            _db.UserCounterLinks.AddObject(userVoteLink);


            var champion = _db.ChampionCounters.SingleOrDefault(c => c.id == id);

            if (champion != null)
            {
                champion.positiveVotes++;
                _db.ChampionCounters.Attach(champion);
            }
            _db.SaveChanges();
            results = "Voted";
        } else
        {
            results = "You must be logged in to vote.";
        }

        return Json(results);
    }

概要

上記のコードは、Ajaxポストを処理するコントローラーからのものです。私が言ったように、userVoteLinkテーブルはうまくレコードを作成します。しかし、他のテーブルChampionCountersを更新しようとすると、エラーがスローされます。

前もって感謝します!

4

1 に答える 1

3

コンテキストが既にそのインスタンスを追跡しているため、インスタンスをアタッチする必要はありません。ラインを外すだけ_db.ChampionCounters.Attach(champion);

于 2012-07-15T02:09:23.763 に答える