データベースを更新するときに、アタッチ結果を例外として使用するため、各プロパティのハードコードマッピングを行う必要があります。これはあまりにもエレガントではないようです。私が気づいていないここで簡単な解決策がありますか?私のコードはこの目的のために呼び出す "MapData"メソッドを示しています。SqlCEデータベースの更新Linq-to-SQL
Btw、エンティティクラス(ここでは、Users)はSqlMetalで自動生成されます。
Public Class UserDataService
Public Sub Save(ByVal user As Users)
Dim ctx As New TestDB(connection)
Dim id As Integer = user.Id
If user.Id = 0 Then
Insert(user)
Else
Dim q = (From n In ctx.Users Where n.Id = id Select n).Single
q.MapData(user)
For Each o In user.Orders
o.Save()
Next
' ctx.Users.Attach(user, q) ' Does not work
' ctx.Users.Attach(user, True) ' Does not work
End If
ctx.SubmitChanges()
ctx.Dispose()
End Sub
End Class
Partial Public Class Users
Public Sub MapData(ByVal row As Users)
Me.Name = row.Name
End Sub
End Class
EDIT1:
例外:
ctx.Users.Attach(ユーザー、Q)
がすでにあるキーを持つエンティティを追加することはできませんつかいます。元の状態なしで修正され、それはバージョンメンバを宣言または更新チェックポリシーを持っていない場合
ctx.Users.Attach(ユーザ、TRUE)
エンティティにのみ取り付けることができます。
EDIT2:
私は最後に述べた例外を満たすことになっていると信じて、列のタイムスタンプを、追加しようとしました。そこでここに示す列を追加します。これは助けにはなりませんが、おそらく私はそれを有効にするためにいくつかの設定を行う必要がありますか?
あなたは何の例外を得るのですか? – SLaks
その情報で編集しました。 – bretddog