現在、正常に機能している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を更新しようとすると、エラーがスローされます。
前もって感謝します!