Я сталкиваюсь с зависанием, когда программа пытается получить доступ к базе данных фруктов. Я уже включил сетевой доступ MSDTC как на своем компьютере разработчика, так и на сервере SQL Server.
Код:
(простите за раскраску кода ... ТАК неправильно истолковывает мой 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
Edit:
Я еще немного покопался, и оказалось, что проблема в линии 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, чтобы он был ближе к моему реальному коду.
Окончательное редактирование:
Я попытался использовать обычное SqlConnection вместо "thingies as New ThingiesDataContext", и проблема все еще возникает.
Похоже, что TransactionScope не может обрабатывать несколько соединений SQL внутри одной транзакции.
Официальное примечание Microsoft
параллельные транзакции не поддерживаются SQL Server.
Из MSDN: http://msdn.microsoft.com/en-us/library/bb896149.aspx