Browse Source

Resolved #68: Rename DatabaseNameAttribute to ConnectionStringNameAttribute.

pull/81/head
Halil İbrahim Kalkan 10 years ago
parent
commit
0d9f95d050
  1. 2
      src/AbpDesk/AbpDesk.EntityFrameworkCore/AbpDesk/EntityFrameworkCore/AbpDeskDbContext.cs
  2. 10
      src/Volo.Abp.EntityFrameworkCore/Microsoft/Extensions/DependencyInjection/AbpDbContextConfigurationContext.cs
  3. 4
      src/Volo.Abp.EntityFrameworkCore/Microsoft/Extensions/DependencyInjection/DbContextOptionsFactory.cs
  4. 2
      src/Volo.Abp.MultiTenancy/Volo/Abp/Data/MultiTenancy/ITenantConnectionStringStore.cs
  5. 10
      src/Volo.Abp.MultiTenancy/Volo/Abp/Data/MultiTenancy/MultiTenantConnectionStringResolver.cs
  6. 2
      src/Volo.Abp.MultiTenancy/Volo/Abp/Data/MultiTenancy/NullTenantConnectionStringStore.cs
  7. 36
      src/Volo.Abp/Volo/Abp/Data/ConnectionStringNameAttribute.cs
  8. 37
      src/Volo.Abp/Volo/Abp/Data/DatabaseNameAttribute.cs
  9. 6
      src/Volo.Abp/Volo/Abp/Data/DefaultConnectionStringResolver.cs
  10. 2
      src/Volo.Abp/Volo/Abp/Data/IConnectionStringResolver.cs
  11. 2
      src/Volo.Abp/Volo/Abp/Data/IConnectionStringResolverExtensions.cs
  12. 8
      test/Volo.Abp.MultiTenancy.Tests/Volo/Abp/Data/MultiTenancy/MultiTenantConnectionStringResolver_Tests.cs
  13. 34
      test/Volo.Abp.Tests/Volo/Abp/Data/ConnectionStringNameAttribute_Tests.cs
  14. 34
      test/Volo.Abp.Tests/Volo/Abp/Data/DatabaseNameAttribute_Tests.cs

2
src/AbpDesk/AbpDesk.EntityFrameworkCore/AbpDesk/EntityFrameworkCore/AbpDeskDbContext.cs

@ -5,7 +5,7 @@ using Volo.Abp.EntityFrameworkCore;
namespace AbpDesk.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<AbpDeskDbContext> public class AbpDeskDbContext : AbpDbContext<AbpDeskDbContext>
{ {
public DbSet<Ticket> Tickets { get; set; } public DbSet<Ticket> Tickets { get; set; }

10
src/Volo.Abp.EntityFrameworkCore/Microsoft/Extensions/DependencyInjection/AbpDbContextConfigurationContext.cs

@ -8,14 +8,14 @@ namespace Microsoft.Extensions.DependencyInjection
{ {
public string ConnectionString { get; } public string ConnectionString { get; }
public string DatabaseName { get; } public string ConnectionStringName { get; }
public DbContextOptionsBuilder DbContextOptions { get; protected set; } public DbContextOptionsBuilder DbContextOptions { get; protected set; }
public AbpDbContextConfigurationContext(string connectionString, [CanBeNull] string databaseName) public AbpDbContextConfigurationContext(string connectionString, [CanBeNull] string connectionStringName)
{ {
ConnectionString = connectionString; ConnectionString = connectionString;
DatabaseName = databaseName; ConnectionStringName = connectionStringName;
DbContextOptions = new DbContextOptionsBuilder(); DbContextOptions = new DbContextOptionsBuilder();
} }
} }
@ -25,8 +25,8 @@ namespace Microsoft.Extensions.DependencyInjection
{ {
public new DbContextOptionsBuilder<TDbContext> DbContextOptions => (DbContextOptionsBuilder<TDbContext>)base.DbContextOptions; public new DbContextOptionsBuilder<TDbContext> DbContextOptions => (DbContextOptionsBuilder<TDbContext>)base.DbContextOptions;
public AbpDbContextConfigurationContext(string connectionString, [CanBeNull] string databaseName) public AbpDbContextConfigurationContext(string connectionString, [CanBeNull] string connectionStringName)
: base(connectionString, databaseName) : base(connectionString, connectionStringName)
{ {
base.DbContextOptions = new DbContextOptionsBuilder<TDbContext>(); base.DbContextOptions = new DbContextOptionsBuilder<TDbContext>();
} }

4
src/Volo.Abp.EntityFrameworkCore/Microsoft/Extensions/DependencyInjection/DbContextOptionsFactory.cs

@ -13,13 +13,13 @@ namespace Microsoft.Extensions.DependencyInjection
public static DbContextOptions<TDbContext> Create<TDbContext>(IServiceProvider serviceProvider) public static DbContextOptions<TDbContext> Create<TDbContext>(IServiceProvider serviceProvider)
where TDbContext : AbpDbContext<TDbContext> where TDbContext : AbpDbContext<TDbContext>
{ {
var databaseName = DatabaseNameAttribute.GetDatabaseName<TDbContext>(); var connectionStringName = ConnectionStringNameAttribute.GetConnStringName<TDbContext>();
using (var scope = serviceProvider.CreateScope()) using (var scope = serviceProvider.CreateScope())
{ {
var connInfoResolver = scope.ServiceProvider.GetRequiredService<IConnectionStringResolver>(); var connInfoResolver = scope.ServiceProvider.GetRequiredService<IConnectionStringResolver>();
var context = new AbpDbContextConfigurationContext<TDbContext>(connInfoResolver.Resolve(databaseName), databaseName); var context = new AbpDbContextConfigurationContext<TDbContext>(connInfoResolver.Resolve(connectionStringName), connectionStringName);
var dbContextOptions = scope.ServiceProvider.GetRequiredService<IOptions<AbpDbContextOptions>>().Value; var dbContextOptions = scope.ServiceProvider.GetRequiredService<IOptions<AbpDbContextOptions>>().Value;

2
src/Volo.Abp.MultiTenancy/Volo/Abp/Data/MultiTenancy/ITenantConnectionStringStore.cs

@ -5,6 +5,6 @@ namespace Volo.Abp.Data.MultiTenancy
public interface ITenantConnectionStringStore public interface ITenantConnectionStringStore
{ {
[CanBeNull] [CanBeNull]
string GetConnectionStringOrNull([NotNull] string tenantId, [CanBeNull] string databaseName); string GetConnectionStringOrNull([NotNull] string tenantId, [CanBeNull] string connStringName);
} }
} }

10
src/Volo.Abp.MultiTenancy/Volo/Abp/Data/MultiTenancy/MultiTenantConnectionStringResolver.cs

@ -23,21 +23,21 @@ namespace Volo.Abp.Data.MultiTenancy
_tenantConnectionStringStore = tenantConnectionStringStore; _tenantConnectionStringStore = tenantConnectionStringStore;
} }
public override string Resolve(string databaseName = null) public override string Resolve(string connectionStringName = null)
{ {
var tenant = _multiTenancyManager.CurrentTenant; var tenant = _multiTenancyManager.CurrentTenant;
if (tenant == null) 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) 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; return connectionString;
} }

2
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 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 //No tenant specific connection string by default
return null; return null;

36
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<T>()
{
return GetConnStringName(typeof(T));
}
public static string GetConnStringName(Type type)
{
var nameAttribute = type.GetTypeInfo().GetCustomAttribute<ConnectionStringNameAttribute>();
if (nameAttribute == null)
{
return type.FullName;
}
return nameAttribute.Name;
}
}
}

37
src/Volo.Abp/Volo/Abp/Data/DatabaseNameAttribute.cs

@ -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<T>()
{
return GetDatabaseName(typeof(T));
}
public static string GetDatabaseName(Type type)
{
var databaseNameAttribute = type.GetTypeInfo().GetCustomAttribute<DatabaseNameAttribute>();
if (databaseNameAttribute == null)
{
return type.FullName;
}
return databaseNameAttribute.Name;
}
}
}

