Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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?

like image 350
Wouter Avatar asked Oct 31 '16 12:10

Wouter


1 Answers

[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

like image 70
Satheesh Davidson Avatar answered Oct 29 '22 21:10

Satheesh Davidson