protected static System.Data.Linq.EntitySet <TEntity> Detach <TEntity>(System.Data.Linq.EntitySet <TEntity> set, Action <TEntity> onAdd, Action <TEntity> onRemove) where TEntity : LinqEntityBase { if (set == null || !set.HasLoadedOrAssignedValues) { return(new System.Data.Linq.EntitySet <TEntity>(onAdd, onRemove)); } // copy list and detach all entities var list = set.ToList(); list.ForEach(t => t.Detach()); var newSet = new System.Data.Linq.EntitySet <TEntity>(onAdd, onRemove); newSet.Assign(list); return(newSet); }
protected static System.Data.Linq.EntitySet <TEntity> Detach <TEntity>(System.Data.Linq.EntitySet <TEntity> set, Action <TEntity> onAdd, Action <TEntity> onRemove) where TEntity : LinqEntityBase { if (set == null || !set.HasLoadedOrAssignedValues) { return(new System.Data.Linq.EntitySet <TEntity>(onAdd, onRemove)); } // make sure that no lazy loading happens. System.Reflection.FieldInfo field = set.GetType().GetField("isLoaded", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); field.SetValue(set, true); // copy list and detach all entities var list = set.ToList(); list.ForEach(t => t.Detach()); var newSet = new System.Data.Linq.EntitySet <TEntity>(onAdd, onRemove); newSet.Assign(list); return(newSet); }