实体模型未在SaveChanges上更新

时间:2011-12-01 19:58:33

标签: vb.net asp.net-mvc-3 entity-framework save

我对实体框架存在误解。这段代码来自我的单元测试:

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设置为PlayerAdminTestManagerPlayerAdminTestManager延伸PlayerAdminManager,fyi。

为什么team.RosterLink没有显示UpdateRosterLink的更新?

由于

修改 ContainerObjectContext。这是我访问存储在数据库中的信息的方式。 Container.Teams代表我的Teams表。

1 个答案:

答案 0 :(得分:0)

问题是我引用了Container的不同实例(每个管理器都创建了自己的实例)。因此,实体项目没有附加任何东西。

卫生署!