public async Task <IActionResult> Create(Supplier supplier, IFormCollection collection) { var contacts = collection["hddContacts"].ToString(); var listContacts = JsonConvert.DeserializeObject <List <lContacts> >(contacts).ToList(); var coloniaId = int.Parse(collection["ddColonia"].ToString()); var colonia = _context.Neighborhoods.Include(c => c.City).ThenInclude(s => s.State).ThenInclude(c => c.Country).FirstOrDefault(n => n.Id == coloniaId); var paymentMethod = _context.PaymentMethods.FirstOrDefault(p => p.Id == int.Parse(collection["PaymentMethod"].ToString())); var currency = _context.Currencies.FirstOrDefault(p => p.Id == int.Parse(collection["Currency"].ToString())); var neighborhood = _context.Neighborhoods.Include(i => i.City).ThenInclude(s => s.State).ThenInclude(c => c.Country).FirstOrDefault(i => i.Id == int.Parse(collection["ddColonia"].ToString())); //Create address var address = new Address() { Street = collection["txtStreet"].ToString(), ExternalNumber = collection["txtExternalNumber"].ToString(), InternalNumber = collection["txtInternalNumber"].ToString(), Neighborhood = neighborhood, Active = true, Created = DateTime.Now, CreatedBy = UserLogged, Modified = DateTime.Now, ModifiedBy = UserLogged }; //Create contacts foreach (var item in listContacts) { var contactType = _context.ContactTypes.FirstOrDefault(c => c.Id == item.ContactTypeId); var contact = new SupplierContact() { ContactName = item.ContactName, ContactType = contactType, Description = item.Description, Created = DateTime.Now, CreatedBy = UserLogged, Modified = DateTime.Now, ModifiedBy = UserLogged }; supplier.AddContact(contact); } //Fill general data supplier.PaymentMethod = paymentMethod; supplier.Currency = currency; supplier.Address = address; supplier.Active = true; supplier.Created = DateTime.Now; supplier.CreatedBy = UserLogged; supplier.Modified = DateTime.Now; supplier.ModifiedBy = UserLogged; _context.Add(supplier); await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); }