プログラムがフルーツデータベースにアクセスしようとすると、ハングが発生します。開発用コンピューターとSQLServerサーバーの両方でネットワークアクセスMSDTCを既に有効にしています。
コード:(コードの色付けはご容赦ください...SOが私のVB.NETを誤って解釈しています)
Using ts As New TransactionScope
Dim fruit As New FruitDataContext
Dim thingies As New ThingiesDataContext
If (From f In fruit.tblApples Where f.Rotten = "Yes" AndAlso f.batch = 1).Count >= 1 Then
'Record today's date as the day that the rotten apples were dumped.
End If
'Other complicated code that uses ThingiesDataContext and FruitDataContext
du.SubmitChanges()
ts.Complete()
End Using
編集:
もう少し掘り下げてみましたが、問題はLINQのラインにあることがわかりました。LINQ to SQL Visualizerで表示しようとすると、次のエラーが発生します。
System.InvalidCastException: Specified cast is not valid.
at LinqToSqlQueryVisualizer.SqlQueryInfo.deserialize(Stream stream)
at LinqToSqlQueryVisualizer.Visualizer.Display(IDialogVisualizerService windowService, Stream rawStream)
at LinqToSqlQueryVisualizer.DialogChooser.Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider)
at Microsoft.VisualStudio.DebuggerVisualizers.DebugViewerShim.ManagedShim.DelegatedHost.CreateViewer(IntPtr hwnd, HostServicesHelper hsh, SafeProxyWrapper proxy)
また、LINQステートメントを編集して実際のコードに近づけました。
最終編集:「thingiesas New ThingiesDataContext」の代わりに通常のSqlConnectionを使用しようとしましたが、それでも問題は発生します。
TransactionScopeは、同じトランザクション内で複数のSQL接続を処理できないようです。
公式MicrosoftNote
並列トランザクションはSQLServerではサポートされていません。
MSDNから:http://msdn.microsoft.com/en-us/library/bb896149.aspx