6
src/Volo.Abp/Volo/Abp/Data/DefaultConnectionStringResolver.cs

@ -14,12 +14,12 @@ namespace Volo.Abp.Data
_options = options.Value; _options = options.Value;
} }
public virtual string Resolve(string databaseName = null) public virtual string Resolve(string connectionStringName = null)
{ {
//Get module specific value if provided //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()) if (!moduleConnString.IsNullOrEmpty())
{ {
return moduleConnString; return moduleConnString;

2
src/Volo.Abp/Volo/Abp/Data/IConnectionStringResolver.cs

@ -2,6 +2,6 @@
{ {
public interface IConnectionStringResolver public interface IConnectionStringResolver
{ {
string Resolve(string databaseName = null); string Resolve(string connectionStringName = null);
} }
} }

2
src/Volo.Abp/Volo/Abp/Data/IConnectionStringResolverExtensions.cs

@ -4,7 +4,7 @@
{ {
public static string Resolve<T>(this IConnectionStringResolver resolver) public static string Resolve<T>(this IConnectionStringResolver resolver)
{ {
return resolver.Resolve(DatabaseNameAttribute.GetDatabaseName<T>()); return resolver.Resolve(ConnectionStringNameAttribute.GetConnStringName<T>());
} }
} }
} }

8
test/Volo.Abp.MultiTenancy.Tests/Volo/Abp/Data/MultiTenancy/MultiTenantConnectionStringResolver_Tests.cs

@ -71,13 +71,13 @@ namespace Volo.Abp.Data.MultiTenancy
_options = options; _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 else

34
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<MyClassWithoutConnStringName>()
.ShouldBe(typeof(MyClassWithoutConnStringName).FullName);
}
[Fact]
public void Should_Get_ConnStringName_If_Not_Specified()
{
ConnectionStringNameAttribute
.GetConnStringName<MyClassWithConnStringName>()
.ShouldBe("MyDb");
}
private class MyClassWithoutConnStringName
{
}
[ConnectionStringName("MyDb")]
private class MyClassWithConnStringName
{
}
}
}

34
test/Volo.Abp.Tests/Volo/Abp/Data/DatabaseNameAttribute_Tests.cs

@ -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<MyClassWithoutDatabaseName>()
.ShouldBe(typeof(MyClassWithoutDatabaseName).FullName);
}
[Fact]
public void Should_Get_DatabaseName_If_Not_Specified()
{
DatabaseNameAttribute
.GetDatabaseName<MyClassWithDatabaseName>()
.ShouldBe("MyDb");
}
private class MyClassWithoutDatabaseName
{
}
[DatabaseName("MyDb")]
private class MyClassWithDatabaseName
{
}
}
}
Loading…
Cancel
Save