/// <summary>
    /// 对存取器的数据库分片。
    /// </summary>
    /// <param name="shardingManager">给定的 <see cref="IShardingManager"/>。</param>
    /// <param name="accessor">给定的 <see cref="IAccessor"/>。</param>
    /// <param name="descriptor">输出 <see cref="ShardedDescriptor"/>。</param>
    /// <returns>返回 <see cref="IAccessor"/>。</returns>
    public static IAccessor ShardDatabase(this IShardingManager shardingManager, IAccessor accessor,
                                          [MaybeNullWhen(false)] out ShardedDescriptor descriptor)
    {
        var attribute = accessor.AccessorDescriptor?.Sharded;

        if (attribute is null)
        {
            descriptor = null;
            return(accessor);
        }

        descriptor = shardingManager.CreateDescriptor(attribute);

        descriptor.DefaultStrategy?.FormatSuffix(descriptor);

        var shardedName = descriptor.ToString();

        if (!shardedName.Equals(descriptor.BaseName, StringComparison.Ordinal))
        {
            var newConnectionString = accessor.CurrentConnectionString !
                                      .Replace(attribute.BaseName !, shardedName);

            accessor.ChangeConnection(newConnectionString);
        }

        return(accessor);
    }