ObjectStateManager中已存在具有相同键的对象

时间:2011-12-27 21:46:46

标签: c# asp.net-mvc-3 entity-framework

任何人都可以帮我解决此代码我收到此错误消息:

  '/'应用程序中的服务器错误。   ObjectStateManager中已存在具有相同键的对象。现有对象处于Modified状态。如果对象处于添加状态,则只能再次将其添加到ObjectStateManager。   描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中的起源位置的更多信息。

     

异常详细信息:System.InvalidOperationException:ObjectStateManager中已存在具有相同键的对象。现有对象处于Modified状态。如果对象处于添加状态,则只能再次添加到ObjectStateManager。

来源错误:

Line 90:    public void AddToTwitter(Twitter twitter)
Line 91:    {
Line 92:        base.AddObject("Twitter", twitter);
Line 93:    }

源文件:C:\ Users \ dell \ Documents \ Visual Studio 2010 \ Projects \ MvcApplication3 \ MvcApplication3 \ Models \ TwitterEntity.Designer.cs Line:92

代码是:

Models.TwitterEntities entity = new Models.TwitterEntities();
Models.Twitter tw = new Models.Twitter();

foreach (Hashtable item in (ArrayList)hs["results"])
{                
    foreach (DictionaryEntry subitem in item)
    {
        if (subitem.Key.ToString() == "from_user")
        {
            tw.from_user = (string)subitem.Value;
            Response.Write("<br>" + (string)subitem.Value);
            entity.AddToTwitter(tw);
        }
        if (subitem.Key.ToString() == "to_user")
        {
            tw.to_user = (string)subitem.Value;
            Response.Write("<br>" + (string)subitem.Value);
            entity.AddToTwitter(tw);
        }
        entity.SaveChanges();              
    }   
}

2 个答案:

答案 0 :(得分:3)

每次进行循环时,您都尝试添加相同的Twitter实例。

您需要在每次迭代中创建一个新实例(在循环体内)。

答案 1 :(得分:0)

@Slaks他不需要释放每个实例也会遇到堆栈溢出错误原谅pun..LOL

Models.Twitter tw = new Models.Twitter(); 
// do code... 

// tw.Dispose()或tw = null如果它没有实现IDisposable