Guest User

Untitled

a guest
Jul 23rd, 2018
87
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. class Program
  2.     {
  3.         static IsolationLevel currentIsolationLevel = IsolationLevel.ReadCommitted;
  4.  
  5.         static void Main(string[] args)
  6.         {
  7.             Task.Run(() =>
  8.             {
  9.                 Console.WriteLine("Start 1");
  10.                 DoInTransaction((context) =>
  11.                 {
  12.                     var user1 = context.Users.AsNoTracking().First();
  13.                     Console.WriteLine("sleep 1...");
  14.                     Thread.Sleep(3000);
  15.                     user1.Name = "1";
  16.                     context.Entry(user1).State = System.Data.Entity.EntityState.Modified;
  17.                     Console.WriteLine("try save 1");
  18.                     context.SaveChanges();
  19.                 });
  20.                 Console.WriteLine("End 1");
  21.             });
  22.  
  23.  
  24.             Task.Run(() =>
  25.             {
  26.                 Console.WriteLine("Start 2");
  27.                 DoInTransaction((context) =>
  28.                 {
  29.                     var user1 = context.Users.AsNoTracking().First();
  30.                     Console.WriteLine("sleep 2...");
  31.                     Thread.Sleep(3000);
  32.                     user1.Name = "2";
  33.                     context.Entry(user1).State = System.Data.Entity.EntityState.Modified;
  34.                     Console.WriteLine("try save 2");
  35.                     context.SaveChanges();
  36.                 });
  37.                 Console.WriteLine("End 2");
  38.             });
  39.  
  40.  
  41.             Console.ReadKey();
  42.  
  43.         }
  44.  
  45.         private static void DoInTransaction(Action<EFContext> action)
  46.         {
  47.             using (var context = new EFContext())
  48.             {
  49.                 using (var transaction = context.Database.BeginTransaction(currentIsolationLevel))
  50.                 {
  51.                     try
  52.                     {
  53.                         action(context);
  54.                         transaction.Commit();
  55.                     }
  56.                     catch (Exception ex)
  57.                     {
  58.                         try
  59.                         {
  60.                             transaction.Rollback();
  61.                         }
  62.                         catch
  63.                         {
  64.                             ;// PrintException(ext);
  65.                         }
  66.                         PrintException(ex);
  67.                     }
  68.                 }
  69.             }
  70.         }
  71.  
  72.         private static void PrintException(Exception ex)
  73.         {
  74.             Console.WriteLine(ex.Message);
  75.             if (ex.InnerException != null)
  76.                 PrintException(ex.InnerException);
  77.         }
  78.     }
RAW Paste Data