/// <summary> /// 获取存储过程 /// </summary> /// <param name="factory"></param> /// <returns></returns> private static List <StoredProcedure> LoadStoredProcs(DbProviderFactory factory) { if (factory == null || !ElementsToGenerate.HasFlag(Elements.StoredProcedures)) { return(new List <StoredProcedure>()); } try { using (DbConnection conn = factory.CreateConnection()) { conn.ConnectionString = ConnectionString; conn.Open(); if (conn.GetType().Name == "SqlCeConnection") { return(new List <StoredProcedure>()); } var reader = new SqlServerSchemaReader(conn, factory, IncludeQueryTraceOn9481Flag) { Outer = null }; var storedProcs = reader.ReadStoredProcs(StoredProcedureFilterExclude, UseCamelCase, PrependSchemaName, StoredProcedureRename, SchemaName); // Remove unrequired stored procs for (int i = storedProcs.Count - 1; i >= 0; i--) { if (SchemaName != null && String.Compare(storedProcs[i].Schema, SchemaName, StringComparison.OrdinalIgnoreCase) != 0) { storedProcs.RemoveAt(i); continue; } if (StoredProcedureFilterInclude != null && !StoredProcedureFilterInclude.IsMatch(storedProcs[i].Name)) { storedProcs.RemoveAt(i); continue; } } foreach (var proc in storedProcs) { reader.ReadStoredProcReturnObject(ConnectionString, proc); } conn.Close(); return(storedProcs); } } catch (Exception x) { string error = x.Message.Replace("\r\n", "\n").Replace("\n", " "); Console.WriteLine(string.Format("Failed to read database schema for stored procedures - {0}", error)); Console.WriteLine(""); Console.WriteLine("// -----------------------------------------------------------------------------------------"); Console.WriteLine("// Failed to read database schema for stored procedures - {0}", error); Console.WriteLine("// -----------------------------------------------------------------------------------------"); Console.WriteLine(""); return(new List <StoredProcedure>()); } }
/// <summary> /// 获取表 /// </summary> /// <param name="factory"></param> /// <returns></returns> public static Tables LoadTables(DbProviderFactory factory) { if (factory == null || !(ElementsToGenerate.HasFlag(Elements.Poco) || ElementsToGenerate.HasFlag(Elements.Context) || ElementsToGenerate.HasFlag(Elements.UnitOfWork) || ElementsToGenerate.HasFlag(Elements.PocoConfiguration))) { return(new Tables()); } try { using (DbConnection conn = factory.CreateConnection()) { conn.ConnectionString = ConnectionString; conn.Open(); bool isSqlCE = false; if (conn.GetType().Name == "SqlCeConnection") { PrependSchemaName = false; isSqlCE = true; } SchemaReader reader = null; if (CodeFirstTools.DataType.ToLower() == "oracle") { reader = new OracleSchemaReader(conn, factory); } else { reader = new SqlServerSchemaReader(conn, factory, IncludeQueryTraceOn9481Flag) { Outer = null }; } var tables = reader.ReadSchema(TableFilterExclude, ColumnFilterExclude, UseCamelCase, PrependSchemaName, IncludeComments, IncludeExtendedPropertyComments, TableRename, SchemaName, UpdateColumn); tables.SetPrimaryKeys(); // Remove unrequired tables/views for (int i = tables.Count - 1; i >= 0; i--) { if (SchemaName != null && String.Compare(tables[i].Schema, SchemaName, StringComparison.OrdinalIgnoreCase) != 0) { tables.RemoveAt(i); continue; } if (!IncludeViews && tables[i].IsView) { tables.RemoveAt(i); continue; } if (TableFilterInclude != null && !TableFilterInclude.IsMatch(tables[i].Name)) { tables.RemoveAt(i); continue; } if (!tables[i].IsView && string.IsNullOrEmpty(tables[i].PrimaryKeyNameHumanCase())) { tables.RemoveAt(i); } } // Must be done in this order var fkList = reader.ReadForeignKeys(TableRename); reader.IdentifyForeignKeys(fkList, tables); reader.ProcessForeignKeys(fkList, tables, UseCamelCase, PrependSchemaName, CollectionType, true, IncludeComments); tables.IdentifyMappingTables(fkList, UseCamelCase, CollectionType, true, IncludeComments, isSqlCE); tables.ResetNavigationProperties(); reader.ProcessForeignKeys(fkList, tables, UseCamelCase, PrependSchemaName, CollectionType, false, IncludeComments); tables.IdentifyMappingTables(fkList, UseCamelCase, CollectionType, false, IncludeComments, isSqlCE); // Remove views that only consist of all nullable fields. // I.e. they do not contain any primary key, and therefore cannot be used by EF for (int i = tables.Count - 1; i >= 0; i--) { if (string.IsNullOrEmpty(tables[i].PrimaryKeyNameHumanCase())) { tables.RemoveAt(i); } } conn.Close(); return(tables); } } catch (Exception x) { string error = x.Message.Replace("\r\n", "\n").Replace("\n", " "); Console.WriteLine(string.Format("Failed to read database schema - {0}", error)); Console.WriteLine(""); Console.WriteLine("// -----------------------------------------------------------------------------------------"); Console.WriteLine("// Failed to read database schema - {0}", error); Console.WriteLine("// -----------------------------------------------------------------------------------------"); Console.WriteLine(""); //return new Tables(); throw x; } }