private void SaveCustomerInfo(IEnumerable <UserCustomerInfo> customerInfos, Trex.Server.Core.Model.User user, IUserRepository userRepository) { if (customerInfos == null) { return; } var customerInfoFactory = ObjectFactory.GetInstance <IUserCustomerInfoFactory>(); var customerRepository = ObjectFactory.GetInstance <ICustomerRepository>(); var newCustomerInfos = new List <Trex.Server.Core.Model.UserCustomerInfo>(); foreach (var customerInfo in customerInfos) { var customer = customerRepository.GetByID(customerInfo.CustomerId); newCustomerInfos.Add(customerInfoFactory.Create(user, customer, customerInfo.PricePrHour)); } var oldCustomerInfos = new List <Trex.Server.Core.Model.UserCustomerInfo>(); foreach (var userCustomerInfo in user.CustomerInfo) { oldCustomerInfos.Add(userCustomerInfo); } //remove any old customerinfo, not in the new list foreach (var oldInfo in oldCustomerInfos) { if (newCustomerInfos.SingleOrDefault(nci => nci.Equals(oldInfo)) == null) { user.RemoveCustomerInfo(oldInfo); userRepository.DeleteCustomerInfo(oldInfo); } } foreach (var userCustomerInfo in newCustomerInfos) { user.AddCustomerInfo(userCustomerInfo); } }