无法首先使用Npgsql和Entity Framework代码在PostreSQL中创建数据库

jcv*_*dan 6 c# postgresql entity-framework npgsql

我正在尝试设置我的应用程序以使用Entity Framework和PostgreSQL,但我遇到了一个问题.我已经Npqsql通过nuget添加了,并将以下提供程序工厂添加到web.config:

<system.data>
    <DbProviderFactories>
        <add name="Npgsql Data Provider" 
           invariant="Npgsql" 
           description=".Net Framework Data Provider for Postgresql Server" 
           type="Npgsql.NpgsqlFactory, Npgsql, 
                 Version=2.0.12.0, Culture=neutral, 
                 PublicKeyToken=5d8b90d52f46fda7" />
    </DbProviderFactories>
  </system.data>
Run Code Online (Sandbox Code Playgroud)

使用连接字符串:

    <add name="MyDb" providerName="Npgsql" 
connectionString="Server=localhost;Port=5432;Database=withoomph;User ID=postgres;Password=******;enlist=true" />
Run Code Online (Sandbox Code Playgroud)

它似乎很好地连接到数据库,但当我尝试在数据库上执行任何类型的操作时,我得到以下异常:

FATAL: 3D000: database "withoomph" does not exist

当db设置如下时,我正在正确设置数据库intitializer:

static MyDB()
{
    Database.SetInitializer<MyDB>(new CreateDatabaseIfNotExists<MyDB>());
}
Run Code Online (Sandbox Code Playgroud)

所以当我尝试用我的DbContext权利做任何事情时,它应该只是简单地创建数据库?我不明白,整个早上都拔我的头发!

Ale*_*iol 9

不幸的是,Npgsql没有(截至目前)自动模式创建代码优先.

您可以先创建数据库,然后连接到它.

更新(2016):Npgsql 3现在首先实现数据库创建代码.确保NpgsqlConnection通过代码或XML设置配置正确的连接工厂以使用s,并使用适当的连接字符串.

  • 我可以问怎么样?我用nuget安装了Npgswl.Entityframework(v 2.2.5).这也安装了EF6和npqsql 2.2.5.我得到一个例外,即dbo.xyz不可用.using(DataAccessContext db = new DataAccessContext(dbConnection)){IObjectContextAdapter adapter =(IObjectContextAdapter)db; string script = adapter.ObjectContext.CreateDatabaseScript(); - > Excepton:"提供程序不支持CreateDatabaseScript." (3认同)