توقف مع LINQ-SQL Server و TransactionScope
-
20-09-2019 - |
سؤال
وأنا واجهت على تعليق عندما يحاول البرنامج الوصول إلى قاعدة بيانات الفاكهة. لقد مكنت بالفعل الوصول MSDTC شبكة على كل كمبيوتر تطوير بلدي وملقم SQL Server.
والرمز: (العفو رمز تلوين ... ل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 إلى SQL متخيل، وأحصل على الخطأ التالي:
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 العادي بدلا من "ثينجيس كما ThingiesDataContext الجديد" واستمرار حدوث المشكلة.
ويبدو أن TransactionScope لا يمكن التعامل مع اتصالات SQL متعددة داخل نفس المعاملة.
<قوية> الرسمية مايكروسوفت ملاحظة
<اقتباس فقرة> غير معتمدةوالمعاملات الموازية بواسطة SQL Server.
اقتباس فقرة>ومن MSDN: http://msdn.microsoft.com/en- لنا / مكتبة / bb896149.aspx
المحلول
وهذه ليست قضية MSDTC. لو كان، سوف تحصل على خطأ قائلا لم يتم تمكين DTC ويجب أن يكون. كما انها ليست قضية الجمود، لأنك لن تحصل على خطأ من التفاصيل عن ذلك أيضا.
إذا كان لي أن أخمن، أود أن أقول أن "شفرة معقدة أخرى ..." هو محاولة لتنفيذ عملية قاعدة البيانات ويتم حظر من جانب واحد أو غيرها من الكائنات سياق قاعدة البيانات.
وطريقة واحدة يمكنك تحديد هذه هي لتشغيل SQL التعريف لمعرفة ما هي في الواقع يجري تنفيذ البيانات SQL على الخادم، والتحقق من وجود كتل.