From c4e92a3431787b1a6727a615768a7a2906a9ba69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 5 May 2021 03:17:18 +0300 Subject: [PATCH] Resolved #8890: Get connection string name from the replaced dbcontext --- .../Data/IConnectionStringResolverExtensions.cs | 17 +++++++++++++++-- .../UnitOfWorkDbContextProvider.cs | 9 ++++----- .../MongoDB/UnitOfWorkMongoDbContextProvider.cs | 16 ++++++++-------- 3 files changed, 27 insertions(+), 15 deletions(-) diff --git a/framework/src/Volo.Abp.Data/Volo/Abp/Data/IConnectionStringResolverExtensions.cs b/framework/src/Volo.Abp.Data/Volo/Abp/Data/IConnectionStringResolverExtensions.cs index 1fa097964c..ceeaec8f8f 100644 --- a/framework/src/Volo.Abp.Data/Volo/Abp/Data/IConnectionStringResolverExtensions.cs +++ b/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(this IConnectionStringResolver resolver) { - return resolver.Resolve(ConnectionStringNameAttribute.GetConnStringName()); + return resolver.Resolve(typeof(T)); } [NotNull] public static Task ResolveAsync(this IConnectionStringResolver resolver) { - return resolver.ResolveAsync(ConnectionStringNameAttribute.GetConnStringName()); + 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 ResolveAsync(this IConnectionStringResolver resolver, Type type) + { + return resolver.ResolveAsync(ConnectionStringNameAttribute.GetConnStringName(type)); } } } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs index 2fa56b550b..e5e4c2584a 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs +++ b/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(); - 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(); + 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); diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs index a26307234d..2a3842441f 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs +++ b/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 ResolveConnectionStringAsync() + private async Task 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(); + return await _connectionStringResolver.ResolveAsync(dbContextType); } } - return await _connectionStringResolver.ResolveAsync(); + 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(); + return _connectionStringResolver.Resolve(dbContextType); } } - return _connectionStringResolver.Resolve(); + return _connectionStringResolver.Resolve(dbContextType); } protected virtual CancellationToken GetCancellationToken(CancellationToken preferredValue = default)