簡體   English   中英

將對實體模型的更改保存到數據庫

[英]Save changes to Entity model to the database

我是Entity Framework的新手,正在擴展現有的代碼庫。 我正在使用jQuery將所需的信息傳遞回服務器ajaxy樣式,因此無法使用TryUpdateModel() 這是代碼:

<HttpPost()>
    Function UpdateRoster() As JsonResult
        Dim model As New Models.ViewModels.PlayerAdmin

        Dim jsonString As String = Request.Form("json")

        model = Deserialise(Of Models.ViewModels.PlayerAdmin)(jsonString)

        For Each playerAdminPlayer As Models.ViewModels.PlayerAdminPlayer In model.Roster
            Dim playerToTeam As New DAL.PlayersToTeam
            Dim player As DAL.Player = PlayerAdminManager.GetPlayerById(playerAdminPlayer.PlayerId)
            player.FirstName = playerAdminPlayer.FirstName
            PlayerAdminManager.SaveChanges()
        Next playerAdminPlayer


        Dim playerAfter As DAL.Player = PlayerAdminManager.GetPlayerById(model.Roster.First.PlayerId)

        Return Json(New With {.success = False, .message = playerAfter.FirstName})

    End Function 

Deserialise是一個輔助函數,它將傳入的JSON字符串轉換為vb對象。

player成功從數據庫加載,並且playerAdminPlayer是JSON字符串中的正確對象,因此playerAdminPlayer正常。 但是,當我調用PlayerAdminManager.SaveChanges() (僅通過調用db.SaveChanges()時),即使有更改,結果也始終為0(不確定是否可以預期)。

playerAfter是我嘗試查看是否確實保存了更改。 似乎正常工作,在該playerAfter.FirstName是新更新的名字。

PlayerAdminManager.GetPlayerById(integer)從數據庫中提取,因此我認為,由於在playerAfter中觀察到更改,因此這些更改已保存到數據庫中。 但是,當我重新加載網頁(從數據庫中提取)時,舊值在那里。

有任何想法嗎?

這是我提到的一些功能:

Function GetPlayerById(ByVal Id As Integer) As DAL.Player
        Return Container.Players.Where(Function(o) o.PlayerId = Id And o.IsVisible = True).SingleOrDefault
    End Function

Sub SaveChanges()
        Dim numberOfChanges As Integer = Container.SaveChanges()
        Debug.WriteLine("No conflicts. " & numberOfChanges.ToString() & " updates saved.")
    End Sub

編輯

容器代碼:

 Private _Container As DAL.LateralSportsContainer
    Protected ReadOnly Property Container As DAL.LateralSportsContainer
        Get
            If _Container Is Nothing Then
                Dim connStr As New System.Data.EntityClient.EntityConnectionStringBuilder
                connStr.ProviderConnectionString = Web.Configuration.WebConfigurationManager.ConnectionStrings("ApplicationServices").ConnectionString
                connStr.Metadata = "res://*/Lateral.csdl|res://*/Lateral.ssdl|res://*/Lateral.msl"
                connStr.Provider = "System.Data.SqlClient"
                _Container = New DAL.LateralSportsContainer(connStr.ConnectionString)
            End If

            Return _Container
        End Get
    End Property

原來我使用的是非靜態(共享) Container. 我有2個Manager類,都是從BaseManager類繼承的,都是定義了Container 我在一個Manager執行查詢命令,然后在另一個Manager保存。

h!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM