/// <summary>
        /// Insert a relationship when data already exists
        /// </summary>
        /// <param name="entity1ID"></param>
        /// <param name="entity2ID"></param>
        /// <param name="navigationProperty"></param>
        public void InsertWithData(int entity1ID, int entity2ID, string navigationProperty)
        {
            try
            {
                T1 t1 = Entities1.Find(entity1ID);
                dbContext.Entry <T1>(t1).State = EntityState.Modified;

                T2 t2 = Entities2.Find(entity2ID);
                dbContext.Entry <T2>(t2).State = EntityState.Unchanged;

                var navigationPropertyAux = t1.GetType().GetProperty(navigationProperty).GetValue(t1);
                ((ICollection <T2>)navigationPropertyAux).Add(t2);

                this.dbContext.SaveChanges();
            }
            catch (DbEntityValidationException dbEx)
            {
                var msg = string.Empty;

                foreach (var validationErrors in dbEx.EntityValidationErrors)
                {
                    foreach (var validationError in validationErrors.ValidationErrors)
                    {
                        msg += string.Format("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage) + Environment.NewLine;
                    }
                }

                var fail = new Exception(msg, dbEx);
                throw fail;
            }
        }
        /// <summary>
        /// Insert a set of relationships when data already exists
        /// </summary>
        /// <param name="entity1ID"></param>
        /// <param name="entity2ID"></param>
        /// <param name="navigationProperty"></param>
        public void InsertWithData(int entity1ID, List <int> entities2ID, string navigationProperty)
        {
            try
            {
                T1 t1 = Entities1.Find(entity1ID);

                //foreach (var id in entities2ID)
                //{
                //    T2 t2 = Entities2.Find(id);

                //    var navigationPropertyAux = t1.GetType().GetProperty(navigationProperty).GetValue(t1);
                //    ((ICollection<T2>)navigationPropertyAux).Add(t2);
                //}
                List <T2> entities2ToAdd = new List <T2>();
                foreach (var id in entities2ID)
                {
                    entities2ToAdd.Add(Entities2.Find(id));
                }

                var navigationPropertyAux = t1.GetType().GetProperty(navigationProperty).GetValue(t1);
                ((List <T2>)navigationPropertyAux).AddRange(entities2ToAdd);

                this.dbContext.SaveChanges();
            }
            catch (DbEntityValidationException dbEx)
            {
                var msg = string.Empty;

                foreach (var validationErrors in dbEx.EntityValidationErrors)
                {
                    foreach (var validationError in validationErrors.ValidationErrors)
                    {
                        msg += string.Format("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage) + Environment.NewLine;
                    }
                }

                var fail = new Exception(msg, dbEx);
                throw fail;
            }
        }