//public static void Attach<TEntity>(this ObjectSet<TEntity> objectSet, TEntity entity, Action<TEntity> callback, params Expression<Func<object>>[] entityKeyExpressions) where TEntity : class //{ // objectSet.Attach(entity, callback, objectSet.EntityKey(entityKeyExpressions)); //} public static void AttachAll <TEntity>(this ObjectSet <TEntity> objectSet, IAssociatableCollection <TEntity> entities, Func <ObjectSet <TEntity>, TEntity, bool> predicate) where TEntity : class { var cascadableCollection = entities as ICascadableCollection <TEntity>; foreach (var i in entities.ToArray()) { if (!objectSet.HasAttached(i)) { var entityKey = objectSet.CreateEntityKey(i); if (objectSet.HasAttached(entityKey)) { if (cascadableCollection != null) { cascadableCollection.Remove(i, false); } else { entities.Remove(i); } entities.Add(objectSet.GetObjectByKey(entityKey)); } else { if (predicate(objectSet, i)) { objectSet.Attach(i); } } } } if (cascadableCollection != null) { foreach (var i in cascadableCollection.Added) { if (objectSet.HasAttached(i)) { objectSet.DeleteObject(i); } else { var entityKey = objectSet.CreateEntityKey(i); if (objectSet.HasAttached(entityKey)) { objectSet.DeleteObject(objectSet.GetObjectByKey(entityKey)); } else { if (predicate(objectSet, i)) { objectSet.Attach(i); objectSet.DeleteObject(i); } } } } } }
public static bool TryFixAll <TEntity, TForeginKey>(this ObjectSet <TEntity> list, IAssociatableCollection <TEntity> collection, TForeginKey value, Expression <Func <TEntity, TForeginKey> > field) where TEntity : class { var fieldName = ((MemberExpression)field.Body).Member.Name; foreach (var i in collection.Added) { list.TryAttach(i, true); i.Members().Properties[fieldName] = value; } foreach (var i in collection.Removed) { list.TryAttach(i); i.Members().Properties[fieldName] = null; } return(true); }