Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
 /// <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));
 }