private bool GenerateRepoFile(Table table) { var entityName = ToEntityName(table); var fileName = entityName + "Repository.cs"; var item = _repoDirectory.ProjectItems.FindByName(fileName); if (item != null) { return(false); } _tablePropertiesConfig.Clear(); //使用模板格式化字符串。 var code = ItemCodeTemplate.GetRepositoryFileCode( this.DomainName, this.DomainName + ".Repositories", entityName, _domainBaseEntityName ); //写到文件,并加入到项目中。 var file = Path.Combine(Path.GetDirectoryName(_repoDirectory.get_FileNames(1)), fileName); File.WriteAllText(file, code); _repoDirectory.ProjectItems.AddFromFile(file); return(true); }
private string RenderRefProperties(Table table) { var code = new StringBuilder(); foreach (var column in table.Columns) { if (column.IsForeignKey) { //如果属性名以 Id 结尾,则直接去除 Id 即可。 //否则,映射失败,直接以列名作为引用属性的名称,添加列名 + Id 与属性名的映射。 string propertyName = string.Empty; var columnName = column.Name; if (columnName.ToLower().EndsWith("id")) { propertyName = columnName.Substring(0, columnName.Length - 2); } else { propertyName = columnName; } //处理一些类似于 RefEntity_Id 的字段,去掉最后的下划线。 while (propertyName[0] == '_') { propertyName = propertyName.Substring(1); } while (propertyName[propertyName.Length - 1] == '_') { propertyName = propertyName.Substring(0, propertyName.Length - 1); } //如果字段与属性名不同,需要添加属性的配置。 var idProperty = propertyName + "Id"; if (!idProperty.EqualsIgnoreCase(columnName)) { _tablePropertiesConfig.Add(new PropertyConfig { PropertyName = idProperty, ColumnName = columnName }); } var refEntity = ToEntityName(column.ForeignConstraint.PKTable); var propertyCode = ItemCodeTemplate.GetRefPropertyCode( ToEntityName(table), refEntity, propertyName, isRequired: column.IsRequired ); code.Append(propertyCode); } } return(code.ToString()); }
private string RenderEntityByTemplate(CodeClass entity) { string concreteNew = AddNewToConcrete(entity); //如果实体类文件中还包含了仓库的文件,则需要同时在自动代码中加入仓库的自动代码。 bool renderRepository = HasRepository(entity); var res = ItemCodeTemplate.GetEntityFileCode( entity.Namespace.Name, concreteNew, entity.Name, renderRepository ); return(res); }
private bool GenerateClassFile(Table table) { if (table.Name == "zzzDbMigrationVersion") { return(false); } var entityName = ToEntityName(table); var fileName = entityName + ".cs"; var item = _directory.ProjectItems.FindByName(fileName); if (item != null) { return(false); } if (!CheckHasPK(table)) { return(false); } _tablePropertiesConfig.Clear(); var parameters = new ItemCodeTemplate.EntityFileCodeParamters() { domainNamespace = this.DomainName, domainEntityName = entityName, domainBaseEntityName = _domainBaseEntityName, }; //生成属性、引用属性 parameters.normalProperties = this.RenderNormalProperties(table); parameters.refProperties = this.RenderRefProperties(table); parameters.tableConfig = entityName == table.Name ? "Meta.MapTable().MapAllProperties();" : string.Format(@"Meta.MapTable(""{0}"").MapAllProperties();", table.Name); parameters.columnConfig = this.RenderColumnConfig(table); //使用模板格式化字符串。 var code = ItemCodeTemplate.GetEntityFileCode(parameters); //写到文件,并加入到项目中。 var file = Path.Combine(Path.GetDirectoryName(_directory.get_FileNames(1)), fileName); File.WriteAllText(file, code); _directory.ProjectItems.AddFromFile(file); return(true); }
private string RenderRepoByTemplate(CodeClass repo, IList <CodeClass> entities) { string domainNamespace = null; var entity = Helper.GetEntityNameForRepository(repo); if (ParseDomainNamespace(repo, entity, entities, out domainNamespace)) { var res = ItemCodeTemplate.GetRepositoryFileAutoCode( domainNamespace, repo.Namespace.Name, entity ); return(res); } return(string.Empty); }
private string RenderNormalProperties(Table table) { var code = new StringBuilder(); //先输出 Id 字段。 var idColumn = RenderId(table); //Id 字段以外的其它字段,都可以输出了。 foreach (var column in table.Columns) { if (!column.IsForeignKey && column != idColumn) { string propertyType = string.Empty; #region 转换到属性的类型 switch (column.DataType) { case DbType.AnsiString: case DbType.AnsiStringFixedLength: case DbType.StringFixedLength: case DbType.Xml: case DbType.String: propertyType = "string"; break; case DbType.Int16: case DbType.Int32: case DbType.Int64: case DbType.SByte: case DbType.UInt16: case DbType.UInt32: case DbType.UInt64: propertyType = "int"; if (!column.IsRequired) { propertyType += '?'; } break; case DbType.VarNumeric: case DbType.Single: case DbType.Double: propertyType = "double"; if (!column.IsRequired) { propertyType += '?'; } break; case DbType.Decimal: propertyType = "decimal"; if (!column.IsRequired) { propertyType += '?'; } break; case DbType.Date: case DbType.DateTime: case DbType.DateTime2: case DbType.DateTimeOffset: case DbType.Time: propertyType = "DateTime"; if (!column.IsRequired) { propertyType += '?'; } break; case DbType.Boolean: propertyType = "bool"; if (!column.IsRequired) { propertyType += '?'; } break; case DbType.Binary: propertyType = "byte[]"; break; case DbType.Byte: propertyType = "byte"; break; case DbType.Guid: propertyType = "Guid"; if (!column.IsRequired) { propertyType += '?'; } break; case DbType.Object: case DbType.Currency: default: propertyType = "string"; break; } #endregion var propertyCode = ItemCodeTemplate.GetNormalPropertyCode(ToEntityName(table), propertyType, column.Name); code.Append(propertyCode); } } return(code.ToString()); }