protected override void AddTemplateParameters(IDictionary <string, object> templateParameters)
        {
            base.AddTemplateParameters(templateParameters);
            CodeType      codeType = base.Model.ModelType.CodeType;
            ModelMetadata codeModelModelMetadatum = new CodeModelModelMetadata(codeType);

            if ((int)codeModelModelMetadatum.PrimaryKeys.Length == 0)
            {
                throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, "The entity type '{0}' has no key defined. Define a key for this entity type.", codeType.Name));
            }
            templateParameters.Add("ModelMetadata", codeModelModelMetadatum);
            List <CodeType> codeTypes = new List <CodeType>()
            {
                codeType
            };

            templateParameters.Add("RequiredNamespaces", base.GetRequiredNamespaces(codeTypes));
            templateParameters.Add("ModelTypeNamespace", (codeType.Namespace != null ? codeType.Namespace.FullName : string.Empty));
            templateParameters.Add("ModelTypeName", codeType.Name);
            templateParameters.Add("UseAsync", base.Model.IsAsyncSelected);
            IEntityFrameworkService service = base.Context.ServiceProvider.GetService <IEntityFrameworkService>();
            string pluralizedWord           = service.GetPluralizedWord(codeType.Name, CultureInfo.InvariantCulture);

            templateParameters.Add("EntitySetName", pluralizedWord);
            CodeDomProvider codeDomProvider = ValidationUtil.GenerateCodeDomProvider(ProjectExtensions.GetCodeLanguage(base.Model.ActiveProject));
            string          str             = codeDomProvider.CreateEscapedIdentifier(codeType.Name.ToLowerInvariantFirstChar());
            string          str1            = codeDomProvider.CreateEscapedIdentifier(pluralizedWord.ToLowerInvariantFirstChar());

            templateParameters.Add("ModelVariable", str);
            templateParameters.Add("EntitySetVariable", str1);
            templateParameters.Add("ODataModificationMessage", "The WebApiConfig class may require additional changes to add a route for this controller. Merge these statements into the Register method of the WebApiConfig class as applicable. Note that OData URLs are case sensitive.");

            templateParameters.Add("IsLegacyOdataVersion", base.Framework.IsODataLegacy(base.Context));
        }
        public string GenerateDefaultServiceTypeName()
        {
            Project         project          = ServiceProject;
            string          serviceNamespace = project.GetDefaultNamespace();
            CodeDomProvider provider         = ValidationUtil.GenerateCodeDomProvider(project.GetCodeLanguage());

            ViewModelTypeName = serviceNamespace + ".I" + ModelType.ShortTypeName + MvcProjectUtil.ServiceTypeSuffix;

            return(ViewModelTypeName);
        }
        public string GenerateDefaultViewModelTypeName()
        {
            Project         project         = ActiveProject;
            string          modelsNamespace = MvcProjectUtil.GetDefaultModelsNamespace(project.GetDefaultNamespace());
            CodeDomProvider provider        = ValidationUtil.GenerateCodeDomProvider(project.GetCodeLanguage());

            ViewModelTypeName = modelsNamespace + "." + ModelType.ShortTypeName + MvcProjectUtil.ViewModelSuffix;

            return(ViewModelTypeName);
        }
        protected virtual void AddTemplateParameters(IDictionary <string, object> templateParameters)
        {
            if (templateParameters == null)
            {
                throw new ArgumentNullException("templateParameters");
            }

            if (String.IsNullOrEmpty(Model.ControllerName))
            {
                throw new InvalidOperationException(Resources.InvalidControllerName);
            }

            templateParameters.Add("ControllerName", Model.ControllerName);
            templateParameters.Add("ControllerNamespace", Model.ControllerNamespace);
            templateParameters.Add("AreaName", Model.AreaName ?? String.Empty);
            templateParameters.Add("ServiceName", Model.ServiceType.ShortTypeName);
            System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"\b([_\d\w]*)$");
            string viewModelShortName = regex.Match(Model.ViewModelTypeName).Result("$1");

            templateParameters.Add("ViewModelPropertys", Model.ViewModelPropertys.Where(p => p.Checked).ToList());

            CodeType modelCodeType = Context.ServiceProvider.GetService <ICodeTypeService>().GetCodeType(Context.ActiveProject, Model.ModelType.TypeName);

            CodeModelModelMetadata modelMetadata = new CodeModelModelMetadata(modelCodeType);

            CodeType modelType = Model.ModelType.CodeType;

            templateParameters.Add("ModelMetadata", modelMetadata);

            string modelTypeNamespace = modelType.Namespace != null ? modelType.Namespace.FullName : String.Empty;

            templateParameters.Add("ModelTypeNamespace", modelTypeNamespace);

            string viewModelNamespace = Model.ActiveProject.Name + "." + CommonFolderNames.Models;

            templateParameters.Add("ViewModelNamespace", viewModelNamespace);

            string validatorNamespace = Model.ActiveProject.Name + "." + CommonFolderNames.Validator;

            templateParameters.Add("ValidatorNamespace", validatorNamespace);

            string serviceNamespace = Model.ServiceProject.GetDefaultNamespace();

            templateParameters.Add("ServiceNamespace", serviceNamespace);

            string serviceShortTypeName = Model.ServiceType.ShortTypeName;

            templateParameters.Add("ServiceShortTypeName", serviceShortTypeName);

            string viewModelShortTypeName = Model.ViewModelType.ShortTypeName;

            templateParameters.Add("ViewModelShortTypeName", viewModelShortName);

            HashSet <string> requiredNamespaces = GetRequiredNamespaces(new List <CodeType>()
            {
                modelType
            });

            templateParameters.Add("RequiredNamespaces", requiredNamespaces);
            string modelTypeName = modelType.Name;

            templateParameters.Add("ModelTypeName", modelTypeName);
            templateParameters.Add("UseAsync", Model.IsAsyncSelected);

            CodeDomProvider provider      = ValidationUtil.GenerateCodeDomProvider(Model.ActiveProject.GetCodeLanguage());
            string          modelVariable = provider.CreateEscapedIdentifier(Model.ModelType.ShortTypeName.ToLowerInvariantFirstChar());

            templateParameters.Add("ModelVariable", modelVariable);
        }