private static async Task <BaseCodeGenDescriptor> GenerateCode(string metadataUri, Version edmxVersion, ConnectedServiceHandlerContext context, Project project)
        {
            BaseCodeGenDescriptor codeGenDescriptor;

            if (edmxVersion == Common.Constants.EdmxVersion1 ||
                edmxVersion == Common.Constants.EdmxVersion2 ||
                edmxVersion == Common.Constants.EdmxVersion3)
            {
                codeGenDescriptor = new V3CodeGenDescriptor(metadataUri, context, project);
            }
            else if (edmxVersion == Common.Constants.EdmxVersion4)
            {
                codeGenDescriptor = new V4CodeGenDescriptor(metadataUri, context, project);
            }
            else
            {
                throw new Exception(string.Format(CultureInfo.InvariantCulture, "Not supported Edmx Version {0}", edmxVersion.ToString()));
            }

            await codeGenDescriptor.AddNugetPackages();

            await codeGenDescriptor.AddGeneratedClientCode();

            return(codeGenDescriptor);
        }
        private static async Task <BaseCodeGenDescriptor> GenerateCode(string metadataUri, Version edmxVersion, ConnectedServiceHandlerContext context)
        {
            var instance = (Instance)context.ServiceInstance;
            BaseCodeGenDescriptor codeGenDescriptor;

            if (edmxVersion == Common.Constants.EdmxVersion1 ||
                edmxVersion == Common.Constants.EdmxVersion2 ||
                edmxVersion == Common.Constants.EdmxVersion3)
            {
                codeGenDescriptor = new V3CodeGenDescriptor(context, instance);
            }
            else if (edmxVersion == Common.Constants.EdmxVersion4)
            {
                codeGenDescriptor = new V4CodeGenDescriptor(context, instance);
            }
            else
            {
                throw new Exception(string.Format(CultureInfo.InvariantCulture, "Not supported Edmx Version{0}", (edmxVersion != null ? $" {edmxVersion}." : ". Try with Endpoint ends \"/$metadata\".")));
            }

            var codeGenInstance = (Instance)context.ServiceInstance;

            codeGenDescriptor.UseNetworkCredentials      = codeGenInstance.ServiceConfig.UseNetworkCredentials;
            codeGenDescriptor.NetworkCredentialsUserName = codeGenInstance.ServiceConfig.NetworkCredentialsUserName;
            codeGenDescriptor.NetworkCredentialsPassword = codeGenInstance.ServiceConfig.NetworkCredentialsPassword;
            codeGenDescriptor.NetworkCredentialsDomain   = codeGenInstance.ServiceConfig.NetworkCredentialsDomain;

            codeGenDescriptor.UseWebProxy                        = codeGenInstance.ServiceConfig.UseWebProxy;
            codeGenDescriptor.UseWebProxyCredentials             = codeGenInstance.ServiceConfig.UseWebProxyCredentials;
            codeGenDescriptor.WebProxyNetworkCredentialsUserName = codeGenInstance.ServiceConfig.WebProxyNetworkCredentialsUserName;
            codeGenDescriptor.WebProxyNetworkCredentialsPassword = codeGenInstance.ServiceConfig.WebProxyNetworkCredentialsPassword;
            codeGenDescriptor.WebProxyNetworkCredentialsDomain   = codeGenInstance.ServiceConfig.WebProxyNetworkCredentialsDomain;
            codeGenDescriptor.WebProxyUri                        = codeGenInstance.ServiceConfig.WebProxyUri;

            await codeGenDescriptor.AddNugetPackages();

            await codeGenDescriptor.AddGeneratedClientCode();

            return(codeGenDescriptor);
        }