Je rencontre un blocage lorsque le programme tente d'accéder à la base de données fruit. J'ai déjà activé l'accès réseau MSDTC sur mon ordinateur de développement et le serveur SQL Server.Se bloque avec LINQ-SQL Server et TransactionScope
code: (pardon la coloration de code ... SO-ce mal interpréter mon 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:
J'ai creusé autour d'un peu plus et il se trouve que le problème se trouve dans la ligne de LINQ. Lorsque j'ai essayé de voir avec le LINQ to SQL Visualizer, je reçois l'erreur suivante:
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)
J'ai également édité la déclaration LINQ être plus proche de mon code réel.
Dernière modification: J'ai essayé d'utiliser une SqlConnection normale au lieu d'un "thingies as New ThingiesDataContext" et le problème persiste.
Il semble que TransactionScope ne peut pas gérer plusieurs connexions SQL à l'intérieur d'une même transaction.
Microsoft officiel Note
parallel transactions are not supported by SQL Server.
De MSDN: http://msdn.microsoft.com/en-us/library/bb896149.aspx
Y a-t-il une autre transaction qui ouvre l'autre table? Est-ce une transaction imbriquée? –
non; non. –