/// <summary> /// 设置实体 /// </summary> /// <param name="includeComments"></param> /// <param name="includeExtendedPropertyComments"></param> private void SetupEntity(bool includeComments, ExtendedPropertyCommentsStyle includeExtendedPropertyComments) { string comments; if (includeComments) { comments = " // " + Name; if (IsPrimaryKey) { if (IsPrimaryKeyViaUniqueIndex) { comments += " (Primary key via unique index " + UniqueIndexName + ")"; } else { comments += " (Primary key)"; } } } else { comments = string.Empty; } if (includeExtendedPropertyComments == ExtendedPropertyCommentsStyle.AtEndOfField && !string.IsNullOrEmpty(ExtendedProperty)) { if (string.IsNullOrEmpty(comments)) { comments = " // " + ExtendedProperty; } else { comments += ". " + ExtendedProperty; } } if (IsPrimaryKey) { StringBuilder build = new StringBuilder(); build.AppendLine(string.Format("private {0} {1} _{2};", PropertyType, CodeFirstTools.CheckNullable(this), PropertyNameHumanCase.ToLower())); build.AppendLine(string.Format("public {0} {1} {2} {3} {4}", PropertyType, CodeFirstTools.CheckNullable(this), PropertyName, "{ get { return _" + PropertyNameHumanCase.ToLower() + " ; } set { this.Id = value; this._" + PropertyNameHumanCase.ToLower() + " = value; }}", comments)); Entity = build.ToString(); } else { Entity = string.Format("public {0}{1} {2} {3}{4}", PropertyType, CodeFirstTools.CheckNullable(this), PropertyName, IsStoreGenerated ? "{ get; internal set; }" : "{ get; set; }", comments); } }
/// <summary> /// 读取表空间信息 /// </summary> /// <param name="tableFilterExclude"></param> /// <param name="columnFilterExclude"></param> /// <param name="useCamelCase"></param> /// <param name="prependSchemaName"></param> /// <param name="includeComments"></param> /// <param name="includeExtendedPropertyComments"></param> /// <param name="tableRename"></param> /// <param name="schemaNameFilter"></param> /// <param name="updateColumn"></param> /// <returns></returns> public override Tables ReadSchema(Regex tableFilterExclude, Regex columnFilterExclude, bool useCamelCase, bool prependSchemaName, bool includeComments, ExtendedPropertyCommentsStyle includeExtendedPropertyComments, Func <string, string, string> tableRename, string schemaNameFilter, Func <Column, Table, Column> updateColumn) { var result = new Tables(); if (Cmd == null) { return(result); } Cmd.CommandText = TableSQL; if (Cmd.GetType().Name == "SqlCeCommand") { Cmd.CommandText = string.Empty; } else { Cmd.CommandTimeout = 600; } using (DbDataReader rdr = Cmd.ExecuteReader()) { var rxClean = new Regex("^(event|Equals|GetHashCode|GetType|ToString|repo|Save|IsNew|Insert|Update|Delete|Exists|SingleOrDefault|Single|First|FirstOrDefault|Fetch|Page|Query)$"); var lastTable = string.Empty; Table table = null; while (rdr.Read()) { string tableName = rdr["TABLENAME"].ToString().Trim(); if (tableFilterExclude != null && tableFilterExclude.IsMatch(tableName)) { continue; } string schema = rdr["SCHEMANAME"].ToString().Trim(); if (schemaNameFilter != null && !schema.Equals(schemaNameFilter, StringComparison.CurrentCultureIgnoreCase)) { continue; } if (lastTable != tableName || table == null) { // The data from the database is not sorted table = result.Find(x => x.Name == tableName && x.Schema == schema); if (table == null) { table = new Table { Name = tableName, Schema = schema, IsView = String.Compare(rdr["TABLETYPE"].ToString().Trim(), "View", StringComparison.OrdinalIgnoreCase) == 0, // Will be set later HasForeignKey = false, HasNullableColumns = false }; tableName = tableRename(tableName, schema); CodeFirstTools.SchemaName = schema; table.CleanName = CodeFirstTools.CleanUp(tableName); table.ClassName = Inflector.MakeSingular(table.CleanName); string singular = Inflector.MakeSingular(tableName); table.NameHumanCase = (useCamelCase ? Inflector.ToTitleCase(singular) : singular).Replace(" ", "").Replace("$", ""); //if ((string.Compare(table.Schema, "dbo", StringComparison.OrdinalIgnoreCase) != 0) && prependSchemaName) // table.NameHumanCase = table.Schema + "_" + table.NameHumanCase; // Check for table or C# name clashes if (CodeFirstTools.ReservedKeywords.Contains(table.NameHumanCase) || (useCamelCase && result.Find(x => x.NameHumanCase == table.NameHumanCase) != null)) { table.NameHumanCase += "1"; } result.Add(table); } } var col = CreateColumn(rdr, rxClean, table, useCamelCase, columnFilterExclude, updateColumn); if (col != null) { table.Columns.Add(col); } } } // Check for property name clashes in columns foreach (Column c in result.SelectMany(tbl => tbl.Columns.Where(c => tbl.Columns.FindAll(x => x.PropertyNameHumanCase == c.PropertyNameHumanCase).Count > 1))) { c.PropertyNameHumanCase = c.PropertyName; } if (includeExtendedPropertyComments != ExtendedPropertyCommentsStyle.None) { ReadExtendedProperties(result); } ReadUniqueIndexes(result); foreach (Table tbl in result) { tbl.Columns.ForEach(x => x.SetupEntityAndConfig(includeComments, includeExtendedPropertyComments)); } return(result); }
/// <summary> /// 设置实体和配置 /// </summary> /// <param name="includeComments"></param> /// <param name="includeExtendedPropertyComments"></param> public void SetupEntityAndConfig(bool includeComments, ExtendedPropertyCommentsStyle includeExtendedPropertyComments) { SetupEntity(includeComments, includeExtendedPropertyComments); SetupConfig(); }
/// <summary> /// 读取表空间 /// </summary> /// <param name="tableFilterExclude"></param> /// <param name="columnFilterExclude"></param> /// <param name="useCamelCase"></param> /// <param name="prependSchemaName"></param> /// <param name="includeComments"></param> /// <param name="includeExtendedPropertyComments"></param> /// <param name="tableRename"></param> /// <param name="schemaNameFilter"></param> /// <param name="updateColumn"></param> /// <returns></returns> public abstract Tables ReadSchema(Regex tableFilterExclude, Regex columnFilterExclude, bool useCamelCase, bool prependSchemaName, bool includeComments, ExtendedPropertyCommentsStyle includeExtendedPropertyComments, Func <string, string, string> tableRename, string schemaNameFilter, Func <Column, Table, Column> updateColumn);