Can't update related table on sql database, my update code runs with no errors but no changes are made to the foreign table

Viewed 43

I have two entities and 2 matching tables on SQL local database. User and address, I am trying to update users address information but nothing happens when I run the code, no errors but no data is saved on address table either.

namespace Entities.Concrete
{
    public class User : IEntity
    {
        public int Id { get; set; }
        [Required(ErrorMessage = "Username Required")]
        public string Username { get; set; }
        [Required(ErrorMessage = "Email Required")]
        [DataType(DataType.EmailAddress)]
        public string Email { get; set; }
        [Required(ErrorMessage = "Password Required")]
        public string Password { get; set; }
        public int Role { get; set; }
        public virtual Address Address { get; set; }
    }
}

namespace Entities.Concrete
{
    public class Address : IEntity
    {
        [ForeignKey("User")]
        [Key]
        public int UserID { get; set; }
        public string Country { get; set; }
        public string City { get; set; }
        public string DetailedAddress { get; set; }
        public virtual User User { get; set; }
    }
}
public class EfUserDal : EfEntityRepositoryBase<User,InternshipAppContext>, IUserDal
{
    public void UpdateAddress(User user)
    {
        using (InternshipAppContext context = new InternshipAppContext())
        {
            context.Users.Attach(user);
            context.Entry(user).Reference(u => u.Address).IsModified = true;
            context.SaveChanges();
        }
    }
}

The DB diagram:

DB diagram

1 Answers

If you don't mind retrieving the entities from the database first, it's quite simple:

public void UpdateAddress(User user)
{
    using (InternshipAppContext context = new InternshipAppContext())
    {
        var address = context.Addresses.First(a => a.UserID == user.Id);
        addresss.Country = user.Address.County;
        address.City = user.Address.City;
        address.DetailedAddress = user.Address.DetailedAddress;
        context.SaveChanges();
    }
}
Related