asp.net-web-apientity-framework-coreef-code-firstsavechangesidentity-column

Getting generated value from Identity Column in EF Core 7


I still get zero as response on my Edentity Column after SaveChangesAsync().

Here's my entity

public class Person
    {
        [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int PersonID { get; set; }

        [Required, Column(TypeName = "VARCHAR"), StringLength(50)]
        public string? Name { get; set; }

        [Required, Column(TypeName = "VARCHAR"), StringLength(50), DataType(DataType.EmailAddress)]
        public string? Email { get; set; }

        public DateTime DateOfBirth { get; set; }

        [StringLength(100)]
        public string? Address { get; set; }
    }

    public static class PersonExtensionMethod
    {
        public static PersonResponse ToResponse(this Person person)
        {
            return new PersonResponse()
            {
                PersonID = person.PersonID,
                Name = person.Name,
                Email = person.Email,
                DateOfBirth = person.DateOfBirth,
                Address = person.Address,
            };
        }
    }

Here's my insert method from service

public Task<PersonResponse?> AddPersonAsync(PersonAddRequest addRequest)
        {
            Person newPerson = addRequest.ToPerson();
            _dbContext.Persons.Add(newPerson);
            _dbContext.SaveChangesAsync();

            return Task.FromResult<PersonResponse?>(newPerson.ToResponse());
        }

But I Still Get 0 as PersonID on response enter image description here


Solution

  • You have missed await and insert into database performed later than response has been generated:

    public async Task<PersonResponse?> AddPersonAsync(PersonAddRequest addRequest)
    {
        Person newPerson = addRequest.ToPerson();
        _dbContext.Persons.Add(newPerson);
        await _dbContext.SaveChangesAsync();
    
        return newPerson.ToResponse();
    }