Csharp/C#教程:无法首先使用Npgsql和Entity Framework代码在PostreSQL中创建数据库分享


无法首先使用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; 提到了。

您可以做的是使用createdbpsql手动创建此数据库,或临时更改您的连接字符串以使用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

(0)
上一篇 2021年11月23日
下一篇 2021年11月23日

精彩推荐