diff --git a/src/AbpDesk/AbpDesk.EntityFrameworkCore/AbpDesk/EntityFrameworkCore/AbpDeskDbContext.cs b/src/AbpDesk/AbpDesk.EntityFrameworkCore/AbpDesk/EntityFrameworkCore/AbpDeskDbContext.cs index 82e3e582b0..17d1eeaf57 100644 --- a/src/AbpDesk/AbpDesk.EntityFrameworkCore/AbpDesk/EntityFrameworkCore/AbpDeskDbContext.cs +++ b/src/AbpDesk/AbpDesk.EntityFrameworkCore/AbpDesk/EntityFrameworkCore/AbpDeskDbContext.cs @@ -26,7 +26,7 @@ namespace AbpDesk.EntityFrameworkCore { base.OnModelCreating(modelBuilder); - this.ConfigureAbpMultiTenancy(modelBuilder); + this.ConfigureMultiTenancy(modelBuilder); //Use different classes to map each entity type? modelBuilder.Entity(b => diff --git a/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUser.cs b/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUser.cs index 4e3b7097ec..1a6583b45e 100644 --- a/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUser.cs +++ b/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUser.cs @@ -253,12 +253,9 @@ namespace Volo.Abp.Identity Tokens.RemoveAll(t => t.LoginProvider == loginProvider && t.Name == name); } - /// - /// Returns the username for this user. - /// public override string ToString() { - return $"{base.ToString()} UserName = {UserName}"; + return $"{base.ToString()}, UserName = {UserName}"; } } } diff --git a/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EfCoreIdentityRoleRepository.cs b/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EfCoreIdentityRoleRepository.cs index 864db178e0..638edd970e 100644 --- a/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EfCoreIdentityRoleRepository.cs +++ b/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EfCoreIdentityRoleRepository.cs @@ -11,9 +11,9 @@ using System; namespace Volo.Abp.Identity { - public class EfCoreIdentityRoleRepository : EfCoreRepository, IIdentityRoleRepository + public class EfCoreIdentityRoleRepository : EfCoreRepository, IIdentityRoleRepository { - public EfCoreIdentityRoleRepository(IDbContextProvider dbContextProvider) + public EfCoreIdentityRoleRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) { } diff --git a/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EfCoreIdentityUserRepository.cs b/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EfCoreIdentityUserRepository.cs index a9e4c553df..2364fb1641 100644 --- a/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EfCoreIdentityUserRepository.cs +++ b/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EfCoreIdentityUserRepository.cs @@ -12,9 +12,9 @@ using Volo.Abp.Identity.EntityFrameworkCore; namespace Volo.Abp.Identity { - public class EfCoreIdentityUserRepository : EfCoreRepository, IIdentityUserRepository + public class EfCoreIdentityUserRepository : EfCoreRepository, IIdentityUserRepository { - public EfCoreIdentityUserRepository(IDbContextProvider dbContextProvider) + public EfCoreIdentityUserRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) { } diff --git a/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/AbpIdentityEntityFrameworkCoreModule.cs b/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/AbpIdentityEntityFrameworkCoreModule.cs index 9951d6564b..069bb22d78 100644 --- a/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/AbpIdentityEntityFrameworkCoreModule.cs +++ b/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/AbpIdentityEntityFrameworkCoreModule.cs @@ -11,7 +11,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore { services.AddAbpDbContext(options => { - options.AddDefaultRepositories(); + options.AddDefaultRepositories(); options.AddRepository(); options.AddRepository(); }); diff --git a/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IIdentityDbContext.cs b/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IIdentityDbContext.cs new file mode 100644 index 0000000000..03dd190a2d --- /dev/null +++ b/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IIdentityDbContext.cs @@ -0,0 +1,22 @@ +using Microsoft.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; + +namespace Volo.Abp.Identity.EntityFrameworkCore +{ + public interface IIdentityDbContext : IEfCoreDbContext + { + DbSet Users { get; set; } + + DbSet UserClaims { get; set; } + + DbSet UserLogins { get; set; } + + DbSet UserRoles { get; set; } + + DbSet UserTokens { get; set; } + + DbSet Roles { get; set; } + + DbSet RoleClaims { get; set; } + } +} \ No newline at end of file diff --git a/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContext.cs b/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContext.cs index 72a714542c..dd24a4bdcc 100644 --- a/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContext.cs +++ b/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContext.cs @@ -6,17 +6,11 @@ namespace Volo.Abp.Identity.EntityFrameworkCore /// /// Base class for the Entity Framework database context used for identity. /// - public class IdentityDbContext : AbpDbContext + public class IdentityDbContext : AbpDbContext, IIdentityDbContext { - /// - /// Initializes a new instance of . - /// - /// The options to be used by a . - public IdentityDbContext(DbContextOptions options) - : base(options) - { - - } + public static string TablePrefix { get; set; } = "Identity"; + + public static string Schema { get; set; } /// /// Gets or sets the of Users. @@ -53,6 +47,16 @@ namespace Volo.Abp.Identity.EntityFrameworkCore /// public DbSet RoleClaims { get; set; } + /// + /// Initializes a new instance of . + /// + /// The options to be used by a . + public IdentityDbContext(DbContextOptions options) + : base(options) + { + + } + /// /// Configures the schema needed for the identity framework. /// @@ -63,98 +67,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore { base.OnModelCreating(builder); - //TODO: Split configuration to dedicated classes (probably a resuable extension method) - - builder.Entity(b => - { - b.ToTable("IdentityUsers"); //TODO: Make all table and schema names changeable - - b.Property(u => u.UserName).IsRequired().HasMaxLength(IdentityUserConsts.MaxUserNameLength); - b.Property(u => u.NormalizedUserName).IsRequired().HasMaxLength(IdentityUserConsts.MaxNormalizedUserNameLength); - b.Property(u => u.Email).HasMaxLength(IdentityUserConsts.MaxEmailLength); - b.Property(u => u.NormalizedEmail).HasMaxLength(IdentityUserConsts.MaxNormalizedEmailLength); - b.Property(u => u.PhoneNumber).HasMaxLength(IdentityUserConsts.MaxPhoneNumberLength); - b.Property(u => u.PasswordHash).HasMaxLength(IdentityUserConsts.MaxPasswordHashLength); - b.Property(u => u.SecurityStamp).IsRequired().HasMaxLength(IdentityUserConsts.MaxSecurityStampLength); - b.Property(u => u.ConcurrencyStamp).IsRequired().HasMaxLength(IdentityUserConsts.MaxConcurrencyStampLength); - b.Property(u => u.EmailConfirmed).HasDefaultValue(false); - b.Property(u => u.PhoneNumberConfirmed).HasDefaultValue(false); - b.Property(u => u.TwoFactorEnabled).HasDefaultValue(false); - b.Property(u => u.LockoutEnabled).HasDefaultValue(false); - b.Property(u => u.AccessFailedCount).HasDefaultValue(0); - - b.HasMany(u => u.Claims).WithOne().HasForeignKey(uc => uc.UserId).IsRequired(); - b.HasMany(u => u.Logins).WithOne().HasForeignKey(ul => ul.UserId).IsRequired(); - b.HasMany(u => u.Roles).WithOne().HasForeignKey(ur => ur.UserId).IsRequired(); - b.HasMany(u => u.Tokens).WithOne().HasForeignKey(ur => ur.UserId).IsRequired(); - - b.HasIndex(u => u.NormalizedUserName); - b.HasIndex(u => u.NormalizedEmail); - }); - - builder.Entity(b => - { - b.ToTable("IdentityRoles"); - - b.Property(r => r.Name).IsRequired().HasMaxLength(IdentityRoleConsts.MaxNameLength); - b.Property(r => r.NormalizedName).IsRequired().HasMaxLength(IdentityRoleConsts.MaxNormalizedNameLength); - - b.HasMany(r => r.Claims).WithOne().HasForeignKey(rc => rc.RoleId).IsRequired(); - - b.HasIndex(r => r.NormalizedName); - }); - - builder.Entity(b => - { - b.ToTable("IdentityUserClaims"); - - b.Property(uc => uc.ClaimType).HasMaxLength(IdentityUserClaimConsts.MaxClaimTypeLength).IsRequired(); - b.Property(uc => uc.ClaimValue).HasMaxLength(IdentityUserClaimConsts.MaxClaimValueLength); - - b.HasIndex(uc => uc.UserId); - }); - - builder.Entity(b => - { - b.ToTable("IdentityRoleClaims"); - - b.Property(uc => uc.ClaimType).HasMaxLength(IdentityRoleClaimConsts.MaxClaimTypeLength).IsRequired(); - b.Property(uc => uc.ClaimValue).HasMaxLength(IdentityRoleClaimConsts.MaxClaimValueLength); - - b.HasIndex(uc => uc.RoleId); - }); - - builder.Entity(b => - { - b.ToTable("IdentityUserRoles"); - - b.HasOne().WithMany().HasForeignKey(ur => ur.RoleId).IsRequired(); - b.HasOne().WithMany(u => u.Roles).HasForeignKey(ur => ur.UserId).IsRequired(); - - b.HasIndex(ur => new { ur.UserId, ur.RoleId }); - b.HasIndex(ur => new { ur.RoleId, ur.UserId }); - }); - - builder.Entity(b => - { - b.ToTable("IdentityUserLogins"); - - b.Property(ul => ul.LoginProvider).HasMaxLength(IdentityUserLoginConsts.MaxLoginProviderLength).IsRequired(); - b.Property(ul => ul.ProviderKey).HasMaxLength(IdentityUserLoginConsts.MaxProviderKeyLength).IsRequired(); - b.Property(ul => ul.ProviderDisplayName).HasMaxLength(IdentityUserLoginConsts.MaxProviderDisplayNameLength); - - b.HasIndex(l => new { l.UserId, l.LoginProvider, l.ProviderKey }); - b.HasIndex(l => new { l.LoginProvider, l.ProviderKey }); - }); - - builder.Entity(b => - { - b.ToTable("IdentityUserTokens"); - - b.Property(ul => ul.LoginProvider).HasMaxLength(IdentityUserTokenConsts.MaxLoginProviderLength).IsRequired(); - - b.HasIndex(l => new { l.UserId, l.LoginProvider, l.Name }); - }); + this.ConfigureIdentity(builder, TablePrefix, Schema); } } } \ No newline at end of file diff --git a/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContextModelBuilderExtensions.cs b/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContextModelBuilderExtensions.cs new file mode 100644 index 0000000000..98fbfd55f5 --- /dev/null +++ b/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContextModelBuilderExtensions.cs @@ -0,0 +1,108 @@ +using System; +using JetBrains.Annotations; +using Microsoft.EntityFrameworkCore; + +namespace Volo.Abp.Identity.EntityFrameworkCore +{ + public static class IdentityDbContextModelBuilderExtensions + { + public static void ConfigureIdentity(this IIdentityDbContext dbContext, ModelBuilder builder, string tablePrefix = "", [CanBeNull] string schema = null) + { + if (tablePrefix.IsNullOrWhiteSpace()) + { + tablePrefix = ""; + } + + builder.Entity(b => + { + b.ToTable(tablePrefix + "Users", schema); + + b.Property(u => u.UserName).IsRequired().HasMaxLength(IdentityUserConsts.MaxUserNameLength); + b.Property(u => u.NormalizedUserName).IsRequired().HasMaxLength(IdentityUserConsts.MaxNormalizedUserNameLength); + b.Property(u => u.Email).HasMaxLength(IdentityUserConsts.MaxEmailLength); + b.Property(u => u.NormalizedEmail).HasMaxLength(IdentityUserConsts.MaxNormalizedEmailLength); + b.Property(u => u.PhoneNumber).HasMaxLength(IdentityUserConsts.MaxPhoneNumberLength); + b.Property(u => u.PasswordHash).HasMaxLength(IdentityUserConsts.MaxPasswordHashLength); + b.Property(u => u.SecurityStamp).IsRequired().HasMaxLength(IdentityUserConsts.MaxSecurityStampLength); + b.Property(u => u.ConcurrencyStamp).IsRequired().HasMaxLength(IdentityUserConsts.MaxConcurrencyStampLength); + b.Property(u => u.EmailConfirmed).HasDefaultValue(false); + b.Property(u => u.PhoneNumberConfirmed).HasDefaultValue(false); + b.Property(u => u.TwoFactorEnabled).HasDefaultValue(false); + b.Property(u => u.LockoutEnabled).HasDefaultValue(false); + b.Property(u => u.AccessFailedCount).HasDefaultValue(0); + + b.HasMany(u => u.Claims).WithOne().HasForeignKey(uc => uc.UserId).IsRequired(); + b.HasMany(u => u.Logins).WithOne().HasForeignKey(ul => ul.UserId).IsRequired(); + b.HasMany(u => u.Roles).WithOne().HasForeignKey(ur => ur.UserId).IsRequired(); + b.HasMany(u => u.Tokens).WithOne().HasForeignKey(ur => ur.UserId).IsRequired(); + + b.HasIndex(u => u.NormalizedUserName); + b.HasIndex(u => u.NormalizedEmail); + }); + + builder.Entity(b => + { + b.ToTable(tablePrefix + "Roles", schema); + + b.Property(r => r.Name).IsRequired().HasMaxLength(IdentityRoleConsts.MaxNameLength); + b.Property(r => r.NormalizedName).IsRequired().HasMaxLength(IdentityRoleConsts.MaxNormalizedNameLength); + + b.HasMany(r => r.Claims).WithOne().HasForeignKey(rc => rc.RoleId).IsRequired(); + + b.HasIndex(r => r.NormalizedName); + }); + + builder.Entity(b => + { + b.ToTable(tablePrefix + "UserClaims", schema); + + b.Property(uc => uc.ClaimType).HasMaxLength(IdentityUserClaimConsts.MaxClaimTypeLength).IsRequired(); + b.Property(uc => uc.ClaimValue).HasMaxLength(IdentityUserClaimConsts.MaxClaimValueLength); + + b.HasIndex(uc => uc.UserId); + }); + + builder.Entity(b => + { + b.ToTable(tablePrefix + "RoleClaims", schema); + + b.Property(uc => uc.ClaimType).HasMaxLength(IdentityRoleClaimConsts.MaxClaimTypeLength).IsRequired(); + b.Property(uc => uc.ClaimValue).HasMaxLength(IdentityRoleClaimConsts.MaxClaimValueLength); + + b.HasIndex(uc => uc.RoleId); + }); + + builder.Entity(b => + { + b.ToTable(tablePrefix + "UserRoles", schema); + + b.HasOne().WithMany().HasForeignKey(ur => ur.RoleId).IsRequired(); + b.HasOne().WithMany(u => u.Roles).HasForeignKey(ur => ur.UserId).IsRequired(); + + b.HasIndex(ur => new { ur.UserId, ur.RoleId }); + b.HasIndex(ur => new { ur.RoleId, ur.UserId }); + }); + + builder.Entity(b => + { + b.ToTable(tablePrefix + "UserLogins", schema); + + b.Property(ul => ul.LoginProvider).HasMaxLength(IdentityUserLoginConsts.MaxLoginProviderLength).IsRequired(); + b.Property(ul => ul.ProviderKey).HasMaxLength(IdentityUserLoginConsts.MaxProviderKeyLength).IsRequired(); + b.Property(ul => ul.ProviderDisplayName).HasMaxLength(IdentityUserLoginConsts.MaxProviderDisplayNameLength); + + b.HasIndex(l => new { l.UserId, l.LoginProvider, l.ProviderKey }); + b.HasIndex(l => new { l.LoginProvider, l.ProviderKey }); + }); + + builder.Entity(b => + { + b.ToTable(tablePrefix + "UserTokens", schema); + + b.Property(ul => ul.LoginProvider).HasMaxLength(IdentityUserTokenConsts.MaxLoginProviderLength).IsRequired(); + + b.HasIndex(l => new { l.UserId, l.LoginProvider, l.Name }); + }); + } + } +} diff --git a/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResourceRepository.cs b/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResourceRepository.cs index 49e0715fb2..e4516d2b00 100644 --- a/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResourceRepository.cs +++ b/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResourceRepository.cs @@ -9,9 +9,9 @@ using Volo.Abp.IdentityServer.EntityFrameworkCore; namespace Volo.Abp.IdentityServer { - public class ApiResourceRepository : EfCoreRepository, IApiResourceRepository + public class ApiResourceRepository : EfCoreRepository, IApiResourceRepository { - public ApiResourceRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) + public ApiResourceRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) { } diff --git a/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ClientRepository.cs b/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ClientRepository.cs index da142e91e9..190bc06e7b 100644 --- a/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ClientRepository.cs +++ b/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ClientRepository.cs @@ -8,9 +8,9 @@ using Volo.Abp.IdentityServer.EntityFrameworkCore; namespace Volo.Abp.IdentityServer { - public class ClientRepository : EfCoreRepository, IClientRepository + public class ClientRepository : EfCoreRepository, IClientRepository { - public ClientRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) + public ClientRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) { } diff --git a/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/AbpIdentityServerEntityFrameworkCoreModule.cs b/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/AbpIdentityServerEntityFrameworkCoreModule.cs index d27afaf01d..e7c787a206 100644 --- a/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/AbpIdentityServerEntityFrameworkCoreModule.cs +++ b/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/AbpIdentityServerEntityFrameworkCoreModule.cs @@ -13,7 +13,7 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore { services.AddAbpDbContext(options => { - options.AddDefaultRepositories(); + options.AddDefaultRepositories(); options.AddRepository(); }); diff --git a/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IIdentityServerDbContext.cs b/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IIdentityServerDbContext.cs new file mode 100644 index 0000000000..f33688dcb8 --- /dev/null +++ b/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IIdentityServerDbContext.cs @@ -0,0 +1,48 @@ +using Microsoft.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.IdentityServer.ApiResources; +using Volo.Abp.IdentityServer.Clients; +using Volo.Abp.IdentityServer.Grants; +using Volo.Abp.IdentityServer.IdentityResources; + +namespace Volo.Abp.IdentityServer.EntityFrameworkCore +{ + public interface IIdentityServerDbContext : IEfCoreDbContext + { + DbSet ApiResources { get; set; } + + DbSet ApiSecrets { get; set; } + + DbSet ApiResourceClaims { get; set; } + + DbSet ApiScopes { get; set; } + + DbSet ApiScopeClaims { get; set; } + + DbSet IdentityResources { get; set; } + + DbSet IdentityClaims { get; set; } + + DbSet Clients { get; set; } + + DbSet ClientGrantTypes { get; set; } + + DbSet ClientRedirectUris { get; set; } + + DbSet ClientPostLogoutRedirectUris { get; set; } + + DbSet ClientScopes { get; set; } + + DbSet ClientSecrets { get; set; } + + DbSet ClientClaims { get; set; } + + DbSet ClientIdPRestrictions { get; set; } + + DbSet ClientCorsOrigins { get; set; } + + DbSet ClientProperties { get; set; } + + DbSet PersistedGrants { get; set; } + } +} diff --git a/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContext.cs b/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContext.cs index fa286cb056..db8882023a 100644 --- a/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContext.cs +++ b/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContext.cs @@ -7,9 +7,11 @@ using Volo.Abp.IdentityServer.IdentityResources; namespace Volo.Abp.IdentityServer.EntityFrameworkCore { - public class IdentityServerDbContext : AbpDbContext + public class IdentityServerDbContext : AbpDbContext, IIdentityServerDbContext { - public const string TablePrefix = "IdentityServer"; //TODO: Make configurable + public static string TablePrefix { get; set; } = "IdentityServer"; + + public static string Schema { get; set; } public DbSet ApiResources { get; set; } @@ -57,208 +59,7 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore { base.OnModelCreating(builder); - builder.Entity(client => - { - client.ToTable(TablePrefix + "Clients"); - - client.Property(x => x.ClientId).HasMaxLength(ClientConsts.ClientIdMaxLength).IsRequired(); - client.Property(x => x.ProtocolType).HasMaxLength(ClientConsts.ProtocolTypeMaxLength).IsRequired(); - client.Property(x => x.ClientName).HasMaxLength(ClientConsts.ClientNameMaxLength); - client.Property(x => x.ClientUri).HasMaxLength(ClientConsts.ClientUriMaxLength); - client.Property(x => x.LogoUri).HasMaxLength(ClientConsts.LogoUriMaxLength); - client.Property(x => x.Description).HasMaxLength(ClientConsts.DescriptionMaxLength); - client.Property(x => x.FrontChannelLogoutUri).HasMaxLength(ClientConsts.FrontChannelLogoutUriMaxLength); - client.Property(x => x.BackChannelLogoutUri).HasMaxLength(ClientConsts.BackChannelLogoutUriMaxLength); - client.Property(x => x.ClientClaimsPrefix).HasMaxLength(ClientConsts.ClientClaimsPrefixMaxLength); - client.Property(x => x.PairWiseSubjectSalt).HasMaxLength(ClientConsts.PairWiseSubjectSaltMaxLength); - - client.HasMany(x => x.AllowedScopes).WithOne().HasForeignKey(x => x.ClientId).IsRequired(); - client.HasMany(x => x.ClientSecrets).WithOne().HasForeignKey(x => x.ClientId).IsRequired(); - client.HasMany(x => x.AllowedGrantTypes).WithOne().HasForeignKey(x => x.ClientId).IsRequired(); - client.HasMany(x => x.AllowedCorsOrigins).WithOne().HasForeignKey(x => x.ClientId).IsRequired(); - client.HasMany(x => x.RedirectUris).WithOne().HasForeignKey(x => x.ClientId).IsRequired(); - client.HasMany(x => x.PostLogoutRedirectUris).WithOne().HasForeignKey(x => x.ClientId).IsRequired(); - client.HasMany(x => x.IdentityProviderRestrictions).WithOne().HasForeignKey(x => x.ClientId).IsRequired(); - client.HasMany(x => x.Claims).WithOne().HasForeignKey(x => x.ClientId).IsRequired(); - client.HasMany(x => x.Properties).WithOne().HasForeignKey(x => x.ClientId).IsRequired(); - - client.HasIndex(x => x.ClientId).IsUnique(); - }); - - builder.Entity(grantType => - { - grantType.ToTable(TablePrefix + "ClientGrantTypes"); - - grantType.HasKey(x => new {x.ClientId, x.GrantType}); - - grantType.Property(x => x.GrantType).HasMaxLength(ClientGrantTypeConsts.GrantTypeMaxLength).IsRequired(); - }); - - builder.Entity(redirectUri => - { - redirectUri.ToTable(TablePrefix + "ClientRedirectUris"); - - redirectUri.HasKey(x => new {x.ClientId, x.RedirectUri}); - - redirectUri.Property(x => x.RedirectUri).HasMaxLength(ClientRedirectUriConsts.RedirectUriMaxLength).IsRequired(); - }); - - builder.Entity(postLogoutRedirectUri => - { - postLogoutRedirectUri.ToTable(TablePrefix + "ClientPostLogoutRedirectUris"); - - postLogoutRedirectUri.HasKey(x => new {x.ClientId, x.PostLogoutRedirectUri}); - - postLogoutRedirectUri.Property(x => x.PostLogoutRedirectUri).HasMaxLength(ClientPostLogoutRedirectUriConsts.PostLogoutRedirectUriMaxLength).IsRequired(); - }); - - builder.Entity(scope => - { - scope.ToTable(TablePrefix + "ClientScopes"); - - scope.HasKey(x => new {x.ClientId, x.Scope}); - - scope.Property(x => x.Scope).HasMaxLength(ClientScopeConsts.ScopeMaxLength).IsRequired(); - }); - - builder.Entity(secret => - { - secret.ToTable(TablePrefix + "ClientSecrets"); - - secret.HasKey(x => new { x.ClientId, x.Type, x.Value }); - - secret.Property(x => x.Type).HasMaxLength(SecretConsts.TypeMaxLength).IsRequired(); - secret.Property(x => x.Value).HasMaxLength(SecretConsts.ValueMaxLength).IsRequired(); - secret.Property(x => x.Description).HasMaxLength(SecretConsts.DescriptionMaxLength); - }); - - builder.Entity(claim => - { - claim.ToTable(TablePrefix + "ClientClaims"); - - claim.Property(x => x.Type).HasMaxLength(ClientClaimConsts.TypeMaxLength).IsRequired(); - claim.Property(x => x.Value).HasMaxLength(ClientClaimConsts.ValueMaxLength).IsRequired(); - }); - - builder.Entity(idPRestriction => - { - idPRestriction.ToTable(TablePrefix + "ClientIdPRestrictions"); - - idPRestriction.HasKey(x => new {x.ClientId, x.Provider}); - - idPRestriction.Property(x => x.Provider).HasMaxLength(ClientIdPRestrictionConsts.ProviderMaxLength).IsRequired(); - }); - - builder.Entity(corsOrigin => - { - corsOrigin.ToTable(TablePrefix + "ClientCorsOrigins"); - - corsOrigin.HasKey(x => new {x.ClientId, x.Origin}); - - corsOrigin.Property(x => x.Origin).HasMaxLength(ClientCorsOriginConsts.OriginMaxLength).IsRequired(); - }); - - builder.Entity(property => - { - property.ToTable(TablePrefix + "ClientProperties"); - - property.HasKey(x => new {x.ClientId, x.Key}); - - property.Property(x => x.Key).HasMaxLength(ClientPropertyConsts.KeyMaxLength).IsRequired(); - property.Property(x => x.Value).HasMaxLength(ClientPropertyConsts.ValueMaxLength).IsRequired(); - }); - - builder.Entity(grant => - { - grant.ToTable(TablePrefix + "PersistedGrants"); - - grant.Property(x => x.Key).HasMaxLength(PersistedGrantConsts.KeyMaxLength).ValueGeneratedNever(); - grant.Property(x => x.Type).HasMaxLength(PersistedGrantConsts.TypeMaxLength).IsRequired(); - grant.Property(x => x.SubjectId).HasMaxLength(PersistedGrantConsts.SubjectIdMaxLength); - grant.Property(x => x.ClientId).HasMaxLength(PersistedGrantConsts.ClientIdMaxLength).IsRequired(); - grant.Property(x => x.CreationTime).IsRequired(); - grant.Property(x => x.Data).IsRequired(); - - grant.HasKey(x => x.Key); //TODO: What about Id!!! - - grant.HasIndex(x => new { x.SubjectId, x.ClientId, x.Type }); - }); - - builder.Entity(identityResource => - { - identityResource.ToTable(TablePrefix + "IdentityResources"); - - identityResource.Property(x => x.Name).HasMaxLength(IdentityResourceConsts.NameMaxLength).IsRequired(); - identityResource.Property(x => x.DisplayName).HasMaxLength(IdentityResourceConsts.DisplayNameMaxLength); - identityResource.Property(x => x.Description).HasMaxLength(IdentityResourceConsts.DescriptionMaxLength); - - identityResource.HasMany(x => x.UserClaims).WithOne().HasForeignKey(x => x.IdentityResourceId).IsRequired(); - }); - - builder.Entity(claim => - { - claim.ToTable(TablePrefix + "IdentityClaims"); - - claim.HasKey(x => new {x.IdentityResourceId, x.Type}); - - claim.Property(x => x.Type).HasMaxLength(UserClaimConsts.TypeMaxLength).IsRequired(); - }); - - builder.Entity(apiResource => - { - apiResource.ToTable(TablePrefix + "ApiResources"); - - apiResource.Property(x => x.Name).HasMaxLength(ApiResourceConsts.NameMaxLength).IsRequired(); - apiResource.Property(x => x.DisplayName).HasMaxLength(ApiResourceConsts.DisplayNameMaxLength); - apiResource.Property(x => x.Description).HasMaxLength(ApiResourceConsts.DescriptionMaxLength); - - apiResource.HasMany(x => x.Secrets).WithOne().HasForeignKey(x => x.ApiResourceId).IsRequired(); - apiResource.HasMany(x => x.Scopes).WithOne().HasForeignKey(x => x.ApiResourceId).IsRequired(); - apiResource.HasMany(x => x.UserClaims).WithOne().HasForeignKey(x => x.ApiResourceId).IsRequired(); - }); - - builder.Entity(apiSecret => - { - apiSecret.ToTable(TablePrefix + "ApiSecrets"); - - apiSecret.HasKey(x => new { x.ApiResourceId, x.Type, x.Value }); - - apiSecret.Property(x => x.Type).HasMaxLength(SecretConsts.TypeMaxLength).IsRequired(); - apiSecret.Property(x => x.Value).HasMaxLength(SecretConsts.ValueMaxLength).IsRequired(); - apiSecret.Property(x => x.Description).HasMaxLength(SecretConsts.DescriptionMaxLength); - }); - - builder.Entity(apiClaim => - { - apiClaim.ToTable(TablePrefix + "ApiClaims"); - - apiClaim.HasKey(x => new {x.ApiResourceId, x.Type}); - - apiClaim.Property(x => x.Type).HasMaxLength(UserClaimConsts.TypeMaxLength).IsRequired(); - }); - - builder.Entity(apiScope => - { - apiScope.ToTable(TablePrefix + "ApiScopes"); - - apiScope.HasKey(x => new { x.ApiResourceId, x.Name }); - - apiScope.Property(x => x.Name).HasMaxLength(ApiScopeConsts.NameMaxLength).IsRequired(); - apiScope.Property(x => x.DisplayName).HasMaxLength(ApiScopeConsts.DisplayNameMaxLength); - apiScope.Property(x => x.Description).HasMaxLength(ApiScopeConsts.DescriptionMaxLength); - - apiScope.HasMany(x => x.UserClaims).WithOne().HasForeignKey(x => new { x.ApiResourceId, x.Name }).IsRequired(); - }); - - builder.Entity(apiScopeClaim => - { - apiScopeClaim.ToTable(TablePrefix + "ApiScopeClaims"); - - apiScopeClaim.HasKey(x => new {x.ApiResourceId, x.Name, x.Type}); - - apiScopeClaim.Property(x => x.Type).HasMaxLength(UserClaimConsts.TypeMaxLength).IsRequired(); - apiScopeClaim.Property(x => x.Name).HasMaxLength(ApiScopeConsts.NameMaxLength).IsRequired(); - }); + this.ConfigureIdentityServer(builder, TablePrefix, Schema); } } } diff --git a/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs b/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs new file mode 100644 index 0000000000..0a12abe5fc --- /dev/null +++ b/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs @@ -0,0 +1,224 @@ +using System; +using JetBrains.Annotations; +using Microsoft.EntityFrameworkCore; +using Volo.Abp.IdentityServer.ApiResources; +using Volo.Abp.IdentityServer.Clients; +using Volo.Abp.IdentityServer.Grants; +using Volo.Abp.IdentityServer.IdentityResources; + +namespace Volo.Abp.IdentityServer.EntityFrameworkCore +{ + public static class IdentityServerDbContextModelCreatingExtensions + { + public static void ConfigureIdentityServer(this IIdentityServerDbContext dbContext, ModelBuilder builder, string tablePrefix = "", [CanBeNull] string schema = null) + { + if (tablePrefix.IsNullOrWhiteSpace()) + { + tablePrefix = ""; + } + + builder.Entity(client => + { + client.ToTable(tablePrefix + "Clients", schema); + + client.Property(x => x.ClientId).HasMaxLength(ClientConsts.ClientIdMaxLength).IsRequired(); + client.Property(x => x.ProtocolType).HasMaxLength(ClientConsts.ProtocolTypeMaxLength).IsRequired(); + client.Property(x => x.ClientName).HasMaxLength(ClientConsts.ClientNameMaxLength); + client.Property(x => x.ClientUri).HasMaxLength(ClientConsts.ClientUriMaxLength); + client.Property(x => x.LogoUri).HasMaxLength(ClientConsts.LogoUriMaxLength); + client.Property(x => x.Description).HasMaxLength(ClientConsts.DescriptionMaxLength); + client.Property(x => x.FrontChannelLogoutUri).HasMaxLength(ClientConsts.FrontChannelLogoutUriMaxLength); + client.Property(x => x.BackChannelLogoutUri).HasMaxLength(ClientConsts.BackChannelLogoutUriMaxLength); + client.Property(x => x.ClientClaimsPrefix).HasMaxLength(ClientConsts.ClientClaimsPrefixMaxLength); + client.Property(x => x.PairWiseSubjectSalt).HasMaxLength(ClientConsts.PairWiseSubjectSaltMaxLength); + + client.HasMany(x => x.AllowedScopes).WithOne().HasForeignKey(x => x.ClientId).IsRequired(); + client.HasMany(x => x.ClientSecrets).WithOne().HasForeignKey(x => x.ClientId).IsRequired(); + client.HasMany(x => x.AllowedGrantTypes).WithOne().HasForeignKey(x => x.ClientId).IsRequired(); + client.HasMany(x => x.AllowedCorsOrigins).WithOne().HasForeignKey(x => x.ClientId).IsRequired(); + client.HasMany(x => x.RedirectUris).WithOne().HasForeignKey(x => x.ClientId).IsRequired(); + client.HasMany(x => x.PostLogoutRedirectUris).WithOne().HasForeignKey(x => x.ClientId).IsRequired(); + client.HasMany(x => x.IdentityProviderRestrictions).WithOne().HasForeignKey(x => x.ClientId).IsRequired(); + client.HasMany(x => x.Claims).WithOne().HasForeignKey(x => x.ClientId).IsRequired(); + client.HasMany(x => x.Properties).WithOne().HasForeignKey(x => x.ClientId).IsRequired(); + + client.HasIndex(x => x.ClientId).IsUnique(); + }); + + builder.Entity(grantType => + { + grantType.ToTable(tablePrefix + "ClientGrantTypes", schema); + + grantType.HasKey(x => new { x.ClientId, x.GrantType }); + + grantType.Property(x => x.GrantType).HasMaxLength(ClientGrantTypeConsts.GrantTypeMaxLength).IsRequired(); + }); + + builder.Entity(redirectUri => + { + redirectUri.ToTable(tablePrefix + "ClientRedirectUris", schema); + + redirectUri.HasKey(x => new { x.ClientId, x.RedirectUri }); + + redirectUri.Property(x => x.RedirectUri).HasMaxLength(ClientRedirectUriConsts.RedirectUriMaxLength).IsRequired(); + }); + + builder.Entity(postLogoutRedirectUri => + { + postLogoutRedirectUri.ToTable(tablePrefix + "ClientPostLogoutRedirectUris", schema); + + postLogoutRedirectUri.HasKey(x => new { x.ClientId, x.PostLogoutRedirectUri }); + + postLogoutRedirectUri.Property(x => x.PostLogoutRedirectUri).HasMaxLength(ClientPostLogoutRedirectUriConsts.PostLogoutRedirectUriMaxLength).IsRequired(); + }); + + builder.Entity(scope => + { + scope.ToTable(tablePrefix + "ClientScopes", schema); + + scope.HasKey(x => new { x.ClientId, x.Scope }); + + scope.Property(x => x.Scope).HasMaxLength(ClientScopeConsts.ScopeMaxLength).IsRequired(); + }); + + builder.Entity(secret => + { + secret.ToTable(tablePrefix + "ClientSecrets", schema); + + secret.HasKey(x => new { x.ClientId, x.Type, x.Value }); + + secret.Property(x => x.Type).HasMaxLength(SecretConsts.TypeMaxLength).IsRequired(); + secret.Property(x => x.Value).HasMaxLength(SecretConsts.ValueMaxLength).IsRequired(); + secret.Property(x => x.Description).HasMaxLength(SecretConsts.DescriptionMaxLength); + }); + + builder.Entity(claim => + { + claim.ToTable(tablePrefix + "ClientClaims", schema); + + claim.Property(x => x.Type).HasMaxLength(ClientClaimConsts.TypeMaxLength).IsRequired(); + claim.Property(x => x.Value).HasMaxLength(ClientClaimConsts.ValueMaxLength).IsRequired(); + }); + + builder.Entity(idPRestriction => + { + idPRestriction.ToTable(tablePrefix + "ClientIdPRestrictions", schema); + + idPRestriction.HasKey(x => new { x.ClientId, x.Provider }); + + idPRestriction.Property(x => x.Provider).HasMaxLength(ClientIdPRestrictionConsts.ProviderMaxLength).IsRequired(); + }); + + builder.Entity(corsOrigin => + { + corsOrigin.ToTable(tablePrefix + "ClientCorsOrigins", schema); + + corsOrigin.HasKey(x => new { x.ClientId, x.Origin }); + + corsOrigin.Property(x => x.Origin).HasMaxLength(ClientCorsOriginConsts.OriginMaxLength).IsRequired(); + }); + + builder.Entity(property => + { + property.ToTable(tablePrefix + "ClientProperties", schema); + + property.HasKey(x => new { x.ClientId, x.Key }); + + property.Property(x => x.Key).HasMaxLength(ClientPropertyConsts.KeyMaxLength).IsRequired(); + property.Property(x => x.Value).HasMaxLength(ClientPropertyConsts.ValueMaxLength).IsRequired(); + }); + + builder.Entity(grant => + { + grant.ToTable(tablePrefix + "PersistedGrants", schema); + + grant.Property(x => x.Key).HasMaxLength(PersistedGrantConsts.KeyMaxLength).ValueGeneratedNever(); + grant.Property(x => x.Type).HasMaxLength(PersistedGrantConsts.TypeMaxLength).IsRequired(); + grant.Property(x => x.SubjectId).HasMaxLength(PersistedGrantConsts.SubjectIdMaxLength); + grant.Property(x => x.ClientId).HasMaxLength(PersistedGrantConsts.ClientIdMaxLength).IsRequired(); + grant.Property(x => x.CreationTime).IsRequired(); + grant.Property(x => x.Data).IsRequired(); + + grant.HasKey(x => x.Key); //TODO: What about Id!!! + + grant.HasIndex(x => new { x.SubjectId, x.ClientId, x.Type }); + }); + + builder.Entity(identityResource => + { + identityResource.ToTable(tablePrefix + "IdentityResources", schema); + + identityResource.Property(x => x.Name).HasMaxLength(IdentityResourceConsts.NameMaxLength).IsRequired(); + identityResource.Property(x => x.DisplayName).HasMaxLength(IdentityResourceConsts.DisplayNameMaxLength); + identityResource.Property(x => x.Description).HasMaxLength(IdentityResourceConsts.DescriptionMaxLength); + + identityResource.HasMany(x => x.UserClaims).WithOne().HasForeignKey(x => x.IdentityResourceId).IsRequired(); + }); + + builder.Entity(claim => + { + claim.ToTable(tablePrefix + "IdentityClaims", schema); + + claim.HasKey(x => new { x.IdentityResourceId, x.Type }); + + claim.Property(x => x.Type).HasMaxLength(UserClaimConsts.TypeMaxLength).IsRequired(); + }); + + builder.Entity(apiResource => + { + apiResource.ToTable(tablePrefix + "ApiResources", schema); + + apiResource.Property(x => x.Name).HasMaxLength(ApiResourceConsts.NameMaxLength).IsRequired(); + apiResource.Property(x => x.DisplayName).HasMaxLength(ApiResourceConsts.DisplayNameMaxLength); + apiResource.Property(x => x.Description).HasMaxLength(ApiResourceConsts.DescriptionMaxLength); + + apiResource.HasMany(x => x.Secrets).WithOne().HasForeignKey(x => x.ApiResourceId).IsRequired(); + apiResource.HasMany(x => x.Scopes).WithOne().HasForeignKey(x => x.ApiResourceId).IsRequired(); + apiResource.HasMany(x => x.UserClaims).WithOne().HasForeignKey(x => x.ApiResourceId).IsRequired(); + }); + + builder.Entity(apiSecret => + { + apiSecret.ToTable(tablePrefix + "ApiSecrets", schema); + + apiSecret.HasKey(x => new { x.ApiResourceId, x.Type, x.Value }); + + apiSecret.Property(x => x.Type).HasMaxLength(SecretConsts.TypeMaxLength).IsRequired(); + apiSecret.Property(x => x.Value).HasMaxLength(SecretConsts.ValueMaxLength).IsRequired(); + apiSecret.Property(x => x.Description).HasMaxLength(SecretConsts.DescriptionMaxLength); + }); + + builder.Entity(apiClaim => + { + apiClaim.ToTable(tablePrefix + "ApiClaims", schema); + + apiClaim.HasKey(x => new { x.ApiResourceId, x.Type }); + + apiClaim.Property(x => x.Type).HasMaxLength(UserClaimConsts.TypeMaxLength).IsRequired(); + }); + + builder.Entity(apiScope => + { + apiScope.ToTable(tablePrefix + "ApiScopes", schema); + + apiScope.HasKey(x => new { x.ApiResourceId, x.Name }); + + apiScope.Property(x => x.Name).HasMaxLength(ApiScopeConsts.NameMaxLength).IsRequired(); + apiScope.Property(x => x.DisplayName).HasMaxLength(ApiScopeConsts.DisplayNameMaxLength); + apiScope.Property(x => x.Description).HasMaxLength(ApiScopeConsts.DescriptionMaxLength); + + apiScope.HasMany(x => x.UserClaims).WithOne().HasForeignKey(x => new { x.ApiResourceId, x.Name }).IsRequired(); + }); + + builder.Entity(apiScopeClaim => + { + apiScopeClaim.ToTable(tablePrefix + "ApiScopeClaims", schema); + + apiScopeClaim.HasKey(x => new { x.ApiResourceId, x.Name, x.Type }); + + apiScopeClaim.Property(x => x.Type).HasMaxLength(UserClaimConsts.TypeMaxLength).IsRequired(); + apiScopeClaim.Property(x => x.Name).HasMaxLength(ApiScopeConsts.NameMaxLength).IsRequired(); + }); + } + } +} diff --git a/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/IdentityResourceRepository.cs b/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/IdentityResourceRepository.cs index 861f15a72d..c12202316d 100644 --- a/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/IdentityResourceRepository.cs +++ b/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/IdentityResourceRepository.cs @@ -14,9 +14,9 @@ namespace Volo.Abp.IdentityServer { //TODO: This is not true implementation! This repository works for 2 different aggregate root! - public class IdentityResourceRepository : EfCoreRepository, IIdentityResourceRepository + public class IdentityResourceRepository : EfCoreRepository, IIdentityResourceRepository { - public IdentityResourceRepository(IDbContextProvider dbContextProvider) + public IdentityResourceRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) { diff --git a/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/PersistedGrantRepository.cs b/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/PersistedGrantRepository.cs index 999192a27c..e0cdcdc1bc 100644 --- a/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/PersistedGrantRepository.cs +++ b/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/PersistedGrantRepository.cs @@ -10,9 +10,9 @@ using Volo.Abp.IdentityServer.Grants; namespace Volo.Abp.IdentityServer { - public class PersistentGrantRepository : EfCoreRepository, IPersistentGrantRepository + public class PersistentGrantRepository : EfCoreRepository, IPersistentGrantRepository { - public PersistentGrantRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) + public PersistentGrantRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) { } diff --git a/src/Volo.Abp.MultiTenancy.EntityFrameworkCore/Volo/Abp/MultiTenancy/EntityFrameworkCore/MultiTenancyDbContext.cs b/src/Volo.Abp.MultiTenancy.EntityFrameworkCore/Volo/Abp/MultiTenancy/EntityFrameworkCore/MultiTenancyDbContext.cs index 8648083e31..a880920486 100644 --- a/src/Volo.Abp.MultiTenancy.EntityFrameworkCore/Volo/Abp/MultiTenancy/EntityFrameworkCore/MultiTenancyDbContext.cs +++ b/src/Volo.Abp.MultiTenancy.EntityFrameworkCore/Volo/Abp/MultiTenancy/EntityFrameworkCore/MultiTenancyDbContext.cs @@ -18,7 +18,7 @@ namespace Volo.Abp.MultiTenancy.EntityFrameworkCore { base.OnModelCreating(builder); - this.ConfigureAbpMultiTenancy(builder); + this.ConfigureMultiTenancy(builder); } } } diff --git a/src/Volo.Abp.MultiTenancy.EntityFrameworkCore/Volo/Abp/MultiTenancy/EntityFrameworkCore/MultiTenancyDbContextModelCreatingExtensions.cs b/src/Volo.Abp.MultiTenancy.EntityFrameworkCore/Volo/Abp/MultiTenancy/EntityFrameworkCore/MultiTenancyDbContextModelCreatingExtensions.cs index c61b9368a4..500ca5586f 100644 --- a/src/Volo.Abp.MultiTenancy.EntityFrameworkCore/Volo/Abp/MultiTenancy/EntityFrameworkCore/MultiTenancyDbContextModelCreatingExtensions.cs +++ b/src/Volo.Abp.MultiTenancy.EntityFrameworkCore/Volo/Abp/MultiTenancy/EntityFrameworkCore/MultiTenancyDbContextModelCreatingExtensions.cs @@ -4,7 +4,7 @@ namespace Volo.Abp.MultiTenancy.EntityFrameworkCore { public static class MultiTenancyDbContextModelCreatingExtensions { - public static void ConfigureAbpMultiTenancy(this IMultiTenancyDbContext dbContext, ModelBuilder builder) + public static void ConfigureMultiTenancy(this IMultiTenancyDbContext dbContext, ModelBuilder builder) { builder.Entity(b => {