Postgres EF Migrations "3F000: No schema has been selected to create in"

0

I am attempting to execute an initial database creation migration using entity framework core against a postgres database. The problem I am having is that I wish to create the tables under a custom schema. I have managed to create an initial migration with no problems but when I attempt to "update-database" the migration fails with the following error.

Npgsql.PostgresException (0x80004005): 3F000: no schema has been selected to create in

at Npgsql.NpgsqlConnector.<>c__DisplayClass160_0.<g__ReadMessageLong|0>d.MoveNext()

Having initial looked into the issue I assumed this was simply because the schema was not being set in the context. To get around this I set added the following code to the DbContext

    protected override void OnModelCreating(ModelBuilder builder)
    {
        //Set the default schema
        builder.HasDefaultSchema("ConfigStore");
        
        //Continue with the call./Migrate
        base.OnModelCreating(builder);
    }

I still get the same error when running update-database. I checked the initial migration Up() method and can clearly see the following code:

migrationBuilder.EnsureSchema(name: "ConfigStore");

The migration creates the database but nothing else so I assume the problem here is that the schema is not being created after the database which is then subsequently causing the table creations to fail. The question I have is how do I fix this? Can I execute some custom sql AFTER the database has been created but before the tables? Is there something I can do to get EnsureSchema() to create the schema first?

Thanks in advance

postgresql
asp.net-core
identityserver4
entity-framework-migrations
asked on Stack Overflow Dec 16, 2020 by user1474992

1 Answer

0

Would you believe it. Hours and hours trying to figure it out and 10 minutes after posting on stack overflow I find the solution....

The problem was the initial connection string. I had defined the connection string as follows:

Server=127.0.0.1; port=5432; user id=XXXX; password=XXXX; database=Test; pooling=true; SearchPath=ConfigStore

The problem was the search path. Apparently EF Migrations creates the database perfectly with this connection string but then attempts to access the tables before creating the schema causing the error reported. Removing the search_path from the connection string resulted in the schema being created first, then the tables. Odd - but hey it works.

answered on Stack Overflow Dec 16, 2020 by user1474992

User contributions licensed under CC BY-SA 3.0