/// <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; } }