示例#1
0
        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);
        }
示例#2
0
        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());
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
        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());
        }