diff --git a/src/AbpDesk/AbpDesk.EntityFrameworkCore/AbpDesk/EntityFrameworkCore/AbpDeskDbContext.cs b/src/AbpDesk/AbpDesk.EntityFrameworkCore/AbpDesk/EntityFrameworkCore/AbpDeskDbContext.cs index 2cca0c2af8..de2bbce239 100644 --- a/src/AbpDesk/AbpDesk.EntityFrameworkCore/AbpDesk/EntityFrameworkCore/AbpDeskDbContext.cs +++ b/src/AbpDesk/AbpDesk.EntityFrameworkCore/AbpDesk/EntityFrameworkCore/AbpDeskDbContext.cs @@ -5,7 +5,7 @@ using Volo.Abp.EntityFrameworkCore; namespace AbpDesk.EntityFrameworkCore { - [DatabaseName(ConnectionStrings.DefaultConnectionStringName)] //Explicitly declares this module always uses the default connection string + [ConnectionStringName(ConnectionStrings.DefaultConnectionStringName)] //Explicitly declares this module always uses the default connection string public class AbpDeskDbContext : AbpDbContext { public DbSet Tickets { get; set; } diff --git a/src/Volo.Abp.EntityFrameworkCore/Microsoft/Extensions/DependencyInjection/AbpDbContextConfigurationContext.cs b/src/Volo.Abp.EntityFrameworkCore/Microsoft/Extensions/DependencyInjection/AbpDbContextConfigurationContext.cs index f97a057edf..e9c5467c4c 100644 --- a/src/Volo.Abp.EntityFrameworkCore/Microsoft/Extensions/DependencyInjection/AbpDbContextConfigurationContext.cs +++ b/src/Volo.Abp.EntityFrameworkCore/Microsoft/Extensions/DependencyInjection/AbpDbContextConfigurationContext.cs @@ -8,14 +8,14 @@ namespace Microsoft.Extensions.DependencyInjection { public string ConnectionString { get; } - public string DatabaseName { get; } + public string ConnectionStringName { get; } public DbContextOptionsBuilder DbContextOptions { get; protected set; } - public AbpDbContextConfigurationContext(string connectionString, [CanBeNull] string databaseName) + public AbpDbContextConfigurationContext(string connectionString, [CanBeNull] string connectionStringName) { ConnectionString = connectionString; - DatabaseName = databaseName; + ConnectionStringName = connectionStringName; DbContextOptions = new DbContextOptionsBuilder(); } } @@ -25,8 +25,8 @@ namespace Microsoft.Extensions.DependencyInjection { public new DbContextOptionsBuilder DbContextOptions => (DbContextOptionsBuilder)base.DbContextOptions; - public AbpDbContextConfigurationContext(string connectionString, [CanBeNull] string databaseName) - : base(connectionString, databaseName) + public AbpDbContextConfigurationContext(string connectionString, [CanBeNull] string connectionStringName) + : base(connectionString, connectionStringName) { base.DbContextOptions = new DbContextOptionsBuilder(); } diff --git a/src/Volo.Abp.EntityFrameworkCore/Microsoft/Extensions/DependencyInjection/DbContextOptionsFactory.cs b/src/Volo.Abp.EntityFrameworkCore/Microsoft/Extensions/DependencyInjection/DbContextOptionsFactory.cs index 821ed95201..a45c43926e 100644 --- a/src/Volo.Abp.EntityFrameworkCore/Microsoft/Extensions/DependencyInjection/DbContextOptionsFactory.cs +++ b/src/Volo.Abp.EntityFrameworkCore/Microsoft/Extensions/DependencyInjection/DbContextOptionsFactory.cs @@ -13,13 +13,13 @@ namespace Microsoft.Extensions.DependencyInjection public static DbContextOptions Create(IServiceProvider serviceProvider) where TDbContext : AbpDbContext { - var databaseName = DatabaseNameAttribute.GetDatabaseName(); + var connectionStringName = ConnectionStringNameAttribute.GetConnStringName(); using (var scope = serviceProvider.CreateScope()) { var connInfoResolver = scope.ServiceProvider.GetRequiredService(); - var context = new AbpDbContextConfigurationContext(connInfoResolver.Resolve(databaseName), databaseName); + var context = new AbpDbContextConfigurationContext(connInfoResolver.Resolve(connectionStringName), connectionStringName); var dbContextOptions = scope.ServiceProvider.GetRequiredService>().Value; diff --git a/src/Volo.Abp.MultiTenancy/Volo/Abp/Data/MultiTenancy/ITenantConnectionStringStore.cs b/src/Volo.Abp.MultiTenancy/Volo/Abp/Data/MultiTenancy/ITenantConnectionStringStore.cs index c9a6359562..41701d0720 100644 --- a/src/Volo.Abp.MultiTenancy/Volo/Abp/Data/MultiTenancy/ITenantConnectionStringStore.cs +++ b/src/Volo.Abp.MultiTenancy/Volo/Abp/Data/MultiTenancy/ITenantConnectionStringStore.cs @@ -5,6 +5,6 @@ namespace Volo.Abp.Data.MultiTenancy public interface ITenantConnectionStringStore { [CanBeNull] - string GetConnectionStringOrNull([NotNull] string tenantId, [CanBeNull] string databaseName); + string GetConnectionStringOrNull([NotNull] string tenantId, [CanBeNull] string connStringName); } } \ No newline at end of file diff --git a/src/Volo.Abp.MultiTenancy/Volo/Abp/Data/MultiTenancy/MultiTenantConnectionStringResolver.cs b/src/Volo.Abp.MultiTenancy/Volo/Abp/Data/MultiTenancy/MultiTenantConnectionStringResolver.cs index 3f4c6a6485..1c0e319948 100644 --- a/src/Volo.Abp.MultiTenancy/Volo/Abp/Data/MultiTenancy/MultiTenantConnectionStringResolver.cs +++ b/src/Volo.Abp.MultiTenancy/Volo/Abp/Data/MultiTenancy/MultiTenantConnectionStringResolver.cs @@ -23,21 +23,21 @@ namespace Volo.Abp.Data.MultiTenancy _tenantConnectionStringStore = tenantConnectionStringStore; } - public override string Resolve(string databaseName = null) + public override string Resolve(string connectionStringName = null) { var tenant = _multiTenancyManager.CurrentTenant; if (tenant == null) { - return base.Resolve(databaseName); + return base.Resolve(connectionStringName); } - var connectionString = _tenantConnectionStringStore.GetConnectionStringOrNull(tenant.Id, databaseName); + var connectionString = _tenantConnectionStringStore.GetConnectionStringOrNull(tenant.Id, connectionStringName); if (connectionString == null) { - return base.Resolve(databaseName); + return base.Resolve(connectionStringName); } - //TODO: If given tenant did not specified a databaseName specific connection string, then use the default connection string for databaseName, not tenant's default database + //TODO: If given tenant did not specified a connectionStringName specific connection string, then use the default connection string for connectionStringName, not tenant's default database return connectionString; } diff --git a/src/Volo.Abp.MultiTenancy/Volo/Abp/Data/MultiTenancy/NullTenantConnectionStringStore.cs b/src/Volo.Abp.MultiTenancy/Volo/Abp/Data/MultiTenancy/NullTenantConnectionStringStore.cs index a53f6c0b48..b7cf52fb62 100644 --- a/src/Volo.Abp.MultiTenancy/Volo/Abp/Data/MultiTenancy/NullTenantConnectionStringStore.cs +++ b/src/Volo.Abp.MultiTenancy/Volo/Abp/Data/MultiTenancy/NullTenantConnectionStringStore.cs @@ -4,7 +4,7 @@ namespace Volo.Abp.Data.MultiTenancy { public sealed class NullTenantConnectionStringStore : ITenantConnectionStringStore, ISingletonDependency { - public string GetConnectionStringOrNull(string tenantId, string databaseName) + public string GetConnectionStringOrNull(string tenantId, string connStringName) { //No tenant specific connection string by default return null; diff --git a/src/Volo.Abp/Volo/Abp/Data/ConnectionStringNameAttribute.cs b/src/Volo.Abp/Volo/Abp/Data/ConnectionStringNameAttribute.cs new file mode 100644 index 0000000000..a61ef0e2b4 --- /dev/null +++ b/src/Volo.Abp/Volo/Abp/Data/ConnectionStringNameAttribute.cs @@ -0,0 +1,36 @@ +using System; +using System.Reflection; +using JetBrains.Annotations; + +namespace Volo.Abp.Data +{ + public class ConnectionStringNameAttribute : Attribute + { + [NotNull] + public string Name { get; } + + public ConnectionStringNameAttribute([NotNull] string name) + { + Check.NotNull(name, nameof(name)); + + Name = name; + } + + public static string GetConnStringName() + { + return GetConnStringName(typeof(T)); + } + + public static string GetConnStringName(Type type) + { + var nameAttribute = type.GetTypeInfo().GetCustomAttribute(); + + if (nameAttribute == null) + { + return type.FullName; + } + + return nameAttribute.Name; + } + } +} \ No newline at end of file diff --git a/src/Volo.Abp/Volo/Abp/Data/DatabaseNameAttribute.cs b/src/Volo.Abp/Volo/Abp/Data/DatabaseNameAttribute.cs deleted file mode 100644 index 88a14363a7..0000000000 --- a/src/Volo.Abp/Volo/Abp/Data/DatabaseNameAttribute.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using System.Reflection; -using JetBrains.Annotations; - -namespace Volo.Abp.Data -{ - //TODO: Rename DatabaseNameAttribute to ConnectionStringNameAttribute - public class DatabaseNameAttribute : Attribute - { - [NotNull] - public string Name { get; } - - public DatabaseNameAttribute([NotNull] string name) - { - Check.NotNull(name, nameof(name)); - - Name = name; - } - - public static string GetDatabaseName() - { - return GetDatabaseName(typeof(T)); - } - - public static string GetDatabaseName(Type type) - { - var databaseNameAttribute = type.GetTypeInfo().GetCustomAttribute(); - - if (databaseNameAttribute == null) - { - return type.FullName; - } - - return databaseNameAttribute.Name; - } - } -} \ No newline at end of file diff --git a/src/Volo.Abp/Volo/Abp/Data/DefaultConnectionStringResolver.cs b/src/Volo.Abp/Volo/Abp/Data/DefaultConnectionStringResolver.cs index 26aef9e0c3..975324ebea 100644 --- a/src/Volo.Abp/Volo/Abp/Data/DefaultConnectionStringResolver.cs +++ b/src/Volo.Abp/Volo/Abp/Data/DefaultConnectionStringResolver.cs @@ -14,12 +14,12 @@ namespace Volo.Abp.Data _options = options.Value; } - public virtual string Resolve(string databaseName = null) + public virtual string Resolve(string connectionStringName = null) { //Get module specific value if provided - if (!databaseName.IsNullOrEmpty()) + if (!connectionStringName.IsNullOrEmpty()) { - var moduleConnString = _options.ConnectionStrings.GetOrDefault(databaseName); + var moduleConnString = _options.ConnectionStrings.GetOrDefault(connectionStringName); if (!moduleConnString.IsNullOrEmpty()) { return moduleConnString; diff --git a/src/Volo.Abp/Volo/Abp/Data/IConnectionStringResolver.cs b/src/Volo.Abp/Volo/Abp/Data/IConnectionStringResolver.cs index ddf23997b0..2433648aae 100644 --- a/src/Volo.Abp/Volo/Abp/Data/IConnectionStringResolver.cs +++ b/src/Volo.Abp/Volo/Abp/Data/IConnectionStringResolver.cs @@ -2,6 +2,6 @@ { public interface IConnectionStringResolver { - string Resolve(string databaseName = null); + string Resolve(string connectionStringName = null); } } diff --git a/src/Volo.Abp/Volo/Abp/Data/IConnectionStringResolverExtensions.cs b/src/Volo.Abp/Volo/Abp/Data/IConnectionStringResolverExtensions.cs index 0ecfc01665..e3a89e24e8 100644 --- a/src/Volo.Abp/Volo/Abp/Data/IConnectionStringResolverExtensions.cs +++ b/src/Volo.Abp/Volo/Abp/Data/IConnectionStringResolverExtensions.cs @@ -4,7 +4,7 @@ { public static string Resolve(this IConnectionStringResolver resolver) { - return resolver.Resolve(DatabaseNameAttribute.GetDatabaseName()); + return resolver.Resolve(ConnectionStringNameAttribute.GetConnStringName()); } } } diff --git a/test/Volo.Abp.MultiTenancy.Tests/Volo/Abp/Data/MultiTenancy/MultiTenantConnectionStringResolver_Tests.cs b/test/Volo.Abp.MultiTenancy.Tests/Volo/Abp/Data/MultiTenancy/MultiTenantConnectionStringResolver_Tests.cs index ab7646695f..f9da6f83b3 100644 --- a/test/Volo.Abp.MultiTenancy.Tests/Volo/Abp/Data/MultiTenancy/MultiTenantConnectionStringResolver_Tests.cs +++ b/test/Volo.Abp.MultiTenancy.Tests/Volo/Abp/Data/MultiTenancy/MultiTenantConnectionStringResolver_Tests.cs @@ -71,13 +71,13 @@ namespace Volo.Abp.Data.MultiTenancy _options = options; } - public string GetConnectionStringOrNull(string tenantId, string databaseName) + public string GetConnectionStringOrNull(string tenantId, string connStringName) { - if (databaseName != null) + if (connStringName != null) { - if (_options.Value.ConnectionStrings.ContainsKey(tenantId + "#" + databaseName)) + if (_options.Value.ConnectionStrings.ContainsKey(tenantId + "#" + connStringName)) { - return _options.Value.ConnectionStrings[tenantId + "#" + databaseName]; + return _options.Value.ConnectionStrings[tenantId + "#" + connStringName]; } } else diff --git a/test/Volo.Abp.Tests/Volo/Abp/Data/ConnectionStringNameAttribute_Tests.cs b/test/Volo.Abp.Tests/Volo/Abp/Data/ConnectionStringNameAttribute_Tests.cs new file mode 100644 index 0000000000..b50e9ae78b --- /dev/null +++ b/test/Volo.Abp.Tests/Volo/Abp/Data/ConnectionStringNameAttribute_Tests.cs @@ -0,0 +1,34 @@ +using Shouldly; +using Xunit; + +namespace Volo.Abp.Data +{ + public class ConnectionStringNameAttribute_Tests + { + [Fact] + public void Should_Get_Class_FullName_If_Not_ConnStringNameAttribute_Specified() + { + ConnectionStringNameAttribute + .GetConnStringName() + .ShouldBe(typeof(MyClassWithoutConnStringName).FullName); + } + + [Fact] + public void Should_Get_ConnStringName_If_Not_Specified() + { + ConnectionStringNameAttribute + .GetConnStringName() + .ShouldBe("MyDb"); + } + private class MyClassWithoutConnStringName + { + + } + + [ConnectionStringName("MyDb")] + private class MyClassWithConnStringName + { + + } + } +} diff --git a/test/Volo.Abp.Tests/Volo/Abp/Data/DatabaseNameAttribute_Tests.cs b/test/Volo.Abp.Tests/Volo/Abp/Data/DatabaseNameAttribute_Tests.cs deleted file mode 100644 index 98651c3d7e..0000000000 --- a/test/Volo.Abp.Tests/Volo/Abp/Data/DatabaseNameAttribute_Tests.cs +++ /dev/null @@ -1,34 +0,0 @@ -using Shouldly; -using Xunit; - -namespace Volo.Abp.Data -{ - public class DatabaseNameAttribute_Tests - { - [Fact] - public void Should_Get_Class_FullName_If_Not_DatabaseNameAttribute_Specified() - { - DatabaseNameAttribute - .GetDatabaseName() - .ShouldBe(typeof(MyClassWithoutDatabaseName).FullName); - } - - [Fact] - public void Should_Get_DatabaseName_If_Not_Specified() - { - DatabaseNameAttribute - .GetDatabaseName() - .ShouldBe("MyDb"); - } - private class MyClassWithoutDatabaseName - { - - } - - [DatabaseName("MyDb")] - private class MyClassWithDatabaseName - { - - } - } -}