Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Program
- {
- static IsolationLevel currentIsolationLevel = IsolationLevel.ReadCommitted;
- static void Main(string[] args)
- {
- Task.Run(() =>
- {
- Console.WriteLine("Start 1");
- DoInTransaction((context) =>
- {
- var user1 = context.Users.AsNoTracking().First();
- Console.WriteLine("sleep 1...");
- Thread.Sleep(3000);
- user1.Name = "1";
- context.Entry(user1).State = System.Data.Entity.EntityState.Modified;
- Console.WriteLine("try save 1");
- context.SaveChanges();
- });
- Console.WriteLine("End 1");
- });
- Task.Run(() =>
- {
- Console.WriteLine("Start 2");
- DoInTransaction((context) =>
- {
- var user1 = context.Users.AsNoTracking().First();
- Console.WriteLine("sleep 2...");
- Thread.Sleep(3000);
- user1.Name = "2";
- context.Entry(user1).State = System.Data.Entity.EntityState.Modified;
- Console.WriteLine("try save 2");
- context.SaveChanges();
- });
- Console.WriteLine("End 2");
- });
- Console.ReadKey();
- }
- private static void DoInTransaction(Action<EFContext> action)
- {
- using (var context = new EFContext())
- {
- using (var transaction = context.Database.BeginTransaction(currentIsolationLevel))
- {
- try
- {
- action(context);
- transaction.Commit();
- }
- catch (Exception ex)
- {
- try
- {
- transaction.Rollback();
- }
- catch
- {
- ;// PrintException(ext);
- }
- PrintException(ex);
- }
- }
- }
- }
- private static void PrintException(Exception ex)
- {
- Console.WriteLine(ex.Message);
- if (ex.InnerException != null)
- PrintException(ex.InnerException);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement