Why does EF core ignore auto increment column and try to update this?

asp.net-core c# entity-framework-core

Question

In mssql database I have an auto increment column named AutoIncrementNumber which is configured with this mentioned

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
   modelBuilder.Entity<User>(entity =>
   {
      entity.Property(e =>e.AutoIncrementNumber).ValueGeneratedOnAdd();
    }
}

I added a new user and want to update this

    var user = new User { UserName = "SomeUserName", Code=0};
    var result = await _userManager.CreateAsync(user, "SomePassword");

    //after CreateAsync user.AutoIncrementNumber == 1

    if (result.Succeeded)
    {
      user.Code = 1;
      userManager.UpdateAsync(user);
    }

but during UpdateAsync I came across with an error

DbUpdateException: An error occurred while updating the entries. See the inner exception for details. SqlException: Cannot update identity column 'AutoIncrementNumber'

Project is running under .net core 1.1

SQL Schema

CREATE TABLE [dbo].[AspNetUsers](
    [Id] [nvarchar](450) NOT NULL,
    [UserName] [nvarchar](256) NULL,
    [AutoIncrementNumber] [int] IDENTITY(1,1) NOT NULL,
    [ReferralCode] [nvarchar](50) NULL,
    CONSTRAINT [PK_AspNetUsers] PRIMARY KEY CLUSTERED (
        [Id] ASC )WITH (
            PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
            IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
            ALLOW_PAGE_LOCKS = ON
        ) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
1
1
6/29/2017 9:01:32 AM

Popular Answer

ValueGeneratedOnAdd means that the value is generated by the database when inserting an object and the property should be ignored when inserting.

You should use ValueGeneratedOnAddOrUpdate to specify that the value should be excluded from UPDATE as well.

With Data Annotations, the equivalent to ValueGeneratedOnAddOrUpdate is [DatabaseGenerated(DatabaseGeneratedOption.Computed)]. The equivalent to ValueGeneratedOnAdd is [DatabaseGenerated(DatabaseGeneratedOption.Identity)]

Check the Generated Values section in Microsoft Docs.

5
6/29/2017 9:27:20 AM


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