/// <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> /// Delete a specific relationship /// </summary> /// <param name="entity1ID"></param> /// <param name="entity2ID"></param> /// <param name="navigationProperty"></param> public void DeleteRelationship(int entity1ID, int entity2ID, string navigationProperty) { T1 t1 = Entities1.FirstOrDefault(x => x.Id == entity1ID); T2 t2 = Entities2.FirstOrDefault(x => x.Id == entity2ID); var navigationPropertyAux = t1.GetType().GetProperty(navigationProperty).GetValue(t1); ((ICollection <T2>)navigationPropertyAux).Remove(t2); this.dbContext.SaveChanges(); }
/// <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; } }
/// <summary> /// Create a relationship between one object and a list of other objects. None of the object exists in the database yet /// </summary> /// <param name="entity1"></param> /// <param name="entities"></param> /// <param name="navigationProperty"></param> public void InsertWithoutData(T1 entity1, List <T2> entities, string navigationProperty) { try { if (entity1 == null || entities == null) { throw new ArgumentNullException("entity"); } Entities1.Add(entity1); var navigationPropertyList = entity1 .GetType() .GetProperty(navigationProperty) .GetValue(entity1, null); foreach (var entity2 in entities) { Entities2.Add(entity2); ((ICollection <T2>)navigationPropertyList).Add(entity2); } 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; } }