internal static string RepositoryOutPath(MvcCodeGeneratorViewModel codeGeneratorViewModel) { return(Path.Combine( "Project", "Repository", codeGeneratorViewModel.ModelType.ShortName + "Repos")); }
public static string EditViewModelOutPath(MvcCodeGeneratorViewModel codeGeneratorViewModel) { return(Path.Combine( "AppCode", "Project", "ViewModel", codeGeneratorViewModel.ModelType.ShortName + "EditViewModel")); }
internal static string ServiceOutPath(MvcCodeGeneratorViewModel codeGeneratorViewModel) { return(Path.Combine( "AppCode", "Project", "Service", codeGeneratorViewModel.ModelType.ShortName + "Service")); }
// Shows the Visual Studio dialog that collects scaffolding options // from the user. // Passing the dialog to this method so that all scaffolder UIs // are modal is still an open question and tracked by bug 578173. public override bool ShowUIAndValidate() { _codeGeneratorViewModel = new MvcCodeGeneratorViewModel(Context); MvcScaffolderDialog window = new MvcScaffolderDialog(_codeGeneratorViewModel); bool?isOk = window.ShowModal(); if (isOk == true) { Validate(); if (_codeGeneratorViewModel.GenerateViews) { isOk = ShowColumnSetting(); } } return(isOk == true); }
public MvcScaffolderDialog(MvcCodeGeneratorViewModel viewModel) { if (viewModel == null) { throw new ArgumentNullException("viewModel"); } InitializeComponent(); //viewModel.PromptForNewDataContextTypeName += model => //{ // var dialog = new NewDataContextDialog(model); // var result = dialog.ShowModal(); // model.Canceled = !result.HasValue || !result.Value; //}; viewModel.Close += result => DialogResult = result; DataContext = viewModel; }
//public override IEnumerable<string> TemplateFolders //{ // get // { // var baseTemplatePath = Path.Combine(Path.GetDirectoryName(path: GetType().Assembly.Location), // "baseTemplatePath"); // var projectTemplatePath = // Path.Combine(path1: Context.ActiveProject.GetFullPath(), "projectTemplatePath"); // return new[] { projectTemplatePath, baseTemplatePath }; // } //} // Shows the Visual Studio dialog that collects scaffolding options // from the user. // Passing the dialog to this method so that all scaffolder UIs // are modal is still an open question and tracked by bug 578173. public override bool ShowUIAndValidate() { _codeGeneratorViewModel = new MvcCodeGeneratorViewModel(context: Context); MvcScaffolderDialog window = new MvcScaffolderDialog(viewModel: _codeGeneratorViewModel); bool?isOk = window.ShowModal(); if (isOk == true) { //Alert.Trace("Validate"); Validate(); if (_codeGeneratorViewModel.GenerateViews) { isOk = ShowColumnSetting(); } } //Alert.Trace("ShowUIAndValidate" + isOk); return(isOk == true); }
// Collects the common data needed by all of the scaffolded output and generates: // 1) Add Controller // 2) Add View private void GenerateCode(Project project, string selectionRelativePath, MvcCodeGeneratorViewModel codeGeneratorViewModel) { // Get Model Type var modelType = codeGeneratorViewModel.ModelType.CodeType; // Get the dbContext string dbContextTypeName = codeGeneratorViewModel.DbContextModelType.TypeName; ICodeTypeService codeTypeService = GetService <ICodeTypeService>(); CodeType dbContext = codeTypeService.GetCodeType(project, dbContextTypeName); // Get the Entity Framework Meta Data IEntityFrameworkService efService = Context.ServiceProvider.GetService <IEntityFrameworkService>(); ModelMetadata efMetadata = efService.AddRequiredEntity(Context, dbContextTypeName, modelType.FullName); // Create Controller string controllerName = codeGeneratorViewModel.ControllerName; string controllerRootName = controllerName.Replace("Controller", ""); string outputFolderPath = Path.Combine(selectionRelativePath, controllerName); string viewPrefix = codeGeneratorViewModel.ViewPrefix; string programTitle = codeGeneratorViewModel.ProgramTitle; AddMvcController(project: project , controllerName: controllerName , controllerRootName: controllerRootName , outputPath: outputFolderPath , ContextTypeName: dbContext.Name , modelType: modelType , efMetadata: efMetadata , viewPrefix: viewPrefix , overwrite: codeGeneratorViewModel.OverwriteViews); if (!codeGeneratorViewModel.GenerateViews) { return; } // add Metadata for Model outputFolderPath = Path.Combine(GetModelFolderPath(selectionRelativePath), modelType.Name + "Metadata"); AddModelMetadata(project: project , controllerName: controllerName , controllerRootName: controllerRootName , outputPath: outputFolderPath , ContextTypeName: dbContext.Name , modelType: modelType , efMetadata: efMetadata , overwrite: codeGeneratorViewModel.OverwriteViews); //_ViewStart & Create _Layout string viewRootPath = GetViewsFolderPath(selectionRelativePath); if (codeGeneratorViewModel.LayoutPageSelected) { string areaName = GetAreaName(selectionRelativePath); AddDependencyFile(project, viewRootPath, areaName); } // EditorTemplates, DisplayTemplates AddDataFieldTemplates(project, viewRootPath); // Views for C.R.U.D string viewFolderPath = Path.Combine(viewRootPath, controllerRootName); foreach (string viewName in new string[4] { "Index", "Create", "Edit", "EditForm" }) { //string viewName = string.Format(view, viewPrefix); //未完成 /* * Index CustIndex * Create CustCreate * Edit CustEdit * EditForm CustEditForm * * _Edit _CustEdit */ AddView(project , viewFolderPath, viewPrefix, viewName, programTitle , controllerRootName, modelType, efMetadata , referenceScriptLibraries: codeGeneratorViewModel.ReferenceScriptLibraries , isLayoutPageSelected: codeGeneratorViewModel.LayoutPageSelected , layoutPageFile: codeGeneratorViewModel.LayoutPageFile , overwrite: codeGeneratorViewModel.OverwriteViews ); } }
// Collects the common data needed by all of the scaffolded output and generates: // 1) Add Controller // 2) Add View private void GenerateCode(Project project, string selectionRelativePath, MvcCodeGeneratorViewModel codeGeneratorViewModel) { // Get Model Type var modelType = codeGeneratorViewModel.ModelType.CodeType; // Get the dbContext string dbContextTypeName = codeGeneratorViewModel.DbContextModelType.TypeName; ICodeTypeService codeTypeService = GetService <ICodeTypeService>(); CodeType dbContext = codeTypeService.GetCodeType(project: project, fullName: dbContextTypeName); //efService.AddRequiredEntity 正式會沒回應,改GetEfMetadata反射Model設定Metadata // Get the Entity Framework Meta Data //IEntityFrameworkService efService = Context.ServiceProvider.GetService<IEntityFrameworkService>(); //ModelMetadata efMetadata = efService.AddRequiredEntity(context: Context, // contextTypeFullName: dbContextTypeName, entityTypeFullName: modelType.FullName) var efMetadata = GetEfMetadata(modelType.FullName); // Create Controller string controllerName = codeGeneratorViewModel.ControllerName; string controllerRootName = controllerName.Replace(oldValue: "Controller", newValue: ""); string outputFolderPath = Path.Combine(path1: selectionRelativePath, path2: controllerName); string viewPrefix = codeGeneratorViewModel.ViewPrefix; string programTitle = codeGeneratorViewModel.ProgramTitle; //Alert.Trace("AddMvcController"); if (codeGeneratorViewModel.GenerateApiController) { AddMvcController(project: project , controllerName: controllerName , controllerRootName: controllerRootName , outputPath: outputFolderPath , ContextTypeName: dbContext.Name , modelType: modelType , efMetadata: efMetadata , viewPrefix: viewPrefix , overwrite: codeGeneratorViewModel.OverwriteViews); } if (codeGeneratorViewModel.GenerateService) { AddService(project: project , controllerName: controllerName , controllerRootName: controllerRootName , outputPath: PathHelper.ServiceOutPath(codeGeneratorViewModel: codeGeneratorViewModel) , ContextTypeName: dbContext.Name , modelType: modelType , efMetadata: efMetadata , viewPrefix: viewPrefix , overwrite: codeGeneratorViewModel.OverwriteViews); } if (codeGeneratorViewModel.GenerateRepository) { project = (Project)_visualStudioUtils.FindProjectByName("DAL").Object; AddRepository(project: project , controllerName: controllerName , controllerRootName: controllerRootName , outputPath: PathHelper.RepositoryOutPath(codeGeneratorViewModel: codeGeneratorViewModel) , ContextTypeName: dbContext.Name , modelType: modelType , efMetadata: efMetadata , viewPrefix: viewPrefix , overwrite: codeGeneratorViewModel.OverwriteViews); } // add Metadata for Model if (codeGeneratorViewModel.GenerateViews) { AddListViewModel(project: Context.ActiveProject , controllerName: controllerName , controllerRootName: controllerRootName , outputPath: PathHelper.ListViewModelOutPath(codeGeneratorViewModel: codeGeneratorViewModel) , ContextTypeName: dbContext.Name , modelType: modelType , efMetadata: efMetadata , overwrite: codeGeneratorViewModel.OverwriteViews); AddEditViewModel(project: Context.ActiveProject , controllerName: controllerName , controllerRootName: controllerRootName , outputPath: PathHelper.EditViewModelOutPath(codeGeneratorViewModel: codeGeneratorViewModel) , ContextTypeName: dbContext.Name , modelType: modelType , efMetadata: efMetadata , overwrite: codeGeneratorViewModel.OverwriteViews); } ////_ViewStart & Create _Layout //string viewRootPath = GetViewsFolderPath(selectionRelativePath); //if (codeGeneratorViewModel.LayoutPageSelected) //{ // string areaName = GetAreaName(selectionRelativePath); // AddDependencyFile(project, viewRootPath, areaName); //} //// EditorTemplates, DisplayTemplates //AddDataFieldTemplates(project, viewRootPath); //// Views for C.R.U.D //string viewFolderPath = Path.Combine(viewRootPath, controllerRootName); //foreach (string viewName in new string[4] { "Index", "Create", "Edit", "EditForm" }) //{ // //string viewName = string.Format(view, viewPrefix); // //未完成 // /* // Index CustIndex // Create CustCreate // Edit CustEdit // EditForm CustEditForm // * // _Edit _CustEdit // */ // AddView(project // , viewFolderPath, viewPrefix, viewName, programTitle // , controllerRootName, modelType, efMetadata // , referenceScriptLibraries: codeGeneratorViewModel.ReferenceScriptLibraries // , isLayoutPageSelected: codeGeneratorViewModel.LayoutPageSelected // , layoutPageFile: codeGeneratorViewModel.LayoutPageFile // , overwrite: codeGeneratorViewModel.OverwriteViews // ); //} }