private IEntity ConvertToDomainModel(UserModel userModel)
        {
            var user = (User)_factory.GetEntity <IUser>();

            user.UserName = userModel.UserName;

            user.Password = userModel.Password;

            user.UserRole = userModel.UserRole;

            user.IsAutheticated = userModel.IsAutheticated;

            user.AutheticationType = userModel.AutheticationType;

            return(user);
        }
        private IEntity ConvertToDomainModel(CustomerModel customerModel)
        {
            var customer = (Customer)_factory.GetEntity <Customer>();

            customer.User = (User)_factory.GetEntity <User>();

            //customer.Addresses = new List<Address>(); #dirty fix

            //this code dosnt work for disconnected entities pls update later



            customer.DateOfBirth = customerModel.DateOfBirth;

            customer.FirstName = customerModel.FirstName;

            customer.MiddleName = customerModel.MiddleName;

            customer.LastName = customerModel.LastName;

            customer.Gender = customerModel.Gender;

            customer.User.UserName = customerModel.UserName;

            customer.User.Password = customerModel.Password;

            customer.User.UserRole = customerModel.UserRole;

            customer.User.IsAutheticated = customerModel.IsAutheticated;

            customer.User.AutheticationType = customerModel.AutheticationType;

            //foreach (var address in customerModel.Addresses)
            //{
            //    var a = customer.Addresses.Find(a_ => a_.AddressID == address.AddressID);

            //    if (a == null)
            //    {
            //        a = (Address)_factory.GetEntity<IAddress>();
            //        customer.Addresses.Add(a);
            //    }

            //    a.AddressLine1 = address.AddressLine1;
            //    a.AddressLine2 = address.AddressLine2;
            //    a.AddressLine3 = address.AddressLine3;
            //    a.AddressLine4 = address.AddressLine4;
            //    a.AddressLine5 = address.AddressLine5;
            //    a.AddressType = address.AddressType;
            //    a.City = address.City;
            //    a.Country = address.Country;
            //    a.District = address.District;
            //    a.LandMark = address.LandMark;
            //    a.PinCode = address.PinCode;
            //    //a.Product = null;
            //    //a.Customer = customer;
            //    a.AddressID = address.AddressID;
            //}

            //if (customer.Addresses.Count > customerModel.Addresses.Count)
            //{
            //    var addIds_ = customerModel.Addresses.Select(a => a.AddressID).ToList();

            //    foreach (var address in customer.Addresses)
            //    {
            //        if (!addIds_.Contains(address.AddressID))
            //            _persistence.Addresses.Delete(address);
            //    }

            //    customer.Addresses.RemoveAll(a => !addIds_.Contains(a.AddressID));
            //}

            return(customer);
        }
        private IEntity ConvertToDomainModel(CustomerModel customerModel)
        {
            var customer = _persistence.Customers.List().Where(c => c.User.UserName == customerModel.UserName).SingleOrDefault();

            var user = default(User);

            if (customer is null)
            {
                customer = (Customer)_factory.GetEntity <ICustomer>();

                user = (User)_factory.GetEntity <IUser>();

                user.UserName = customerModel.UserName;

                user.Password = customerModel.Password;

                user.UserRole = customerModel.UserRole;

                user.AutheticationType = customerModel.AutheticationType;

                user.UserID = customerModel.UserID;

                customer.DateOfBirth = customerModel.DateOfBirth;

                customer.FirstName = customerModel.FirstName;

                customer.MiddleName = customerModel.MiddleName;

                customer.LastName = customerModel.LastName;

                customer.Gender = customerModel.Gender;

                customer.User = user;

                customer.CustomerID = customerModel.CustomerID;

                //customer.Addresses.Clear(); #dirty patches

                foreach (var address in customerModel.Addresses)
                {
                    var a = (Address)_factory.GetEntity <IAddress>();
                    //customer.Addresses.Add(a); #dirty patches
                    a.AddressLine1 = address.AddressLine1;
                    a.AddressLine2 = address.AddressLine2;
                    a.AddressLine3 = address.AddressLine3;
                    a.AddressLine4 = address.AddressLine4;
                    a.AddressLine5 = address.AddressLine5;
                    a.AddressType  = address.AddressType;
                    a.City         = address.City;
                    a.Country      = address.Country;
                    a.District     = address.District;
                    a.LandMark     = address.LandMark;
                    a.PinCode      = address.PinCode;
                    //a.Product = null;
                    //a.Customer = customer;
                    a.AddressID = address.AddressID;
                }
            }
            else
            {
                throw new Exception(string.Format("Customer with username {0} already exits", customerModel.UserName));
            }

            return(customer);
        }