【发布时间】:2014-10-29 05:11:12
【问题描述】:
我有一个控制器操作,我试图在数据库中创建一个FantasyTeam 类型的新对象,并修改一个现有的用户类型的对象。但是,当调用该操作时,我收到了 System.InvalidOperationException 异常,并解释为:
一个实体对象不能被多个实例引用 IEntityChangeTracker。
我的代码如下。
public ActionResult Create([Bind(Include="ID,FantasyTeamName")] FantasyTeam fantasyteam)
{
if (ModelState.IsValid)
{
var CurrentUser = UserManager.FindById(User.Identity.GetUserId());
fantasyteam.OwnerID = CurrentUser.Id;
CurrentUser.HasTeam = true;
db.FantasyTeams.Add(fantasyteam);
db.Entry(CurrentUser).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Dashboard", "Application");
}
return View(fantasyteam);
}
控制器操作将新的FantasyTeam 对象作为参数从用户选择团队详细信息的视图中获取。然后我找到当前登录的用户并将团队的OwnerID 设置为与所有者的UserID 匹配,作为我的外键。然后我将新的FantasyTeam 添加到数据库并修改数据库中的用户记录,将布尔值HasTeam 更改为true。 新团队的添加本身就可以正常工作...一旦我尝试修改 User 对象,我也遇到了异常。
我在 StackOverflow 上搜索过这个异常,发现了很多相关的问题,但是我找不到将其他解决方案应用于我的问题的方法。在某些情况下,问题是开发人员使用了两个单独的数据上下文,而他们本应该只使用一个,但我认为这不适用于我这里。
有人可以提供关于这里可能出了什么问题的见解吗?
谢谢!
【问题讨论】:
-
确保
db和UserManager使用的内部上下文是(使用)相同的上下文。 -
原来如此——我没有意识到 UserManager 使用的上下文与“db”项使用的上下文不同。谢谢!
-
有人能指点我一篇解释
([Bind(Include="ID,FantasyTeamName")] FantasyTeam fantasyteam)语法的文章吗?我以前没见过,但假设它与自定义绑定有关。 -
当我被告知要查看入门教程时,我总是担心 :) 谢谢,我会看看。
标签: asp.net-mvc entity-framework