我对实体框架存在误解。这段代码来自我的单元测试:
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
是一个Entity对象。我所做的是重置RosterLink
中的Team
字段,以确保我们的测试在同一个地方开始。然后我调用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
= Roster Link,就像我在单元测试中设置的那样)。
但是,我的单元测试失败了,因为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
表。
答案 0 :(得分:0)
问题是我引用了Container的不同实例(每个管理器都创建了自己的实例)。因此,实体项目没有附加任何东西。
卫生署!