private void AddModelMetadata(Project project , string controllerName , string controllerRootName , string outputPath , string defaultNamespace , string modelTypeName , string methodName , MetaTableInfo queryMetaTable , MetaTableInfo resultMetaTable , bool overwrite = false) { var templatePath = Path.Combine("MvcScaffolderSP", "Model", "ViewModel"); Dictionary <string, object> templateParams = new Dictionary <string, object>() { { "Namespace", defaultNamespace } , { "ModelTypeName", modelTypeName } , { "MethodName", methodName } , { "QueryMetaTable", queryMetaTable } , { "ResultMetaTable", resultMetaTable } }; AddFileFromTemplate(project: project , outputPath: outputPath , templateName: templatePath , templateParameters: templateParams , skipIfExists: !overwrite); }
// Setting Columns : display name, allow null private bool?ShowColumnSetting() { var modelType = _codeGeneratorViewModel.ModelType.CodeType; string savefolderPath = Path.Combine(path1: Context.ActiveProject.GetFullPath(), path2: "CodeGen"); StorageMan <MetaTableInfo> sm = new StorageMan <MetaTableInfo>(modelTypeName: modelType.Name, savefolderPath: savefolderPath); MetaTableInfo data = sm.Read(); if (data.Columns.Any()) { _ModelMetadataVM = new ModelMetadataViewModel(dataModel: data); } else { //string dbContextTypeName = _codeGeneratorViewModel.DbContextModelType.TypeName; //ICodeTypeService codeTypeService = GetService<ICodeTypeService>(); //CodeType dbContext = codeTypeService.GetCodeType(project: Context.ActiveProject, fullName: dbContextTypeName); //IEntityFrameworkService efService = Context.ServiceProvider.GetService<IEntityFrameworkService>(); //ModelMetadata efMetadata = efService.AddRequiredEntity(context: Context, contextTypeFullName: dbContextTypeName, entityTypeFullName: modelType.FullName); var fullName = modelType.FullName; var efMetadata = GetEfMetadata(fullName); _ModelMetadataVM = new ModelMetadataViewModel(efMetadata: efMetadata); } ModelMetadataDialog dialog = new ModelMetadataDialog(viewModel: _ModelMetadataVM); bool?isOk = dialog.ShowModal(); if (isOk == true) { sm.Save(data: _ModelMetadataVM.DataModel); } return(isOk); }
static void Main(string[] args) { //mysql //string tableName = "abpusers"; //var metaTableInfoList = MetaTableInfo.GetMetaTableInfoListForMysql(tableName); //反射程序集的方式生成相应代码 string className = "Order";//跟类名保持一致 var metaTableInfoList = MetaTableInfo.GetMetaTableInfoListForAssembly(className); //得到主键类型 var propertyType = metaTableInfoList.FirstOrDefault(m => m.Name == "Id").PropertyType; // server端生成 CodeGeneratorHelper.SetAppServiceIntercafeClass(className, propertyType); CodeGeneratorHelper.SetAppServiceClass(className, propertyType); CodeGeneratorHelper.SetCreateOrEditInputClass(className, metaTableInfoList); CodeGeneratorHelper.SetGetForEditOutputClass(className); CodeGeneratorHelper.SetGetInputClass(className); CodeGeneratorHelper.SetListDtoClass(className, metaTableInfoList); CodeGeneratorHelper.SetCreateOrEditInputClass(className, metaTableInfoList); CodeGeneratorHelper.SetExportingIntercafeClass(className); CodeGeneratorHelper.SetExportingClass(className, metaTableInfoList); //CodeGeneratorHelper.SetConstsClass(className); 若使用 SetAppPermissions,SetAppAuthorizationProvider,SetZh_CN_LocalizationDictionary_Here 三个方法 就可弃用该方法 CodeGeneratorHelper.SetAppPermissions(className); CodeGeneratorHelper.SetAppAuthorizationProvider(className); CodeGeneratorHelper.SetZh_CN_LocalizationDictionary_Here(className, metaTableInfoList[0].ClassAnnotation); ////client CodeGeneratorHelper.SetControllerClass(className, propertyType); CodeGeneratorHelper.SetCreateOrEditHtmlTemplate(className, metaTableInfoList); CodeGeneratorHelper.SetCreateOrEditJs(className); CodeGeneratorHelper.SetCreateOrEditViewModelClass(className); CodeGeneratorHelper.SetIndexHtmlTemplate(className, metaTableInfoList); CodeGeneratorHelper.SetIndexJsTemplate(className, metaTableInfoList); }
private void fillCodeTypeMembers(MetaTableInfo dataModel, CodeType codeType, bool IsHiddenFields = true) { foreach (CodeElement ce in codeType.Members) { var prop = ce as CodeProperty; if (prop == null) { continue; } if (IsHiddenFields && VmUtils.DefaultHiddenFields.Contains(prop.Name)) { continue; //默认不显示的字段 } if (dataModel.Columns.Any(d => d.Name == prop.Name)) { continue; //已存在 } if (prop.Type.AsFullName.StartsWith("System.Collections")) { continue; //不显示集合类 } dataModel.Columns.Add(new MetaColumnInfo(prop)); } foreach (CodeElement c in codeType.Bases) { if (c.IsCodeType) { fillCodeTypeMembers(dataModel, (CodeType)c); } } }
// Setting Columns : display name, allow null private bool?ShowColumnSetting() { var modelType = _codeGeneratorViewModel.ModelType.CodeType; string savefolderPath = Path.Combine(Context.ActiveProject.GetFullPath(), "CodeGen"); StorageMan <MetaTableInfo> sm = new StorageMan <MetaTableInfo>(modelType.Name, savefolderPath); MetaTableInfo data = sm.Read(); if (data.Columns.Any()) { _ModelMetadataVM = new ModelMetadataViewModel(data); } else { string dbContextTypeName = _codeGeneratorViewModel.DbContextModelType.TypeName; ICodeTypeService codeTypeService = GetService <ICodeTypeService>(); CodeType dbContext = codeTypeService.GetCodeType(Context.ActiveProject, dbContextTypeName); IEntityFrameworkService efService = Context.ServiceProvider.GetService <IEntityFrameworkService>(); ModelMetadata efMetadata = efService.AddRequiredEntity(Context, dbContextTypeName, modelType.FullName); _ModelMetadataVM = new ModelMetadataViewModel(efMetadata); } ModelMetadataDialog dialog = new ModelMetadataDialog(_ModelMetadataVM); bool?isOk = dialog.ShowModal(); if (isOk == true) { sm.Save(_ModelMetadataVM.DataModel); } return(isOk); }
public MetadataSettingViewModel(CodeType codeType, bool IsHiddenFields = true) { MetaTableInfo dataModel = new MetaTableInfo(); fillCodeTypeMembers(dataModel, codeType, IsHiddenFields); Init(codeType, dataModel); }
private void Init(MetaTableInfo dataModel) { this.DataModel = dataModel; this.Columns = new ObservableCollection <MetadataFieldViewModel>(); foreach (MetaColumnInfo f1 in dataModel.Columns) { this.Columns.Add(new MetadataFieldViewModel(f1)); } }
public MetadataSettingViewModel(ModelMetadata efMetadata) { MetaTableInfo dataModel = new MetaTableInfo(); foreach (Microsoft.AspNet.Scaffolding.Core.Metadata.PropertyMetadata p1 in efMetadata.Properties) { dataModel.Columns.Add(new MetaColumnInfo(p1)); } Init(dataModel); }
public MetadataSettingViewModel(CodeType codeType) { MetaTableInfo dataModel = new MetaTableInfo(); foreach (CodeElement ce in codeType.Members) { dataModel.Columns.Add(new MetaColumnInfo((CodeProperty)ce)); } Init(dataModel); }
private string GetAllColumnsText(MetaTableInfo table) { string result = ""; foreach (MetaColumnInfo column in table.Columns) { result += "," + column.Name; } return(result.Substring(1)); }
public MetadataSettingViewModel(CodeFunction codefunction) { MetaTableInfo dataModel = new MetaTableInfo(); foreach (CodeElement ce in codefunction.Parameters) { CodeParameter p1 = (CodeParameter)ce; dataModel.Columns.Add(new MetaColumnInfo(p1)); } Init(dataModel); }
public IEnumerable <FieldInfoDto> Resolve(MetaTableInfo source, TableInfoDto destination, IEnumerable <FieldInfoDto> destMember, ResolutionContext context) { var list = new List <FieldInfoDto>(); foreach (var fieldInfo in source.FieldInfos) { list.Add(context.Mapper.Map <FieldInfoDto>(fieldInfo)); } return(list); }
static void Main(string[] args) { string className = "User"; var metaTableInfoList = MetaTableInfo.GetMetaTableInfoList(className); //得到主键类型 var propertyType = metaTableInfoList.FirstOrDefault(m => m.Name == "Id").PropertyType; CodeGeneratorHelper.SetAppServiceIntercafeClass(className, propertyType); CodeGeneratorHelper.SetAppServiceClass(className, propertyType); CodeGeneratorHelper.SetCreateOrEditInputClass(className, metaTableInfoList); }
static void Main(string[] args) { #region 获取数据源的两种方式mysql和反射程序集 //mysql //string tableName = "abpusers";//表名 //var metaTableInfoList = MetaTableInfo.GetMetaTableInfoListForMysql(tableName); //反射程序集的方式生成相应代码 var metaTableInfoList = MetaTableInfo.GetMetaTableInfoListForAssembly(); foreach (var item in metaTableInfoList) { string className = item.ClassName;//跟类名保持一致 CodeGeneratorHelper.SetAuthorizationProvider(className); CodeGeneratorHelper.SetAuthorizationPermissions(className); //得到主键类型 var propertyType = item.MetaTableInfos.FirstOrDefault(m => m.Name == "Id").PropertyType; // server端生成 CodeGeneratorHelper.SetAppServiceIntercafeClass(className, propertyType); CodeGeneratorHelper.SetAppServiceClass(className, propertyType); CodeGeneratorHelper.SetCreateOrEditInputClass(className, item.MetaTableInfos); CodeGeneratorHelper.SetDeleteInputClass(className, item.MetaTableInfos, propertyType); CodeGeneratorHelper.SetGetAllInputClass(className, item.MetaTableInfos); CodeGeneratorHelper.SetGetInputClass(className, item.MetaTableInfos, propertyType); CodeGeneratorHelper.SetUpdateInputClass(className, item.MetaTableInfos, propertyType); CodeGeneratorHelper.SetDtoOutClass(className, item.MetaTableInfos, propertyType); CodeGeneratorHelper.SetCreateOrEditViewModelClass(className); CodeGeneratorHelper.SetControllerClass(className, propertyType); CodeGeneratorHelper.SetIndexHtmlTemplate(className, item.MetaTableInfos); CodeGeneratorHelper.SetCreateHtmlTemplate(className, item.MetaTableInfos); CodeGeneratorHelper.SetUpdateHtmlTemplate(className, item.MetaTableInfos); CodeGeneratorHelper.SetIndexJsTemplate(className, item.MetaTableInfos); CodeGeneratorHelper.SetUpdateJs(className); } #endregion }
// Collects the common data needed by all of the scaffolded output and generates: // 1) Add ViewModel // 2) Add Controller // 3) Add View private void GenerateCode(Project project, string selectionRelativePath, SPCodeGeneratorViewModel 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); string methodName = _codeGeneratorViewModel.MethodTypeName; string controllerName = codeGeneratorViewModel.ControllerName; string controllerRootName = controllerName.Replace("Controller", ""); // add Metadata for Model string defaultNamespace = modelType.Namespace.FullName; MetaTableInfo queryMetaTable = _codeGeneratorViewModel.QueryFormViewModel.DataModel; MetaTableInfo resultMetaTable = _codeGeneratorViewModel.ResultListViewModel.DataModel; string outputFolderPath = Path.Combine(GetModelFolderPath(selectionRelativePath), modelType.Name + "ViewModels"); AddModelMetadata(project: project , controllerName: controllerName , controllerRootName: controllerRootName , outputPath: outputFolderPath , defaultNamespace: defaultNamespace , modelTypeName: modelType.Name , methodName: methodName , queryMetaTable: queryMetaTable , resultMetaTable: resultMetaTable , overwrite: codeGeneratorViewModel.OverwriteViews); // Create Controller outputFolderPath = Path.Combine(selectionRelativePath, controllerName); AddMvcController(project: project , controllerName: controllerName , controllerRootName: controllerRootName , outputPath: outputFolderPath , ContextTypeName: dbContext.Name , modelType: modelType , efMetadata: null/*efMetadata*/ , overwrite: codeGeneratorViewModel.OverwriteViews); if (!codeGeneratorViewModel.GenerateViews) { return; } // Create Views string viewRootPath = GetViewsFolderPath(selectionRelativePath); string viewFolderPath = Path.Combine(viewRootPath, controllerRootName); foreach (string viewName in new string[2] { "Index", "_Index" }) { AddView(project, viewFolderPath, viewName, controllerRootName, modelType , null /*efMetadata*/ , referenceScriptLibraries: codeGeneratorViewModel.ReferenceScriptLibraries , isLayoutPageSelected: codeGeneratorViewModel.LayoutPageSelected , layoutPageFile: codeGeneratorViewModel.LayoutPageFile , overwrite: codeGeneratorViewModel.OverwriteViews ); } //_ViewStart & Create _Layout if (codeGeneratorViewModel.LayoutPageSelected) { string areaName = GetAreaName(selectionRelativePath); AddDependencyFile(project, viewRootPath, areaName); } }
public MetadataSettingViewModel(MetaTableInfo dataModel) { Init(dataModel); }
public ModelMetadataViewModel(MetaTableInfo dataModel) : base(dataModel) { }