Skip to main content

TransactionScopeOption vs TransactionScopeOptions

TransactionScopeOption in System.Transaction

What is the differences between TransactionScopeOptions when we use it to create TransactionScope.
We have the following option at our disposal.

1. TransactionScopeOption.Required

TransactionScope created here is dependent on the root TransactionScope.

2. TransactionScopeOption.RequiresNew

Creates an entirely new TransactionScope

3. TransactionScopeOption.Suppress

TransactionScope created here is independent of root TransactionScope.

Code below shows an example of how transactionScope takes effect when you stop your application in s1.Complete();
Data gets committed in TransactionScopeMixRequiresNew and TransactionScopeMixSupress method but not TransactionScopeMixRequires.


using (TransactionScope s1 = new TransactionScope(TransactionScopeOption.Required))
{
TransactionScopeMixRequires();

TransactionScopeMixRequiresNew();

TransactionScopeMixSupress();

/// if you stop your application here
/// TransactionScopeMixRequiresNew and TransactionScopeMixSupress's data
/// gets committed into the database

s1.Complete();

}

Implementing TransactionScope is pretty straight forward. However, my testing so far tells me that TransactionScope run without hitting "Communication with the underlying transaction manager has failed" if your Application / Database server reside on the same domain.

When i try running the application from a remote location, it fails badly. I had to stick to the same domain.


Notes

To use TransactionScope, there are a few requirements that i've noticed.

a) Use a single connection. You can use the using() block if you going to execute several sql continously and then immediately close your connection. Otherwise, maintain your connection open throughout the TransactionScope. Finally call transactionScope method's called Completed.



b) If you have external connection, declared outside out the transaction block that won't work either.


For example :-

SqlConnection OUTSIDECONNECTION = new SqlConnection(myConnectionString);

using (TransactionScope scope = new TransactionScope())
{
///// do something external OUTSIDECONNECTION ////
//// create you own connection instance ////
scope.Complete();
}




DTC Troubleshooting link

I found this very useful.

Comments

Popular posts from this blog

Android Programmatically apply style to your view

Applying style to your view (button in this case) dynamically is pretty easy. All you have to do is place the following in your layout folder (res/layout)
Let's call this file : buttonstyle.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" > <shape> <solid android:color="#449def" /> <stroke android:width="1dp" android:color="#2f6699" /> <corners android:radius="3dp" /> <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" /> </shape> </item> <item> <shape> <gradient android:startColor="#449def" a…

DataTable does not have AsEnumerable

I have problem locating my AsEnumerable extension method in my DataTabe (System.Data). Thank god for this post by Angel
(http://blogs.msdn.com/angelsb/archive/2007/02/23/does-not-contain-a-definition-for.aspx)

I was able to find this method once i have added reference to the following assembly.

C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Data.DataSetExtensions.dll

Try to do a dummy Build and you should be able to get it.

OpenCover code coverage for .Net Core

I know there are many post out there getting code coverage for .dotnetcore. I'm using opencover to address this needs.

In case, you do no want to use opencover and wanted to stick with vs2015 code coverage, you can try to copy Microsoft.VisualStudio.CodeCoverage.Shim.dll from C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Dynamic Code Coverage Tools\coreclr\ and drop it into your project "bin\Debug\netcoreapp1.0" folder.  Please note : you need to be on VS2015 Enterprise to do this. 

To get started, I guess we need to add OpenCover and ReportGenerator for our test projects, as shown in diagram below :-



When nuget packge gets restored, we will have some binaries downloaded to our machine and we going to use this to generate some statistics. I think the biggest issue is to getting those command lines work.

In dotnetcore, we run test project using "dotnet test" (assuming you are in the test project folder - if not please go there)  So we add this …