Getting generated value from Identity Column in EF Core 7

60 Views Asked by At

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

1

There are 1 best solutions below

0
Svyatoslav Danyliv On BEST ANSWER

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();
}