无法首先使用Npgsql和Entity Framework代码在PostreSQL中创建数据库
我正在尝试设置我的应用程序以使用Entity Framework和PostgreSQL,但我遇到了一个问题。 我已经通过nuget添加了Npqsql,并将以下提供程序工厂添加到web.config
:
使用连接字符串:
它似乎很好地连接到数据库,但当我尝试在数据库上执行任何类型的操作时,我得到以下exception:
FATAL: 3D000: database "withoomph" does not exist
当db设置如下时,我正在正确设置数据库intitializer:
static MyDB() { Database.SetInitializer(new CreateDatabaseIfNotExists()); }
所以当我尝试用我的DbContext
做任何事情时,它应该只是简单地创建db? 我不明白,整个早上都拔我的头发!
不幸的是,Npgsql没有(截至目前)自动模式创建代码优先。
您可以先创建数据库,然后连接到它。
更新(2016):Npgsql 3现在首先实现数据库创建代码。 确保通过代码或XML设置配置正确的连接工厂以使用NpgsqlConnection
,并使用适当的连接字符串 。
毫不奇怪,由于尚未创建数据库withoomph
,因此您不能使用Database=withoomph;
连接字符串Database=withoomph;
提到了。
您可以做的是使用createdb
或psql
手动创建此数据库,或临时更改您的连接字符串以使用Database=postgres;
代替。
这应该有效,因为在所有最近的PostgreSQL版本数据库中, postgres
保证在vanilla安装之后存在,并且应该仅用于此目的 – 获取初始认证连接以创建另一个数据库并发出CREATE DATABASE withoomph;
在您的申请中。
但是,在创建新数据库之后,应立即断开与postgres
连接,连接到新的withoomph
并继续正常运行。
除了mvp的答案,这里是我用来创建数据库的代码片段。 您需要在初始化EF之前运行它。 因此,诀窍是暂时将数据库名称切换为’postgres’,保证在安装vanilla之后存在。
上述就是C#学习教程:无法首先使用Npgsql和Entity Framework代码在PostreSQL中创建数据库分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
public void CreateDatabase(string connectionString) { var builder = new NpgsqlConnectionStringBuilder(connectionString); var databaseName = builder.Database; // REMEMBER ORIGINAL DB NAME builder.Database = "postgres"; // TEMPORARILY USE POSTGRES DATABASE // Create connection to database server using (var connection = new NpgsqlConnection(builder.ConnectionString)) { connection.Open(); // Create database var createCommand = connection.CreateCommand(); createCommand.CommandText = string.Format(@"CREATE DATABASE ""{0}"" ENCODING = 'UTF8'", databaseName); createCommand.ExecuteNonQuery(); connection.Close(); } }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/959656.html