From 71d6318f9b68d503614fbc703781b5ff416803c6 Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 11 Oct 2024 14:35:52 +0800 Subject: [PATCH 1/4] Use the logic in the `ResolveAsync` method to implement the `Resolve` method. https://abp.io/support/questions/8040/Identity-related-tables-are-not-being-generated-in-tenant-database?CurrentPage=2#answer-3a158c73-082a-b523-0eea-0dc817b46423 --- .../MultiTenantConnectionStringResolver.cs | 28 +++++++++---------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs index 6ed12a3159..1d58b94a9f 100644 --- a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs +++ b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs @@ -118,27 +118,25 @@ public class MultiTenantConnectionStringResolver : DefaultConnectionStringResolv return connString!; } - //Fallback to tenant's default connection string if available - if (!tenantDefaultConnectionString.IsNullOrWhiteSpace()) - { - return tenantDefaultConnectionString!; - } - - //Try to find the specific connection string for given name - var connStringInOptions = Options.ConnectionStrings.GetOrDefault(connectionStringName); - if (!connStringInOptions.IsNullOrWhiteSpace()) + //Fallback to the mapped database for the specific connection string + var database = Options.Databases.GetMappedDatabaseOrNull(connectionStringName); + if (database != null && database.IsUsedByTenants) { - return connStringInOptions!; + connString = tenant.ConnectionStrings?.GetOrDefault(database.DatabaseName); + if (!connString.IsNullOrWhiteSpace()) + { + //Found for the tenant + return connString!; + } } - //Fallback to the global default connection string - var defaultConnectionString = Options.ConnectionStrings.Default; - if (!defaultConnectionString.IsNullOrWhiteSpace()) + //Fallback to tenant's default connection string if available + if (!tenantDefaultConnectionString.IsNullOrWhiteSpace()) { - return defaultConnectionString!; + return tenantDefaultConnectionString!; } - throw new AbpException("No connection string defined!"); + return base.Resolve(connectionStringName); } protected virtual async Task FindTenantConfigurationAsync(Guid tenantId) From 94a8c1f65ff50f02e49b8dc6fba64d21739dcd00 Mon Sep 17 00:00:00 2001 From: enisn Date: Fri, 11 Oct 2024 11:02:58 +0300 Subject: [PATCH 2/4] Adding PackageSourceMapping while adding new sources --- .../PackagePreviewSwitcher.cs | 5 ++- .../PackageSourceManager.cs | 44 ++++++++++++++++++- 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/PackagePreviewSwitcher.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/PackagePreviewSwitcher.cs index 2b9a595742..2272c02ea4 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/PackagePreviewSwitcher.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/PackagePreviewSwitcher.cs @@ -193,7 +193,7 @@ public class PackagePreviewSwitcher : ITransientDependency var folder = Path.GetDirectoryName(project); _packageSourceManager.Add(FindSolutionFolder(project) ?? folder, "ABP Nightly", - "https://www.myget.org/F/abp-nightly/api/v3/index.json"); + "https://www.myget.org/F/abp-nightly/api/v3/index.json", "Volo.*"); await _nugetPackagesVersionUpdater.UpdateSolutionAsync( project, @@ -213,7 +213,8 @@ public class PackagePreviewSwitcher : ITransientDependency var solutionAngularFolder = GetSolutionAngularFolder(solutionFolder); _packageSourceManager.Add(solutionFolder, "ABP Nightly", - "https://www.myget.org/F/abp-nightly/api/v3/index.json"); + "https://www.myget.org/F/abp-nightly/api/v3/index.json", + "Volo.*"); if (solutionPath != null) { diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/PackageSourceManager.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/PackageSourceManager.cs index 90364781d3..e4daa30838 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/PackageSourceManager.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/PackageSourceManager.cs @@ -1,5 +1,6 @@ using System; using System.IO; +using System.Linq; using System.Xml; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; @@ -16,7 +17,7 @@ public class PackageSourceManager : ITransientDependency Logger = NullLogger.Instance; } - public void Add(string solutionFolder, string sourceKey, string sourceValue) + public void Add(string solutionFolder, string sourceKey, string sourceValue, params string[] packageMappingPatterns) { var nugetConfigPath = GetNugetConfigPath(solutionFolder); @@ -61,6 +62,11 @@ public class PackageSourceManager : ITransientDependency sourceNodes?[0]?.AppendChild(newNode); + if (packageMappingPatterns.Any()) + { + ConfigurePackageSourceMappings(doc, sourceKey, packageMappingPatterns); + } + File.WriteAllText(nugetConfigPath, doc.OuterXml); } catch @@ -69,6 +75,42 @@ public class PackageSourceManager : ITransientDependency } } + protected virtual void ConfigurePackageSourceMappings(XmlDocument doc, string sourceKey, string[] packageMappingPatterns) + { + var packageMappingNodes = doc.SelectNodes("/configuration/packageSourceMapping"); + + if (packageMappingNodes == null || packageMappingNodes.Count == 0) + { + var packageSourcesNode = doc.SelectSingleNode("/configuration/packageSources"); + var packageMappingNode = doc.CreateElement("packageSourceMapping"); + foreach (var pattern in packageMappingPatterns) + { + var patternNode = doc.CreateElement("packageSource"); + var patternAttr = doc.CreateAttribute("key"); + patternAttr.Value = pattern; + patternNode.Attributes.Append(patternAttr); + packageMappingNode.AppendChild(patternNode); + } + packageSourcesNode?.ParentNode?.InsertAfter(packageMappingNode, packageSourcesNode); + } + else + { + var packageSourceNode = doc.CreateElement("packageSource"); + var sourceAttr = doc.CreateAttribute("key"); + sourceAttr.Value = sourceKey; + packageSourceNode.Attributes.Append(sourceAttr); + packageMappingNodes[0]?.AppendChild(packageSourceNode); + foreach (var pattern in packageMappingPatterns) + { + var packageNode = doc.CreateElement("package"); + var patternAttr = doc.CreateAttribute("pattern"); + patternAttr.Value = pattern; + packageNode.Attributes.Append(patternAttr); + packageSourceNode.AppendChild(packageNode); + } + } + } + public void Remove(string solutionFolder, string sourceKey) { var nugetConfigPath = GetNugetConfigPath(solutionFolder); From 4c61c241d6b43532595e22281464303ae8ea701b Mon Sep 17 00:00:00 2001 From: enisn Date: Fri, 11 Oct 2024 11:11:30 +0300 Subject: [PATCH 3/4] Don't create PackageSourceMapping if there is none --- .../ProjectModification/PackageSourceManager.cs | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/PackageSourceManager.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/PackageSourceManager.cs index e4daa30838..d43c63aa54 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/PackageSourceManager.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/PackageSourceManager.cs @@ -79,21 +79,7 @@ public class PackageSourceManager : ITransientDependency { var packageMappingNodes = doc.SelectNodes("/configuration/packageSourceMapping"); - if (packageMappingNodes == null || packageMappingNodes.Count == 0) - { - var packageSourcesNode = doc.SelectSingleNode("/configuration/packageSources"); - var packageMappingNode = doc.CreateElement("packageSourceMapping"); - foreach (var pattern in packageMappingPatterns) - { - var patternNode = doc.CreateElement("packageSource"); - var patternAttr = doc.CreateAttribute("key"); - patternAttr.Value = pattern; - patternNode.Attributes.Append(patternAttr); - packageMappingNode.AppendChild(patternNode); - } - packageSourcesNode?.ParentNode?.InsertAfter(packageMappingNode, packageSourcesNode); - } - else + if (packageMappingNodes != null && packageMappingNodes.Count != 0) { var packageSourceNode = doc.CreateElement("packageSource"); var sourceAttr = doc.CreateAttribute("key"); @@ -109,6 +95,7 @@ public class PackageSourceManager : ITransientDependency packageSourceNode.AppendChild(packageNode); } } + // If there is no packageSourceMapping node, leave it as it is. } public void Remove(string solutionFolder, string sourceKey) From aa78c49cb862fb600541716c7faab0df07a98c2f Mon Sep 17 00:00:00 2001 From: enisn Date: Fri, 11 Oct 2024 11:17:09 +0300 Subject: [PATCH 4/4] Add logs when there is no update on packageMapping --- .../PackageSourceManager.cs | 32 ++++++++++--------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/PackageSourceManager.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/PackageSourceManager.cs index d43c63aa54..2777c4b487 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/PackageSourceManager.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/PackageSourceManager.cs @@ -79,23 +79,25 @@ public class PackageSourceManager : ITransientDependency { var packageMappingNodes = doc.SelectNodes("/configuration/packageSourceMapping"); - if (packageMappingNodes != null && packageMappingNodes.Count != 0) + if (packageMappingNodes == null) { - var packageSourceNode = doc.CreateElement("packageSource"); - var sourceAttr = doc.CreateAttribute("key"); - sourceAttr.Value = sourceKey; - packageSourceNode.Attributes.Append(sourceAttr); - packageMappingNodes[0]?.AppendChild(packageSourceNode); - foreach (var pattern in packageMappingPatterns) - { - var packageNode = doc.CreateElement("package"); - var patternAttr = doc.CreateAttribute("pattern"); - patternAttr.Value = pattern; - packageNode.Attributes.Append(patternAttr); - packageSourceNode.AppendChild(packageNode); - } + // If there is no packageSourceMapping node, leave it as it is. + Logger.LogWarning($" node not found in 'NuGet.Config' file. Skipping adding patterns for '{sourceKey}' source."); + return; + } + var packageSourceNode = doc.CreateElement("packageSource"); + var sourceAttr = doc.CreateAttribute("key"); + sourceAttr.Value = sourceKey; + packageSourceNode.Attributes.Append(sourceAttr); + packageMappingNodes[0]?.AppendChild(packageSourceNode); + foreach (var pattern in packageMappingPatterns) + { + var packageNode = doc.CreateElement("package"); + var patternAttr = doc.CreateAttribute("pattern"); + patternAttr.Value = pattern; + packageNode.Attributes.Append(patternAttr); + packageSourceNode.AppendChild(packageNode); } - // If there is no packageSourceMapping node, leave it as it is. } public void Remove(string solutionFolder, string sourceKey)