Search code examples
asp.netentity-frameworkasp.net-core.net-coreef-core-3.0

One to many relationship LINQ update query


I've a one-to-many / many-to-many relationship b/w UserProfile & AddressMaster through intermediate table UserAddress.

public class UserProfile
{
        public string UserID { get; set; }
        public string Name{ get; set; }
        public ICollection<UserAddress> UserAddress{ get; set; }
}
public class AddressMaster
{
        public string AddrID{ get; set; }
        public string AddressLine1{ get; set; }
        public ICollection<UserAddress> UserAddress{ get; set; }
        public TheatreLocation TheatreLocation { get; set; }
}
public class UserAddress
    {
        public Guid UserID { get; set; }
        public Guid AddressID { get; set; }
        public UserProfile UserProfile{ get; set; }
        public AddressMaster AddressMaster { get; set; }
    }

Now I am trying to enter data from API through JSON:

{
    "Name": "Neo",            
    "address": 
        {
            "addressLine1": "House not"            
        }
    
}

For this I've a DTO to take these params. Below is my controller code.

public async Task<Guid> Handle(CreateUserCommand request, CancellationToken cancellationToken) 
        {                           
            var userEntity = new UserProfile
            {                   
                Name = request.Name,                         
            };
            _context.UserProfile.Add(userEntity);
            
            AddressMaster addressMaster = request.Address;
            
            _context.AddressMaster.Add(addressMaster);

            UserAddresses userAddresses = new UserAddresses 
            {
                AddressID = addressMaster.AddressID,
                UserID = userEntity.UserID
            };
            _context.UserAddresses.Add(userAddresses);                                                        

            await _context.SaveChangesAsync(cancellationToken);

            return userEntity.UserID;
        }

I am trying to store data individually into respective tables and then tried to map it to the intermediate table. I am not quiet sure thats right way, but data is getting stored in the db though.

Thanks :)


Solution

  • It looks like since there has not been any answer and after looking up some examples, I figured the answer in my question itself is the right way to proceed.

    Consider the records you want to enter: AddressMaster <---> UserAddress <---> UserProfile

    Provided the entity configuration is already configured using fluent API (many-to-many requires to configure fluent API for now) mapping AddressID and UserID as Foreign key to the UserAddress table.

    Now you individually map the respective data into both the AddressMaster and UserProfile tables and add it to the context.

                var userEntity = new UserProfile
                {                   
                    Name = request.Name,                         
                };
                _context.UserProfile.Add(userEntity);
                
                AddressMaster addressMaster = request.Address;
                
                _context.AddressMaster.Add(addressMaster);
    

    Now you map those entered entities to the UserAddresses entity and save the changes.