update demo

This commit is contained in:
2881099 2022-08-20 00:55:44 +08:00
parent 3339d96117
commit 4d91d87660
2 changed files with 19 additions and 9 deletions

View File

@ -70,9 +70,9 @@ namespace aspnetcore_transaction.Controllers
_repoSong2.Insert(new Song());
}
[Transactional(Propagation = Propagation.Nested)] //sqlite 不能嵌套事务,会锁库的
async public Task Test11()
public Task Test11()
{
await Task.Delay(TimeSpan.FromSeconds(10)).ContinueWith(t =>
return Task.Delay(TimeSpan.FromSeconds(1)).ContinueWith(t =>
_repoSong.InsertAsync(new Song()));
}

View File

@ -4,6 +4,7 @@ using Rougamo.Context;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
@ -18,8 +19,7 @@ namespace FreeSql
IsolationLevel? m_IsolationLevel;
static AsyncLocal<IServiceProvider> m_ServiceProvider = new AsyncLocal<IServiceProvider>();
public static void SetServiceProvider(IServiceProvider serviceProvider) =>
m_ServiceProvider.Value = serviceProvider;
public static void SetServiceProvider(IServiceProvider serviceProvider) => m_ServiceProvider.Value = serviceProvider;
IUnitOfWork _uow;
public override void OnEntry(MethodContext context)
@ -29,14 +29,24 @@ namespace FreeSql
}
public override void OnExit(MethodContext context)
{
try
if (typeof(Task).IsAssignableFrom(context.RealReturnType))
{
if (context.Exception == null) _uow.Commit();
else _uow.Rollback();
((Task)context.ReturnValue).ContinueWith(t => _OnExit());
return;
}
finally
_OnExit();
void _OnExit()
{
_uow.Dispose();
try
{
if (context.Exception == null) _uow.Commit();
else _uow.Rollback();
}
finally
{
_uow.Dispose();
}
}
}
}