Search code examples
asp.netpostgresqlasp.net-coreentity-framework-corenpgsql

How do I configure Entity Framework to allow database-generate uuid for PostgreSQL (npgsql)?


I'm updating our dotnet core project to use PostgreSQL on the backend instead of Microsoft SQL Server and hit a situation with two tables that use a GUID as the data type.

ERROR

Unhandled Exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.InvalidOperationException: Property CommentID on type is a database-generated uuid, which requires the PostgreSQL uuid-ossp extension. Add .HasPostgresExtension("uuid-ossp") to your context's OnModelCreating.

After a little googling I then realized I have to enable the uuid extension (not sure if this can be automated somehow) and then generated a uuid in pgAdmin successfully.

CREATE EXTENSION "uuid-ossp";
SELECT uuid_generate_v4();

Unfortunately my dotnet project is still complaining with the same error tho. I see in the error it says to add .HasPostgresExtension("uuid-ossp") to OnModelCreating and I've tried in several spots but can't seem to figure out where specifically it should be added.


Solution

  • As per Shay's instruction - After updating to the latest version of Npgsql, the uuid extension error is now gone. Here's a snippet of what the OnModelCreating looks like for others trying this out:

        protected override void OnModelCreating(ModelBuilder builder)
        {
            base.OnModelCreating(builder);
    
            builder.HasPostgresExtension("uuid-ossp");
        }