Vb.net LINQ to SQL不更新数据库时出现问题
我已经通读了这里的帖子,找不到任何尤里卡的答案,所以这里是我的答案。 Linq到SQl不将更改传播回数据库 这是我的密码。有什么突出的地方吗? 对dc.GetChangeSet的调用显示0个更改。 我错过了什么?我可以看到“设置”中的新值被设置为cs对象属性。SettingID是我表中的主键,在dbml中显示为PK,所以这不是问题Vb.net LINQ to SQL不更新数据库时出现问题,vb.net,asp.net-mvc-3,linq-to-sql,.net-4.0,Vb.net,Asp.net Mvc 3,Linq To Sql,.net 4.0,我已经通读了这里的帖子,找不到任何尤里卡的答案,所以这里是我的答案。 Linq到SQl不将更改传播回数据库 这是我的密码。有什么突出的地方吗? 对dc.GetChangeSet的调用显示0个更改。 我错过了什么?我可以看到“设置”中的新值被设置为cs对象属性。SettingID是我表中的主键,在dbml中显示为PK,所以这不是问题 Public Shared Function Update(ByVal setting As ClarifireSetup) As Boolean Dim
Public Shared Function Update(ByVal setting As ClarifireSetup) As Boolean
Dim cs As ClarifireSetup
Try
Using dc As New AdminClarifireSetupDataContext(TripleDESSecurity.Decrypt(SharedData.PortalCnx))
cs = (From d In dc.AdminClarifireSetups
Where d.SettingID = setting.SettingID
Select New ClarifireSetup With {
.SettingID = d.SettingID,
.SettingKey = d.SettingKey,
.SettingValue = d.SettingValue,
.FriendlyName = d.FriendlyName,
.DisplayOrder = d.DisplayOrder
}).FirstOrDefault()
If cs IsNot Nothing Then
cs.SettingID = setting.SettingID
cs.SettingKey = setting.SettingKey
cs.SettingValue = setting.SettingValue
cs.FriendlyName = setting.FriendlyName
cs.DisplayOrder = setting.DisplayOrder
dc.GetChangeSet()
dc.SubmitChanges()
End If
End Using
Return True
Catch ex As Exception
Throw
Finally
If Not cs Is Nothing Then
cs.Dispose()
cs = Nothing
End If
End Try
End Function
编辑:
将我的代码更改为此,InsertOnSubmit在dc时显示1个插入。SubmitChanges由于cconflict而导致错误。它正在尝试插入,而不是更新
Public Shared Function Update(ByVal setting As ClarifireSetup) As Boolean
Dim cs As AdminClarifireSetup
Try
Using dc As New AdminClarifireSetupDataContext(TripleDESSecurity.Decrypt(SharedData.PortalCnx))
'cs = (From d In dc.AdminClarifireSetups
' Where d.SettingID = setting.SettingID
' Select New AdminClarifireSetup With {
' .SettingID = d.SettingID,
' .SettingKey = d.SettingKey,
' .SettingValue = d.SettingValue,
' .FriendlyName = d.FriendlyName,
' .DisplayOrder = d.DisplayOrder
' }).FirstOrDefault()
cs = New AdminClarifireSetup
If cs IsNot Nothing Then
cs.SettingID = setting.SettingID
cs.SettingKey = setting.SettingKey
cs.SettingValue = setting.SettingValue
cs.FriendlyName = setting.FriendlyName
cs.DisplayOrder = setting.DisplayOrder
dc.SubmitChanges()
End If
End Using
Return True
Catch ex As Exception
Throw
Finally
If Not cs Is Nothing Then
cs = Nothing
End If
End Try
End Function
是不是你失踪了
...
dc.ClarifireSetups.InsertOnSubmit( cs )
dc.SubmitChanges()
尝试删除自定义类代码,只需选择d
Dim cs as AdminClarifireSetup ' This looks like the actual object type
Try
Using dc As New AdminClarifireSetupDataContext(TripleDESSecurity.Decrypt(SharedData.PortalCnx))
cs = (From d In dc.AdminClarifireSetups
Where d.SettingID = setting.SettingID
Select d).Single()
If cs IsNot Nothing Then
cs.SettingID = setting.SettingID
cs.SettingKey = setting.SettingKey
cs.SettingValue = setting.SettingValue
cs.FriendlyName = setting.FriendlyName
cs.DisplayOrder = setting.DisplayOrder
dc.GetChangeSet()
dc.SubmitChanges()
End If
End Using
我的想法是GetChangeSet失败了,因为它没有看到任何正在注册更改的本机对象。您没有更改任何名称,因此无需指定要缩小范围的显式值。有时只是重新创建DBML会有帮助。不,从头开始重新创建DBML没有帮助。仍在GetChangeSetdc.Ups中显示0项。。。不高兴该表名为AdminDiclareSetUps,我的类名为DiclareSetUp,因此dc.DiclareSetUp不工作,因为它不是表。InsertOnSubmit需要表的实体作为参数,而不是类objectInsertOnSubmit失败,它正在尝试插入,而不是更新。。请参阅上面编辑的代码哦,好的,我以为您是在尝试从AdminClearResetUps复制到ClearResetUps,因为您从中选择时使用了new:)我是按照Telerik支持部门的指示使用原始代码的。。。但是它显然不起作用。AdminUp类型只是.dbml文件中单个表的定义。我的自定义类已启动。但是它看起来需要一个对象AdminUp,即实际的表对象,以便将提交更改传播回db