Asp.net 将对实体模型的更改保存到数据库
我是实体框架的新手,正在扩展现有的代码库。我使用jQuery将所需的信息传递回服务器ajaxy样式,因此我不能使用Asp.net 将对实体模型的更改保存到数据库,asp.net,database,entity-framework,Asp.net,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
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
编辑
集装箱代码:
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
原来我使用的是一个非静态(共享)的
容器。
我有两个Manager
类,这两个类都是从BaseManager
类继承的,都是定义的容器。我在一个管理器中执行查询命令,并在另一个中保存
啊 容器是DataContext的静态或缓存实例吗?你能展示一下与创建和存储容器相关的代码吗?@wonkim00-这就是你所需要的吗?是的,这就是我想要的,但我看不出有什么错。我不认为这是DataContext生命周期管理问题——它会被创建和缓存,随后对PlayerAdminManager上的方法的调用会使用缓存实例,因此更改跟踪应该是活动的,不需要附加修改过的对象。对不起,谢谢你看。附加修改的对象是什么意思?(我对实体框架完全陌生)我还要确认,当您重新加载页面时,正在创建一个全新的DataContext。在容器getter中放置断点。如果它以某种方式使用缓存副本,那么对实体调用Refresh()可能会有所帮助。
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