Я новичок в 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.Однако, когда я вызываю 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