2011-12-01 69 views
0

我在實體框架的某處存在誤解。此代碼是從我的單元測試:實體模型未在SaveChanges上更新

Public Sub UpdateRosterLinkTest() 
    Dim target As PlayerAdmin = New PlayerAdmin() 

    target.PlayerAdminManager = playerAdminTestManager 
    target.Team = playerAdminTestManager.GetAirForceMensBB() 

    playerAdminTestManager.resetRosterLink(target) 
    Assert.IsNull(target.Team.RosterLink) 

    Dim playerAdmin As PlayerAdmin = New PlayerAdmin() 
    playerAdmin.TeamId = 12434 
    playerAdmin.RosterLink = "Roster Link" 

    playerAdmin.UpdateRosterLink() 

    Dim team As DAL.Team = playerAdminTestManager.GetAirForceMensBB() 
    Assert.AreEqual("Roster Link", team.RosterLink) 

End Sub 

我創建一個PlayerAdmin,這是一個模型類。 target.Team是一個實體對象。我所做的就是重置Team中的RosterLink字段,以確保我們的測試在相同的地方開始。然後我打電話給UpdateRosterLink()函數。這看起來像:

Function UpdateRosterLink() As Integer 
     If (PlayerAdminManager Is Nothing) Then 
      PlayerAdminManager = New PlayerAdminManager() 
     End If 

     Team = PlayerAdminManager.GetTeamByTeamId(TeamId) 
     Team.RosterLink = RosterLink 
     Dim numberOfChanges As Integer = PlayerAdminManager.SaveChanges() 
     Return numberOfChanges 
    End Function 

當我運行這段代碼,我可以看到保存在SQL Server的這個是直接從(RosterLink =名冊鏈接,就像我在單元測試中設置)的變化。

但是,我的單元測試失敗,因爲team.RosterLink仍然是NothingGetAirForceMensBB()返回Team與TeamId = 12434功能:

Function GetAirForceMensBB() As DAL.Team 
    Return (From team In Container.Teams Where team.TeamId = 12434).SingleOrDefault 
End Function 

我敢肯定,我使用的是實體框架錯誤,它可能有事情做的事實,我打電話在不同的地方PlayerAdminTestManager,但我不明白爲什麼。雖然,我將PlayerAdminManager設置爲PlayerAdminTestManagerPlayerAdminTestManager延伸PlayerAdminManager,fyi。

爲什麼team.RosterLink未顯示UpdateRosterLink的更新?

感謝

編輯 Container是我ObjectContext。這就是我如何訪問存儲在數據庫中的信息。 Container.Teams代表我的Teams表。

+0

Container.Teams中的內容是什麼? –

+0

@AdamTuliper - 這是我的數據庫中的「Teams」表格 –

+0

您確定該集合中有任何內容嗎?設置一個斷點。還要確保有一個id = 12434的地方。如果您將SingleOrDefaiult更改爲Single(),那麼如果您沒有任何團隊,它會炸燬,然後您會知道問題出在哪裏。 –

回答

0

問題是我引用了容器的不同實例(每個管理器創建它自己)。因此,實體項目沒有附加任何東西。

Doh!