Можем ли мы создать базу данных в postgresql с помощью беглого миграции в C#

Мое требование - создать новую базу данных, когда пользователь создает новую компанию из панели администратора. Я использую asp.net mvc и fluent migrator для создания таблиц. Однако изначально мне нужно создать базу данных на основе ввода, предоставленного администратором в форме «Добавить новую компанию». Создаваемая база данных будет в postgresql v9.5.


person Heman    schedule 08.04.2017    source источник


Ответы (1)


В прошлом у меня были аналогичные требования, я провел некоторое исследование, но для создания новой базы данных мне не удалось использовать fluentmigrator. Для создания таблиц и индексов с помощью Fluentmigrator сработало отлично. Итак, я решил создать его с помощью С# без fluentmigrator, как показано ниже.

Я использовал пакет NpgSQL nuget, я создал функцию ниже, чтобы проверить, существует ли база данных. если этого нет, то нужно создать новый

для создания и проверки базы данных, существует она или нет, вам необходимо подключиться к базе данных "postgres" с помощью объекта NpgsqlConnection

public static bool DBExists(string connectionStr, string dbname)
    {
        using (NpgsqlConnection conn = new NpgsqlConnection(connectionStr))
        {
            string sql = $"SELECT DATNAME FROM pg_catalog.pg_database WHERE DATNAME = '{dbname}'";
            using (NpgsqlCommand command = new NpgsqlCommand
                (sql, conn))
            {
                try
                {
                    conn.Open();
                    var i = command.ExecuteScalar();
                    conn.Close();
                    if (i != null && i.ToString().Equals(dbname)) //always 'true' (if it exists) or 'null' (if it doesn't)
                        return true;
                    else return false;
                }
                catch (Exception e) {
                    Console.WriteLine(e.ToString());
                    return false;
                }
            }
        }
    }

Для создания базы данных вы можете выполнить ExecuteNonQuery для NpgsqlCommand с объектом NpgsqlConnection, подключенным к базе данных postgres.

string sql = "CREATE DATABASE \"dbname\" WITH OWNER = postgres ENCODING = 'UTF8' CONNECTION LIMIT = -1;";

для моих требований мне также нужно было создать расширение, которое я смог создать, используя запрос ниже

string sql = "CREATE EXTENSION IF NOT EXISTS citext WITH SCHEMA public;";

Я надеюсь, это поможет.

person Jatin C    schedule 18.08.2018