rowversionやタイムスタンプのないSQLテーブルを使用しています。しかし、Linqを使用してテーブルの特定の値を更新する必要があります。これがしますがTimeStampとStoredProceduresを使用しないLinq SubmitChangesを同時に使用する
Public Sub SaveCustomer(ByVal cust As Customer)
Using dc As New AppDataContext()
If (cust.Id > 0) Then
Dim tempCust As Customer = Nothing
Using dc2 As New AppDataContext()
tempCust = dc2.Customers.Single(Function(c) c.Id = cust.Id)
End Using
dc.Customers.Attach(cust, tempCust)
Else
dc.Customers.InsertOnSubmit(cust)
End If
dc.SubmitChanges()
End Using
End Sub
:LINQの更新する値を知ることができないので、私は、データベースから現在のオブジェクトを取得し、そのようなメソッドを取り付けのための入力として、データベースと実際のオブジェクトの両方を使用するために第2のDataContextを使用しています私は問題があります:私はまた、StoredProceduresを使用して、特定の時間に顧客のいくつかのフィールドを更新しています。今、次のワークフローを想像:
- データベース
- から顧客が
- 新しい値に顧客フィールドを設定しなさい
- コールSaveCustomer
別の顧客のフィールドを更新するストアドプロシージャを使用しますSaveCustomerメソッドは、コードに設定された値は含まれていませんが、ストアドプロシージャによって設定された値が格納されているデータベースから現在のオブジェクトを取得するようになりました。これを実際のオブジェクトに貼り付けて送信すると、データベース内のコードにも設定された値が更新され、... tadaaaa ...他のオブジェクトをNULLに設定します。実際のオブジェクトには、ストアドプロシージャ。
わかりましたか?
この問題を解決するためのベストプラクティスはありますか?
これは間違いなく妥当と思われます。しかし、私は顧客のデータベースとインフラストラクチャに反対しており、彼のデータベースのほとんどの部分が動的に生成され、独自のフレームワークを使用してアクセスするという事実により、ローバージョンニングを導入しません。 しかし、私はLinqと一緒に働いているチャンスを、Linqのことを示すために静的なテーブルだけに対して取り上げていました。 ;-)今私はSPのために問題を抱えています。このコンテキストで並行性チェックについて学ぶことができる良い出典がありますか? – Mephisztoe