2011-08-31 5 views
2

ここで投稿を読んだので、ユーレカの回答が見つからないので、ここにある内容を確認してください。 LinqからSQlへの変更はdbに反映されません。LINQ to SQLでデータベースが更新されないという問題

ここに私のコードです。何か目立つのですか? dc.GetChangeSetの呼び出しで0の変更が示されます。 私は何が欠けていますか? "設定"の新しい値がcsオブジェクトのプロパティに設定されているのがわかります。 SettingIDは私のテーブルのプライマリキーであり、dbmlにPKとして表示されるので問題ありません。

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はcconflictによるdc.SubmitChangesそれエラー時に、1挿入を示し、これに私のコードを変更しました。あなたがカスタムクラスのコードを削除してみて、ちょうどDを選択

... 
dc.ClarifireSetups.InsertOnSubmit(cs) 
dc.SubmitChanges() 
+0

場合によっては、DBMLを再作成することができます – Pleun

+0

いいえ、ゼロからdbmlを作り直すことは役に立ちませんでした。 GetChangeSetにまだ0個のアイテムが表示されています –

答えて

2

が欠落していることだろう...更新ではなく、挿入するために

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 
+0

それは、世話をしたようですね、ありがとう! –

+0

AdminClarifireSetupタイプは、.dbmlファイル内の単一テーブルの定義に過ぎません。私のカスタムクラスはClarifireSetupです。しかし、SubmitChangesが再びdbに伝播するためには、Singleが実際のテーブルオブジェクトであるAdminClarifireSetupオブジェクトである必要があるようです –

0

をしようとしています。

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が失敗していると考えています。名前を変更していないので、絞り込む明示的な値を指定する必要はありません。

+0

dc.ClarifireSetups ...が幸福でない –

+0

テーブルがAdminClarifireSetupsと呼ばれています。クラスはClarifireSetupと呼ばれています dc.ClarifireSetupはテーブルではないため動作しません。 InsertOnSubmitは、クラスオブジェクトではなく、パラメータとしてテーブルのエンティティを必要とします。 –

+0

InsertOnSubmitが失敗し、挿入しようとしています。更新されていません。 –

関連する問題