2012-04-24 60 views
0

我看到這裏一些帖子看起來像我這樣的插入實體,但是我找不到答案,我的具體問題。異常,同時試圖使用EF4.3.1

的事情是,我試圖插入使用導航實體到數據庫。支柱。然而 我經常收到:The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.

using (EntitiesDatabase context = new EntitiesDatabase()) 
{ 
    if (UserHandler.Instance.User is Admin) 
    { 
     ((Admin)UserHandler.Instance.User).ProjectManagers.Add(
      new ProjectManager(firstNameTextBox.Text, lastNameTextBox.Text, usernameTextBox.Text, passwordTextBox.Text)); 
    } 
    else if (UserHandler.Instance.User is ProjectManager) 
    { 
     ((ProjectManager)UserHandler.Instance.User).Developers.Add(
      new Developer(firstNameTextBox.Text, lastNameTextBox.Text, usernameTextBox.Text, passwordTextBox.Text)); 
    } 

    context.SaveChanges(); 
} 

錯誤異常的代碼(u.ProjectManagers.Add(new ProjectManager(...))

爲清晰的5-6線拋出: UserHandler是保存參考一singelton登錄用戶。 用戶有一個導航屬性

public virtual ICollection<ProjectManager> ProjectManagers { get; set; } 

實際應該插入新項目經理的DB I上下文做SaveChanges()後。

我已經做了一些簡單的測試,在較小的項目(如在PluralSight教程的那些)和它的工作...由於某種原因,這些相同的路線不工作。 在我試圖將其插入到導航之前,我正在創建新的項目經理。支柱。因爲我從來沒有進入保存更改線...

從我看到的其他答案,我猜想using聲明由於某種原因處理的事情,才達到了最後括號。我不明白爲什麼...... 有人能以正確的方式指出我嗎?

BTW,這不是功課的傢伙,這是我的一個項目中,我努力學習C#,EF和其他技術。

+0

上線,你得到錯誤?忘記指定 – Reniuz 2012-04-24 08:38:15

+0

。即時通訊得到它在我嘗試添加到數據庫的東西... u.ProjectManagers.Add(新的ProjectManager(...))第6行的代碼 – 2012-04-24 08:44:58

+0

我認爲你需要使用當前的上下文,而不是某種類型的用戶處理程序實例 – Reniuz 2012-04-24 08:51:11

回答

0

它看起來像背景,你得到User例如,從在不同的情況下,其設置牽強。

你有兩個選擇要麼使用相同的情況下,或實體連接到使用ObjectContext.Attach這樣的新背景:

using (EntitiesDatabase context = new EntitiesDatabase()) 
{ 
    context.Attach(UserHandler.Instance.User); 
    if (UserHandler.Instance.User is Admin) 
    { 
    ((Admin)UserHandler.Instance.User).ProjectManagers.Add(
     new ProjectManager(firstNameTextBox.Text, lastNameTextBox.Text, usernameTextBox.Text, passwordTextBox.Text)); 
    } 
    else if (UserHandler.Instance.User is ProjectManager) 
    { 
    ((ProjectManager)UserHandler.Instance.User).Developers.Add(
     new Developer(firstNameTextBox.Text, lastNameTextBox.Text, usernameTextBox.Text, passwordTextBox.Text)); 
    } 

    context.SaveChanges(); 
} 
+0

我使用的是相同的情況下,我只是不添加新實體的dbset,IM將它添加到ICollection的我在Admin中,然後執行context.SaveChanges() – 2012-04-24 09:03:26

+0

但是,如果'Admin'沒有附加到當前上下文,而是使用已經處理的不同上下文獲取。你會得到這個錯誤。這意味着將'Admin'對象附加到上下文應該可以解決問題。 – Xharze 2012-04-24 09:06:44

+0

管理員沒有被這個上下文跟蹤,所以我必須附上它!非常感謝! – 2012-04-24 09:20:13

0

我的猜測是,與UserHandler.Instance.User相關的數據上下文在當前調用上下文中不存在,並且UserHandler.Instance.User未附加到最近實例化的context上。

+0

UserHandler是singelton ...它存在於所有情況,我認爲:) – 2012-04-24 08:51:00

相關問題