Browse Source

Resolved #8890: Get connection string name from the replaced dbcontext

pull/8893/head
Halil İbrahim Kalkan 5 years ago
parent
commit
c4e92a3431
  1. 17
      framework/src/Volo.Abp.Data/Volo/Abp/Data/IConnectionStringResolverExtensions.cs
  2. 9
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs
  3. 16
      framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs

17
framework/src/Volo.Abp.Data/Volo/Abp/Data/IConnectionStringResolverExtensions.cs

@ -10,13 +10,26 @@ namespace Volo.Abp.Data
[Obsolete("Use ResolveAsync method")]
public static string Resolve<T>(this IConnectionStringResolver resolver)
{
return resolver.Resolve(ConnectionStringNameAttribute.GetConnStringName<T>());
return resolver.Resolve(typeof(T));
}
[NotNull]
public static Task<string> ResolveAsync<T>(this IConnectionStringResolver resolver)
{
return resolver.ResolveAsync(ConnectionStringNameAttribute.GetConnStringName<T>());
return resolver.ResolveAsync(typeof(T));
}
[NotNull]
[Obsolete("Use ResolveAsync method")]
public static string Resolve(this IConnectionStringResolver resolver, Type type)
{
return resolver.Resolve(ConnectionStringNameAttribute.GetConnStringName(type));
}
[NotNull]
public static Task<string> ResolveAsync(this IConnectionStringResolver resolver, Type type)
{
return resolver.ResolveAsync(ConnectionStringNameAttribute.GetConnStringName(type));
}
}
}

9
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs

@ -62,10 +62,9 @@ namespace Volo.Abp.Uow.EntityFrameworkCore
throw new AbpException("A DbContext can only be created inside a unit of work!");
}
var connectionStringName = ConnectionStringNameAttribute.GetConnStringName<TDbContext>();
var connectionString = ResolveConnectionString(connectionStringName);
var targetDbContextType = _options.GetReplacedTypeOrSelf(typeof(TDbContext));
var connectionStringName = ConnectionStringNameAttribute.GetConnStringName(targetDbContextType);
var connectionString = ResolveConnectionString(connectionStringName);
var dbContextKey = $"{targetDbContextType.FullName}_{connectionString}";
var databaseApi = unitOfWork.GetOrAddDatabaseApi(
@ -85,10 +84,10 @@ namespace Volo.Abp.Uow.EntityFrameworkCore
throw new AbpException("A DbContext can only be created inside a unit of work!");
}
var connectionStringName = ConnectionStringNameAttribute.GetConnStringName<TDbContext>();
var targetDbContextType = _options.GetReplacedTypeOrSelf(typeof(TDbContext));
var connectionStringName = ConnectionStringNameAttribute.GetConnStringName(targetDbContextType);
var connectionString = await ResolveConnectionStringAsync(connectionStringName);
var targetDbContextType = _options.GetReplacedTypeOrSelf(typeof(TDbContext));
var dbContextKey = $"{targetDbContextType.FullName}_{connectionString}";
var databaseApi = unitOfWork.FindDatabaseApi(dbContextKey);

16
framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs

@ -62,8 +62,8 @@ namespace Volo.Abp.Uow.MongoDB
$"A {nameof(IMongoDatabase)} instance can only be created inside a unit of work!");
}
var connectionString = ResolveConnectionString();
var targetDbContextType = _options.GetReplacedTypeOrSelf(typeof(TMongoDbContext));
var connectionString = ResolveConnectionString(targetDbContextType);
var dbContextKey = $"{targetDbContextType.FullName}_{connectionString}";
var mongoUrl = new MongoUrl(connectionString);
@ -90,8 +90,8 @@ namespace Volo.Abp.Uow.MongoDB
$"A {nameof(IMongoDatabase)} instance can only be created inside a unit of work!");
}
var connectionString = await ResolveConnectionStringAsync();
var targetDbContextType = _options.GetReplacedTypeOrSelf(typeof(TMongoDbContext));
var connectionString = await ResolveConnectionStringAsync(targetDbContextType);
var dbContextKey = $"{targetDbContextType.FullName}_{connectionString}";
var mongoUrl = new MongoUrl(connectionString);
@ -244,33 +244,33 @@ namespace Volo.Abp.Uow.MongoDB
return dbContext;
}
private async Task<string> ResolveConnectionStringAsync()
private async Task<string> ResolveConnectionStringAsync(Type dbContextType)
{
// Multi-tenancy unaware contexts should always use the host connection string
if (typeof(TMongoDbContext).IsDefined(typeof(IgnoreMultiTenancyAttribute), false))
{
using (_currentTenant.Change(null))
{
return await _connectionStringResolver.ResolveAsync<TMongoDbContext>();
return await _connectionStringResolver.ResolveAsync(dbContextType);
}
}
return await _connectionStringResolver.ResolveAsync<TMongoDbContext>();
return await _connectionStringResolver.ResolveAsync(dbContextType);
}
[Obsolete("Use ResolveConnectionStringAsync method.")]
private string ResolveConnectionString()
private string ResolveConnectionString(Type dbContextType)
{
// Multi-tenancy unaware contexts should always use the host connection string
if (typeof(TMongoDbContext).IsDefined(typeof(IgnoreMultiTenancyAttribute), false))
{
using (_currentTenant.Change(null))
{
return _connectionStringResolver.Resolve<TMongoDbContext>();
return _connectionStringResolver.Resolve(dbContextType);
}
}
return _connectionStringResolver.Resolve<TMongoDbContext>();
return _connectionStringResolver.Resolve(dbContextType);
}
protected virtual CancellationToken GetCancellationToken(CancellationToken preferredValue = default)

Loading…
Cancel
Save