我们可以使用C#中的流畅迁移器在postgresql中创建数据库

时间:2017-04-08 04:42:01

标签: c# postgresql fluent fluent-migrator

我的要求是当用户从管理面板创建新公司时创建新数据库。我正在使用asp.net mvc和流畅的迁移器来创建表。但是,最初我需要根据管理员“添加新公司”表单提供的输入创建数据库。要创建的数据库将在postgresql v9.5

1 个答案:

答案 0 :(得分:1)

过去我有类似的要求,我做了一些研究,但是对于创建新数据库,我在fluentmigrator方面并不成功。 对于使用fluentmigrator创建表和索引而言,效果非常好。 因此,我决定使用不带fluentmigrator的c#来创建它,如下所示:

我使用了NpgSQL nuget包,我创建了以下函数来检查数据库是否存在。如果不存在,则需要创建新的

要创建和检查数据库是否存在,您需要使用NpgsqlConnection对象连接到“ postgres”数据库

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;
                }
            }
        }
    }

要创建数据库,您可以在NpgsqlCommand上执行ExecuteNonQuery,并将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;";

我希望这会有所帮助。