|
|
|
@ -1,11 +1,9 @@ |
|
|
|
using System; |
|
|
|
using System.Collections.Generic; |
|
|
|
using Microsoft.EntityFrameworkCore; |
|
|
|
using Volo.Abp.EntityFrameworkCore; |
|
|
|
using Volo.Abp.EntityFrameworkCore.Modeling; |
|
|
|
using Volo.Abp.EntityFrameworkCore.ValueComparers; |
|
|
|
using Volo.Abp.EntityFrameworkCore.ValueConverters; |
|
|
|
using Volo.Abp.IdentityServer.ApiResources; |
|
|
|
using Volo.Abp.IdentityServer.ApiScopes; |
|
|
|
using Volo.Abp.IdentityServer.Clients; |
|
|
|
using Volo.Abp.IdentityServer.Devices; |
|
|
|
using Volo.Abp.IdentityServer.Grants; |
|
|
|
@ -28,6 +26,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore |
|
|
|
|
|
|
|
optionsAction?.Invoke(options); |
|
|
|
|
|
|
|
#region Client
|
|
|
|
|
|
|
|
builder.Entity<Client>(b => |
|
|
|
{ |
|
|
|
b.ToTable(options.TablePrefix + "Clients", options.Schema); |
|
|
|
@ -45,6 +45,7 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore |
|
|
|
b.Property(x => x.ClientClaimsPrefix).HasMaxLength(ClientConsts.ClientClaimsPrefixMaxLength); |
|
|
|
b.Property(x => x.PairWiseSubjectSalt).HasMaxLength(ClientConsts.PairWiseSubjectSaltMaxLength); |
|
|
|
b.Property(x => x.UserCodeType).HasMaxLength(ClientConsts.UserCodeTypeMaxLength); |
|
|
|
b.Property(x => x.AllowedIdentityTokenSigningAlgorithms).HasMaxLength(ClientConsts.AllowedIdentityTokenSigningAlgorithms); |
|
|
|
|
|
|
|
b.HasMany(x => x.AllowedScopes).WithOne().HasForeignKey(x => x.ClientId).IsRequired(); |
|
|
|
b.HasMany(x => x.ClientSecrets).WithOne().HasForeignKey(x => x.ClientId).IsRequired(); |
|
|
|
@ -81,8 +82,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore |
|
|
|
if (IsDatabaseProvider(builder, options, EfCoreDatabaseProvider.MySql)) |
|
|
|
{ |
|
|
|
ClientRedirectUriConsts.RedirectUriMaxLengthValue = 300; |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
b.Property(x => x.RedirectUri).HasMaxLength(ClientRedirectUriConsts.RedirectUriMaxLengthValue).IsRequired(); |
|
|
|
}); |
|
|
|
|
|
|
|
@ -97,8 +98,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore |
|
|
|
if (IsDatabaseProvider(builder, options, EfCoreDatabaseProvider.MySql)) |
|
|
|
{ |
|
|
|
ClientPostLogoutRedirectUriConsts.PostLogoutRedirectUriMaxLengthValue = 300; |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
b.Property(x => x.PostLogoutRedirectUri) |
|
|
|
.HasMaxLength(ClientPostLogoutRedirectUriConsts.PostLogoutRedirectUriMaxLengthValue) |
|
|
|
.IsRequired(); |
|
|
|
@ -123,16 +124,13 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore |
|
|
|
|
|
|
|
b.HasKey(x => new {x.ClientId, x.Type, x.Value}); |
|
|
|
|
|
|
|
b.Property(x => x.Type).HasMaxLength(SecretConsts.TypeMaxLength).IsRequired(); |
|
|
|
|
|
|
|
b.Property(x => x.Type).HasMaxLength(ClientSecretConsts.TypeMaxLength).IsRequired(); |
|
|
|
if (IsDatabaseProvider(builder, options, EfCoreDatabaseProvider.MySql, EfCoreDatabaseProvider.Oracle)) |
|
|
|
{ |
|
|
|
SecretConsts.ValueMaxLengthValue = 300; |
|
|
|
ClientSecretConsts.ValueMaxLength = 300; |
|
|
|
} |
|
|
|
|
|
|
|
b.Property(x => x.Value).HasMaxLength(SecretConsts.ValueMaxLengthValue).IsRequired(); |
|
|
|
|
|
|
|
b.Property(x => x.Description).HasMaxLength(SecretConsts.DescriptionMaxLength); |
|
|
|
b.Property(x => x.Value).HasMaxLength(ClientSecretConsts.ValueMaxLength).IsRequired(); |
|
|
|
b.Property(x => x.Description).HasMaxLength(ClientSecretConsts.DescriptionMaxLength); |
|
|
|
}); |
|
|
|
|
|
|
|
builder.Entity<ClientClaim>(b => |
|
|
|
@ -175,36 +173,15 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore |
|
|
|
|
|
|
|
b.ConfigureByConvention(); |
|
|
|
|
|
|
|
b.HasKey(x => new {x.ClientId, x.Key}); |
|
|
|
b.HasKey(x => new {x.ClientId, x.Key, x.Value}); |
|
|
|
|
|
|
|
b.Property(x => x.Key).HasMaxLength(ClientPropertyConsts.KeyMaxLength).IsRequired(); |
|
|
|
b.Property(x => x.Value).HasMaxLength(ClientPropertyConsts.ValueMaxLength).IsRequired(); |
|
|
|
}); |
|
|
|
|
|
|
|
builder.Entity<PersistedGrant>(b => |
|
|
|
{ |
|
|
|
b.ToTable(options.TablePrefix + "PersistedGrants", options.Schema); |
|
|
|
|
|
|
|
b.ConfigureByConvention(); |
|
|
|
|
|
|
|
b.Property(x => x.Key).HasMaxLength(PersistedGrantConsts.KeyMaxLength).ValueGeneratedNever(); |
|
|
|
b.Property(x => x.Type).HasMaxLength(PersistedGrantConsts.TypeMaxLength).IsRequired(); |
|
|
|
b.Property(x => x.SubjectId).HasMaxLength(PersistedGrantConsts.SubjectIdMaxLength); |
|
|
|
b.Property(x => x.ClientId).HasMaxLength(PersistedGrantConsts.ClientIdMaxLength).IsRequired(); |
|
|
|
b.Property(x => x.CreationTime).IsRequired(); |
|
|
|
|
|
|
|
if (IsDatabaseProvider(builder, options, EfCoreDatabaseProvider.MySql)) |
|
|
|
{ |
|
|
|
PersistedGrantConsts.DataMaxLengthValue = 10000; //TODO: MySQL accepts 20.000. We can consider to change in v3.0.
|
|
|
|
} |
|
|
|
|
|
|
|
b.Property(x => x.Data).HasMaxLength(PersistedGrantConsts.DataMaxLengthValue).IsRequired(); |
|
|
|
|
|
|
|
b.HasKey(x => x.Key); //TODO: What about Id!!!
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
b.HasIndex(x => new {x.SubjectId, x.ClientId, x.Type}); |
|
|
|
b.HasIndex(x => x.Expiration); |
|
|
|
}); |
|
|
|
#region IdentityResource
|
|
|
|
|
|
|
|
builder.Entity<IdentityResource>(b => |
|
|
|
{ |
|
|
|
@ -215,16 +192,16 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore |
|
|
|
b.Property(x => x.Name).HasMaxLength(IdentityResourceConsts.NameMaxLength).IsRequired(); |
|
|
|
b.Property(x => x.DisplayName).HasMaxLength(IdentityResourceConsts.DisplayNameMaxLength); |
|
|
|
b.Property(x => x.Description).HasMaxLength(IdentityResourceConsts.DescriptionMaxLength); |
|
|
|
b.Property(x => x.Properties) |
|
|
|
.HasConversion(new AbpJsonValueConverter<Dictionary<string, string>>()) |
|
|
|
.Metadata.SetValueComparer(new AbpDictionaryValueComparer<string, string>()); |
|
|
|
|
|
|
|
b.HasIndex(x => x.Name).IsUnique(); |
|
|
|
|
|
|
|
b.HasMany(x => x.UserClaims).WithOne().HasForeignKey(x => x.IdentityResourceId).IsRequired(); |
|
|
|
b.HasMany(x => x.Properties).WithOne().HasForeignKey(x => x.IdentityResourceId).IsRequired(); |
|
|
|
}); |
|
|
|
|
|
|
|
builder.Entity<IdentityClaim>(b => |
|
|
|
builder.Entity<IdentityResourceClaim>(b => |
|
|
|
{ |
|
|
|
b.ToTable(options.TablePrefix + "IdentityClaims", options.Schema); |
|
|
|
b.ToTable(options.TablePrefix + "IdentityResourceClaims", options.Schema); |
|
|
|
|
|
|
|
b.ConfigureByConvention(); |
|
|
|
|
|
|
|
@ -233,46 +210,67 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore |
|
|
|
b.Property(x => x.Type).HasMaxLength(UserClaimConsts.TypeMaxLength).IsRequired(); |
|
|
|
}); |
|
|
|
|
|
|
|
builder.Entity<ApiResource>(b => |
|
|
|
builder.Entity<IdentityResourceProperty>(b => |
|
|
|
{ |
|
|
|
b.ToTable(options.TablePrefix + "IdentityResourceProperties", options.Schema); |
|
|
|
|
|
|
|
b.ConfigureByConvention(); |
|
|
|
|
|
|
|
b.HasKey(x => new {x.IdentityResourceId, x.Key, x.Value}); |
|
|
|
|
|
|
|
b.Property(x => x.Key).HasMaxLength(IdentityResourcePropertyConsts.KeyMaxLength).IsRequired(); |
|
|
|
if (IsDatabaseProvider(builder, options, EfCoreDatabaseProvider.MySql, EfCoreDatabaseProvider.Oracle)) |
|
|
|
{ |
|
|
|
IdentityResourcePropertyConsts.ValueMaxLength = 300; |
|
|
|
} |
|
|
|
b.Property(x => x.Value).HasMaxLength(IdentityResourcePropertyConsts.ValueMaxLength).IsRequired(); |
|
|
|
}); |
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region ApiResource
|
|
|
|
|
|
|
|
builder.Entity<ApiResource>(b => |
|
|
|
{ |
|
|
|
b.ToTable(options.TablePrefix + "ApiResources", options.Schema); |
|
|
|
|
|
|
|
b.ConfigureByConvention(); |
|
|
|
|
|
|
|
b.HasIndex(x => x.Name).IsUnique(); |
|
|
|
|
|
|
|
b.Property(x => x.Name).HasMaxLength(ApiResourceConsts.NameMaxLength).IsRequired(); |
|
|
|
b.Property(x => x.DisplayName).HasMaxLength(ApiResourceConsts.DisplayNameMaxLength); |
|
|
|
b.Property(x => x.Description).HasMaxLength(ApiResourceConsts.DescriptionMaxLength); |
|
|
|
b.Property(x => x.Properties) |
|
|
|
.HasConversion(new AbpJsonValueConverter<Dictionary<string, string>>()) |
|
|
|
.Metadata.SetValueComparer(new AbpDictionaryValueComparer<string, string>()); |
|
|
|
b.Property(x => x.AllowedAccessTokenSigningAlgorithms).HasMaxLength(ApiResourceConsts.AllowedAccessTokenSigningAlgorithmsMaxLength); |
|
|
|
|
|
|
|
b.HasMany(x => x.Secrets).WithOne().HasForeignKey(x => x.ApiResourceId).IsRequired(); |
|
|
|
b.HasMany(x => x.Scopes).WithOne().HasForeignKey(x => x.ApiResourceId).IsRequired(); |
|
|
|
b.HasMany(x => x.UserClaims).WithOne().HasForeignKey(x => x.ApiResourceId).IsRequired(); |
|
|
|
b.HasMany(x => x.Properties).WithOne().HasForeignKey(x => x.ApiResourceId).IsRequired(); |
|
|
|
}); |
|
|
|
|
|
|
|
builder.Entity<ApiSecret>(b => |
|
|
|
builder.Entity<ApiResourceSecret>(b => |
|
|
|
{ |
|
|
|
b.ToTable(options.TablePrefix + "ApiSecrets", options.Schema); |
|
|
|
b.ToTable(options.TablePrefix + "ApiResourceSecrets", options.Schema); |
|
|
|
|
|
|
|
b.ConfigureByConvention(); |
|
|
|
|
|
|
|
b.HasKey(x => new {x.ApiResourceId, x.Type, x.Value}); |
|
|
|
|
|
|
|
b.Property(x => x.Type).HasMaxLength(SecretConsts.TypeMaxLength).IsRequired(); |
|
|
|
b.Property(x => x.Description).HasMaxLength(SecretConsts.DescriptionMaxLength); |
|
|
|
b.Property(x => x.Type).HasMaxLength(ApiResourceSecretConsts.TypeMaxLength).IsRequired(); |
|
|
|
|
|
|
|
if (IsDatabaseProvider(builder, options, EfCoreDatabaseProvider.MySql, EfCoreDatabaseProvider.Oracle)) |
|
|
|
{ |
|
|
|
SecretConsts.ValueMaxLengthValue = 300; |
|
|
|
} |
|
|
|
|
|
|
|
b.Property(x => x.Value).HasMaxLength(SecretConsts.ValueMaxLengthValue).IsRequired(); |
|
|
|
ApiResourceSecretConsts.ValueMaxLength = 300; |
|
|
|
} |
|
|
|
b.Property(x => x.Value).HasMaxLength(ApiResourceSecretConsts.ValueMaxLength).IsRequired(); |
|
|
|
|
|
|
|
b.Property(x => x.Description).HasMaxLength(ApiResourceSecretConsts.DescriptionMaxLength); |
|
|
|
}); |
|
|
|
|
|
|
|
builder.Entity<ApiResourceClaim>(b => |
|
|
|
{ |
|
|
|
b.ToTable(options.TablePrefix + "ApiClaims", options.Schema); |
|
|
|
b.ToTable(options.TablePrefix + "ApiResourceClaims", options.Schema); |
|
|
|
|
|
|
|
b.ConfigureByConvention(); |
|
|
|
|
|
|
|
@ -281,19 +279,51 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore |
|
|
|
b.Property(x => x.Type).HasMaxLength(UserClaimConsts.TypeMaxLength).IsRequired(); |
|
|
|
}); |
|
|
|
|
|
|
|
builder.Entity<ApiResourceScope>(b => |
|
|
|
{ |
|
|
|
b.ToTable(options.TablePrefix + "ApiResourceScopes", options.Schema); |
|
|
|
|
|
|
|
b.ConfigureByConvention(); |
|
|
|
|
|
|
|
b.HasKey(x => new {x.ApiResourceId, x.Scope}); |
|
|
|
|
|
|
|
b.Property(x => x.Scope).HasMaxLength(ApiResourceScopeConsts.ScopeMaxLength).IsRequired(); |
|
|
|
}); |
|
|
|
|
|
|
|
builder.Entity<ApiResourceProperty>(b => |
|
|
|
{ |
|
|
|
b.ToTable(options.TablePrefix + "ApiResourceProperties", options.Schema); |
|
|
|
|
|
|
|
b.ConfigureByConvention(); |
|
|
|
|
|
|
|
b.HasKey(x => new {x.ApiResourceId, x.Key, x.Value}); |
|
|
|
|
|
|
|
b.Property(x => x.Key).HasMaxLength(ApiResourcePropertyConsts.KeyMaxLength).IsRequired(); |
|
|
|
if (IsDatabaseProvider(builder, options, EfCoreDatabaseProvider.MySql, EfCoreDatabaseProvider.Oracle)) |
|
|
|
{ |
|
|
|
ApiResourcePropertyConsts.ValueMaxLength = 300; |
|
|
|
} |
|
|
|
b.Property(x => x.Value).HasMaxLength(ApiResourcePropertyConsts.ValueMaxLength).IsRequired(); |
|
|
|
}); |
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region ApiScope
|
|
|
|
|
|
|
|
builder.Entity<ApiScope>(b => |
|
|
|
{ |
|
|
|
b.ToTable(options.TablePrefix + "ApiScopes", options.Schema); |
|
|
|
|
|
|
|
b.ConfigureByConvention(); |
|
|
|
|
|
|
|
b.HasKey(x => new {x.ApiResourceId, x.Name}); |
|
|
|
|
|
|
|
b.Property(x => x.Name).HasMaxLength(ApiScopeConsts.NameMaxLength).IsRequired(); |
|
|
|
b.Property(x => x.DisplayName).HasMaxLength(ApiScopeConsts.DisplayNameMaxLength); |
|
|
|
b.Property(x => x.Description).HasMaxLength(ApiScopeConsts.DescriptionMaxLength); |
|
|
|
|
|
|
|
b.HasMany(x => x.UserClaims).WithOne().HasForeignKey(x => new {x.ApiResourceId, x.Name}).IsRequired(); |
|
|
|
b.HasIndex(x => x.Name).IsUnique(); |
|
|
|
|
|
|
|
b.HasMany(x => x.UserClaims).WithOne().HasForeignKey(x => x.ApiScopeId).IsRequired(); |
|
|
|
b.HasMany(x => x.Properties).WithOne().HasForeignKey(x => x.ApiScopeId).IsRequired(); |
|
|
|
}); |
|
|
|
|
|
|
|
builder.Entity<ApiScopeClaim>(b => |
|
|
|
@ -302,29 +332,90 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore |
|
|
|
|
|
|
|
b.ConfigureByConvention(); |
|
|
|
|
|
|
|
b.HasKey(x => new {x.ApiResourceId, x.Name, x.Type}); |
|
|
|
b.HasKey(x => new {x.ApiScopeId, x.Type}); |
|
|
|
|
|
|
|
b.Property(x => x.Type).HasMaxLength(UserClaimConsts.TypeMaxLength).IsRequired(); |
|
|
|
b.Property(x => x.Name).HasMaxLength(ApiScopeConsts.NameMaxLength).IsRequired(); |
|
|
|
}); |
|
|
|
|
|
|
|
builder.Entity<ApiScopeProperty>(b => |
|
|
|
{ |
|
|
|
b.ToTable(options.TablePrefix + "ApiScopeProperties", options.Schema); |
|
|
|
|
|
|
|
b.ConfigureByConvention(); |
|
|
|
|
|
|
|
b.HasKey(x => new {x.ApiScopeId, x.Key, x.Value}); |
|
|
|
|
|
|
|
b.Property(x => x.Key).HasMaxLength(ApiScopePropertyConsts.KeyMaxLength).IsRequired(); |
|
|
|
if (IsDatabaseProvider(builder, options, EfCoreDatabaseProvider.MySql, EfCoreDatabaseProvider.Oracle)) |
|
|
|
{ |
|
|
|
ApiScopePropertyConsts.ValueMaxLength = 300; |
|
|
|
} |
|
|
|
b.Property(x => x.Value).HasMaxLength(ApiScopePropertyConsts.ValueMaxLength).IsRequired(); |
|
|
|
}); |
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region PersistedGrant
|
|
|
|
|
|
|
|
builder.Entity<PersistedGrant>(b => |
|
|
|
{ |
|
|
|
b.ToTable(options.TablePrefix + "PersistedGrants", options.Schema); |
|
|
|
|
|
|
|
b.ConfigureByConvention(); |
|
|
|
|
|
|
|
b.Property(x => x.Key).HasMaxLength(PersistedGrantConsts.KeyMaxLength).ValueGeneratedNever(); |
|
|
|
b.Property(x => x.Type).HasMaxLength(PersistedGrantConsts.TypeMaxLength).IsRequired(); |
|
|
|
b.Property(x => x.SubjectId).HasMaxLength(PersistedGrantConsts.SubjectIdMaxLength); |
|
|
|
b.Property(x => x.SessionId).HasMaxLength(PersistedGrantConsts.SessionIdMaxLength); |
|
|
|
b.Property(x => x.ClientId).HasMaxLength(PersistedGrantConsts.ClientIdMaxLength).IsRequired(); |
|
|
|
b.Property(x => x.Description).HasMaxLength(PersistedGrantConsts.DescriptionMaxLength); |
|
|
|
b.Property(x => x.CreationTime).IsRequired(); |
|
|
|
|
|
|
|
if (IsDatabaseProvider(builder, options, EfCoreDatabaseProvider.MySql)) |
|
|
|
{ |
|
|
|
PersistedGrantConsts.DataMaxLengthValue = 10000; //TODO: MySQL accepts 20.000. We can consider to change in v3.0.
|
|
|
|
} |
|
|
|
|
|
|
|
b.Property(x => x.Data).HasMaxLength(PersistedGrantConsts.DataMaxLengthValue).IsRequired(); |
|
|
|
|
|
|
|
b.HasKey(x => x.Key); //TODO: What about Id!!!
|
|
|
|
|
|
|
|
b.HasIndex(x => new {x.SubjectId, x.ClientId, x.Type}); |
|
|
|
b.HasIndex(x => new {x.SubjectId, x.SessionId, x.Type}); |
|
|
|
b.HasIndex(x => x.Expiration); |
|
|
|
}); |
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region DeviceFlowCodes
|
|
|
|
|
|
|
|
builder.Entity<DeviceFlowCodes>(b => |
|
|
|
{ |
|
|
|
b.ToTable(options.TablePrefix + "DeviceFlowCodes", options.Schema); |
|
|
|
|
|
|
|
b.ConfigureByConvention(); |
|
|
|
|
|
|
|
b.Property(x => x.DeviceCode).HasMaxLength(200).IsRequired(); |
|
|
|
b.Property(x => x.UserCode).HasMaxLength(200).IsRequired(); |
|
|
|
b.Property(x => x.SubjectId).HasMaxLength(200); |
|
|
|
b.Property(x => x.ClientId).HasMaxLength(200).IsRequired(); |
|
|
|
b.Property(x => x.DeviceCode).HasMaxLength(DeviceFlowCodesConsts.DeviceCodeMaxLength).IsRequired(); |
|
|
|
b.Property(x => x.UserCode).HasMaxLength(DeviceFlowCodesConsts.UserCodeMaxLength).IsRequired(); |
|
|
|
b.Property(x => x.SubjectId).HasMaxLength(DeviceFlowCodesConsts.SubjectIdMaxLength); |
|
|
|
b.Property(x => x.SessionId).HasMaxLength(DeviceFlowCodesConsts.SessionIdMaxLength); |
|
|
|
b.Property(x => x.ClientId).HasMaxLength(DeviceFlowCodesConsts.ClientIdMaxLength).IsRequired(); |
|
|
|
b.Property(x => x.Description).HasMaxLength(DeviceFlowCodesConsts.DescriptionMaxLength); |
|
|
|
b.Property(x => x.CreationTime).IsRequired(); |
|
|
|
b.Property(x => x.Expiration).IsRequired(); |
|
|
|
b.Property(x => x.Data).HasMaxLength(50000).IsRequired(); |
|
|
|
|
|
|
|
b.HasIndex(x => new {x.UserCode}).IsUnique(); |
|
|
|
if (IsDatabaseProvider(builder, options, EfCoreDatabaseProvider.MySql)) |
|
|
|
{ |
|
|
|
DeviceFlowCodesConsts.DataMaxLength = 10000; //TODO: MySQL accepts 20.000. We can consider to change in v3.0.
|
|
|
|
} |
|
|
|
b.Property(x => x.Data).HasMaxLength(DeviceFlowCodesConsts.DataMaxLength).IsRequired(); |
|
|
|
|
|
|
|
b.HasIndex(x => new {x.UserCode}); |
|
|
|
b.HasIndex(x => x.DeviceCode).IsUnique(); |
|
|
|
b.HasIndex(x => x.Expiration); |
|
|
|
}); |
|
|
|
|
|
|
|
#endregion
|
|
|
|
} |
|
|
|
|
|
|
|
private static bool IsDatabaseProvider( |
|
|
|
@ -344,4 +435,4 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore |
|
|
|
return false; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|