private StandardTrackedObject PromoteFastTrackedObject(MetaType type, object obj) { var standardTrackedObject = new StandardTrackedObject(this, type, obj, obj); items.Add(obj, standardTrackedObject); return(standardTrackedObject); }
private StandardTrackedObject PromoteFastTrackedObject(MetaType type, object obj) { StandardTrackedObject ti = new StandardTrackedObject(this, type, obj, obj); this.items.Add(obj, ti); return(ti); }
private TrackedObject Track(MetaType mt, object obj, Dictionary <object, object> visited, bool recurse, int level) { var standardTrackedObject = (StandardTrackedObject)GetTrackedObject(obj); if (standardTrackedObject != null || visited.ContainsKey(obj)) { return(standardTrackedObject); } var isWeaklyTracked = level > 1; standardTrackedObject = new StandardTrackedObject(this, mt, obj, obj, isWeaklyTracked); if (standardTrackedObject.HasDeferredLoaders) { throw System.Data.Linq.Error.CannotAttachAddNonNewEntities(); } items.Add(obj, standardTrackedObject); Attach(obj); visited.Add(obj, obj); if (recurse) { foreach (var parent in services.GetParents(mt, obj)) { Track(parent.Type, parent.Item, visited, recurse, level + 1); } { foreach (var child in services.GetChildren(mt, obj)) { Track(child.Type, child.Item, visited, recurse, level + 1); } return(standardTrackedObject); } } return(standardTrackedObject); }
private TrackedObject Track(MetaType mt, object obj, IDictionary <object, object> visited, bool recurse, int level) { var trackedObject = (StandardTrackedObject)GetTrackedObject(obj); if ((trackedObject == null) && !visited.ContainsKey(obj)) { bool isWeaklyTracked = level > 1; trackedObject = new StandardTrackedObject(this, mt, obj, obj, isWeaklyTracked); if (trackedObject.HasDeferredLoaders) { throw Error.CannotAttachAddNonNewEntities(); } items.Add(obj, trackedObject); Attach(obj); visited.Add(obj, obj); if (!recurse) { return(trackedObject); } foreach (RelatedItem item in services.GetParents(mt, obj)) { Track(item.Type, item.Item, visited, recurse, level + 1); } foreach (RelatedItem item2 in services.GetChildren(mt, obj)) { Track(item2.Type, item2.Item, visited, recurse, level + 1); } } return(trackedObject); }
internal override bool IsMemberPendingGeneration(MetaDataMember keyMember) { if (this.IsNew && keyMember.IsDbGenerated) { return(true); } // look for any FK association that has this key member (should only be one) foreach (MetaAssociation assoc in type.Associations) { if (assoc.IsForeignKey) { int index = assoc.ThisKey.IndexOf(keyMember); if (index > -1) { // we must have a reference to this other object to know if its side of // the association is generated or not object otherItem = null; if (assoc.ThisMember.IsDeferred) { otherItem = assoc.ThisMember.DeferredValueAccessor.GetBoxedValue(this.current); } else { otherItem = assoc.ThisMember.StorageAccessor.GetBoxedValue(this.current); } if (otherItem != null) { if (assoc.IsMany) { // Can't be pending generation for a value that would have to be the same // across many rows. continue; } else { StandardTrackedObject trackedOther = (StandardTrackedObject)this.tracker.GetTrackedObject(otherItem); if (trackedOther != null) { MetaDataMember otherMember = assoc.OtherKey[index]; return(trackedOther.IsMemberPendingGeneration(otherMember)); } } } } } } return(false); }
private TrackedObject Track(MetaType mt, object obj, Dictionary <object, object> visited, bool recurse, int level) { StandardTrackedObject tracked = (StandardTrackedObject)this.GetTrackedObject(obj); if (tracked != null || visited.ContainsKey(obj)) { return(tracked); } // The root object tracked is tracked normally - all other objects // in the reference graph are weakly tracked. bool weaklyTrack = level > 1; tracked = new StandardTrackedObject(this, mt, obj, obj, weaklyTrack); if (tracked.HasDeferredLoaders) { throw Error.CannotAttachAddNonNewEntities(); } this.items.Add(obj, tracked); this.Attach(obj); visited.Add(obj, obj); if (recurse) { // track parents (objects we are dependent on) foreach (RelatedItem parent in this.services.GetParents(mt, obj)) { this.Track(parent.Type, parent.Item, visited, recurse, level + 1); } // track children (objects that are dependent on us) foreach (RelatedItem child in this.services.GetChildren(mt, obj)) { this.Track(child.Type, child.Item, visited, recurse, level + 1); } } return(tracked); }
private TrackedObject Track(MetaType mt, object obj, Dictionary<object, object> visited, bool recurse, int level) { StandardTrackedObject tracked = (StandardTrackedObject)this.GetTrackedObject(obj); if(tracked != null || visited.ContainsKey(obj)) { return tracked; } // The root object tracked is tracked normally - all other objects // in the reference graph are weakly tracked. bool weaklyTrack = level > 1; tracked = new StandardTrackedObject(this, mt, obj, obj, weaklyTrack); if(tracked.HasDeferredLoaders) { throw Error.CannotAttachAddNonNewEntities(); } this.items.Add(obj, tracked); this.Attach(obj); visited.Add(obj, obj); if(recurse) { // track parents (objects we are dependent on) foreach(RelatedItem parent in this.services.GetParents(mt, obj)) { this.Track(parent.Type, parent.Item, visited, recurse, level + 1); } // track children (objects that are dependent on us) foreach(RelatedItem child in this.services.GetChildren(mt, obj)) { this.Track(child.Type, child.Item, visited, recurse, level + 1); } } return tracked; }
private StandardTrackedObject PromoteFastTrackedObject(MetaType type, object obj) { StandardTrackedObject ti = new StandardTrackedObject(this, type, obj, obj); this.items.Add(obj, ti); return ti; }