我在實體框架的某處存在誤解。此代碼是從我的單元測試:實體模型未在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
仍然是Nothing
。 GetAirForceMensBB()
返回Team
與TeamId = 12434功能:
Function GetAirForceMensBB() As DAL.Team
Return (From team In Container.Teams Where team.TeamId = 12434).SingleOrDefault
End Function
我敢肯定,我使用的是實體框架錯誤,它可能有事情做的事實,我打電話在不同的地方PlayerAdminTestManager
,但我不明白爲什麼。雖然,我將PlayerAdminManager
設置爲PlayerAdminTestManager
。 PlayerAdminTestManager
延伸PlayerAdminManager
,fyi。
爲什麼team.RosterLink
未顯示UpdateRosterLink
的更新?
感謝
編輯 Container
是我ObjectContext
。這就是我如何訪問存儲在數據庫中的信息。 Container.Teams
代表我的Teams
表。
Container.Teams中的內容是什麼? –
@AdamTuliper - 這是我的數據庫中的「Teams」表格 –
您確定該集合中有任何內容嗎?設置一個斷點。還要確保有一個id = 12434的地方。如果您將SingleOrDefaiult更改爲Single(),那麼如果您沒有任何團隊,它會炸燬,然後您會知道問題出在哪裏。 –