[英]ASP.NET MVC entity validation error on trying to save database changes
[英]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.