/// <summary> /// Loads database schema /// </summary> /// <param name="databaseName"></param> /// <param name="nameAliases"></param> /// <param name="nameFormat"></param> /// <param name="loadStoredProcedures"></param> /// <param name="contextNamespace"></param> /// <param name="entityNamespace"></param> /// <returns></returns> public virtual Database Load(string databaseName, INameAliases nameAliases, NameFormat nameFormat, bool loadStoredProcedures, string contextNamespace, string entityNamespace) { // check if connection is open. Note: we may use something more flexible if (Connection.State != ConnectionState.Open) { Connection.Open(); } // get the database name. If we don't have one, take it from connection string... if (string.IsNullOrEmpty(databaseName)) { databaseName = Connection.Database; } // ... and if connection string doesn't provide a name, then throw an error if (string.IsNullOrEmpty(databaseName)) { throw new ArgumentException("A database name is required. Please specify /database=<databaseName>"); } databaseName = GetDatabaseNameAliased(databaseName, nameAliases); var schemaName = NameFormatter.GetSchemaName(databaseName, GetExtraction(databaseName), nameFormat); var names = new Names(); var schema = new Database { Name = schemaName.DbName, Class = GetRuntimeClassName(schemaName.ClassName, nameAliases), BaseType = typeof(DataContext).FullName, ContextNamespace = contextNamespace, EntityNamespace = entityNamespace, }; // order is important, we must have: // 1. tables // 2. columns // 3. constraints LoadTables(schema, schemaName, Connection, nameAliases, nameFormat, names); LoadColumns(schema, schemaName, Connection, nameAliases, nameFormat, names); CheckColumnsName(schema); LoadConstraints(schema, schemaName, Connection, nameFormat, names); CheckConstraintsName(schema); if (loadStoredProcedures) { LoadStoredProcedures(schema, schemaName, Connection, nameFormat); } // names aren't checked here anymore, because this confuses DBML editor. // they will (for now) be checked before .cs generation // in the end, when probably will end up in mapping source (or somewhere around) //CheckNamesSafety(schema); // generate backing fields name (since we have here correct names) GenerateStorageAndMemberFields(schema); return(schema); }
/// <summary> /// Creates the name of the schema. /// </summary> /// <param name="databaseName">Name of the database.</param> /// <param name="connection">The connection.</param> /// <param name="nameFormat">The name format.</param> /// <returns></returns> protected virtual SchemaName CreateSchemaName(string databaseName, IDbConnection connection, NameFormat nameFormat) { if (string.IsNullOrEmpty(databaseName)) { databaseName = connection.Database; if (string.IsNullOrEmpty(databaseName)) { throw new ArgumentException("Could not deduce database name from connection string. Please specify /database=<databaseName>"); } } return(NameFormatter.GetSchemaName(databaseName, GetExtraction(databaseName), nameFormat)); }