2011-12-01 51 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!