Auto-Incremented value not working in PostgreSQL when using EntityFramework Core

asp.net-core entity-framework-core postgresql

Question

It seems like the auto-increment function for PostgreSQL doesn't seem to work.

I have the following code:

namespace project.Models
{
   public class DatabaseModel
   {
       [Key]
       [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
       [Column(Order=1, TypeName="integer")]
       public int ID { get; set; }
   }
 }

When I update the database (after doing a migration) the ID column is the primary key without being a auto-increment.

When I try to add a new object to the database I get the following error:

Microsoft.EntityFrameworkCore.DbContext[1]
  An exception occurred in the database while saving changes.
  Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while updating the entries. See the inner exception for details. ---> Npgsql.PostgresException: 23502: null value in column "ID" violates not-null constraint

Can anyone help solve this problem? How can I get the key to be auto-incremented?

1
2
10/31/2016 12:22:18 PM

Accepted Answer

Because you created the column with the specific type integer you need to specify the type as serial for PostgreSQL to generate the id for you.

https://www.postgresql.org/docs/current/static/datatype-numeric.html#DATATYPE-SERIAL

4
10/31/2016 12:23:04 PM

Popular Answer

[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }

To use identity columns for all value-generated properties on a new model, simply place the following in your context's OnModelCreating():

builder.ForNpgsqlUseIdentityColumns();

This will create make all keys and other properties which have .ValueGeneratedOnAdd() have Identity by default. You can use ForNpgsqlUseIdentityAlwaysColumns() to have Identity always, and you can also specify identity on a property-by-property basis with UseNpgsqlIdentityColumn() and UseNpgsqlIdentityAlwaysColumn().

postgres efcore value generation



Related Questions





Related

Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow