|
|
|
|
@ -9,6 +9,7 @@ using Microsoft.Extensions.Logging.Abstractions;
|
|
|
|
|
using Volo.Abp.Data;
|
|
|
|
|
using Volo.Abp.EntityFrameworkCore;
|
|
|
|
|
using Volo.Abp.EntityFrameworkCore.DependencyInjection;
|
|
|
|
|
using Volo.Abp.MultiTenancy;
|
|
|
|
|
using Volo.Abp.Threading;
|
|
|
|
|
|
|
|
|
|
namespace Volo.Abp.Uow.EntityFrameworkCore
|
|
|
|
|
@ -23,15 +24,18 @@ namespace Volo.Abp.Uow.EntityFrameworkCore
|
|
|
|
|
private readonly IUnitOfWorkManager _unitOfWorkManager;
|
|
|
|
|
private readonly IConnectionStringResolver _connectionStringResolver;
|
|
|
|
|
private readonly ICancellationTokenProvider _cancellationTokenProvider;
|
|
|
|
|
private readonly ICurrentTenant _currentTenant;
|
|
|
|
|
|
|
|
|
|
public UnitOfWorkDbContextProvider(
|
|
|
|
|
IUnitOfWorkManager unitOfWorkManager,
|
|
|
|
|
IConnectionStringResolver connectionStringResolver,
|
|
|
|
|
ICancellationTokenProvider cancellationTokenProvider)
|
|
|
|
|
ICancellationTokenProvider cancellationTokenProvider,
|
|
|
|
|
ICurrentTenant currentTenant)
|
|
|
|
|
{
|
|
|
|
|
_unitOfWorkManager = unitOfWorkManager;
|
|
|
|
|
_connectionStringResolver = connectionStringResolver;
|
|
|
|
|
_cancellationTokenProvider = cancellationTokenProvider;
|
|
|
|
|
_currentTenant = currentTenant;
|
|
|
|
|
|
|
|
|
|
Logger = NullLogger<UnitOfWorkDbContextProvider<TDbContext>>.Instance;
|
|
|
|
|
}
|
|
|
|
|
@ -57,7 +61,7 @@ namespace Volo.Abp.Uow.EntityFrameworkCore
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var connectionStringName = ConnectionStringNameAttribute.GetConnStringName<TDbContext>();
|
|
|
|
|
var connectionString = _connectionStringResolver.Resolve(connectionStringName);
|
|
|
|
|
var connectionString = ResolveConnectionString(connectionStringName);
|
|
|
|
|
|
|
|
|
|
var dbContextKey = $"{typeof(TDbContext).FullName}_{connectionString}";
|
|
|
|
|
|
|
|
|
|
@ -79,7 +83,7 @@ namespace Volo.Abp.Uow.EntityFrameworkCore
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var connectionStringName = ConnectionStringNameAttribute.GetConnStringName<TDbContext>();
|
|
|
|
|
var connectionString = await _connectionStringResolver.ResolveAsync(connectionStringName);
|
|
|
|
|
var connectionString = await ResolveConnectionStringAsync(connectionStringName);
|
|
|
|
|
|
|
|
|
|
var dbContextKey = $"{typeof(TDbContext).FullName}_{connectionString}";
|
|
|
|
|
|
|
|
|
|
@ -241,6 +245,35 @@ namespace Volo.Abp.Uow.EntityFrameworkCore
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private async Task<string> ResolveConnectionStringAsync(string connectionStringName)
|
|
|
|
|
{
|
|
|
|
|
// Multi-tenancy unaware contexts should always use the host connection string
|
|
|
|
|
if (typeof(TDbContext).IsDefined(typeof(IgnoreMultiTenancyAttribute), false))
|
|
|
|
|
{
|
|
|
|
|
using (_currentTenant.Change(null))
|
|
|
|
|
{
|
|
|
|
|
return await _connectionStringResolver.ResolveAsync(connectionStringName);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return await _connectionStringResolver.ResolveAsync(connectionStringName);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Obsolete("Use ResolveConnectionStringAsync method.")]
|
|
|
|
|
private string ResolveConnectionString(string connectionStringName)
|
|
|
|
|
{
|
|
|
|
|
// Multi-tenancy unaware contexts should always use the host connection string
|
|
|
|
|
if (typeof(TDbContext).IsDefined(typeof(IgnoreMultiTenancyAttribute), false))
|
|
|
|
|
{
|
|
|
|
|
using (_currentTenant.Change(null))
|
|
|
|
|
{
|
|
|
|
|
return _connectionStringResolver.Resolve(connectionStringName);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return _connectionStringResolver.Resolve(connectionStringName);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected virtual CancellationToken GetCancellationToken(CancellationToken preferredValue = default)
|
|
|
|
|
{
|
|
|
|
|
return _cancellationTokenProvider.FallbackToProvider(preferredValue);
|
|
|
|
|
|