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 回答