public override Task <ICollection> GetOrphansAsync(object snapshot, string entityName, CancellationToken cancellationToken) { if (cancellationToken.IsCancellationRequested) { return(Task.FromCanceled <ICollection>(cancellationToken)); } try { var sn = new SetSnapShot <T>((IEnumerable <T>)snapshot); // TODO: Avoid duplicating shortcuts and array copy, by making base class GetOrphans() more flexible if (WrappedSet.Count == 0) { return(Task.FromResult <ICollection>(sn)); } if (((ICollection)sn).Count == 0) { return(Task.FromResult <ICollection>(sn)); } return(GetOrphansAsync(sn, WrappedSet.ToArray(), entityName, Session, cancellationToken)); } catch (Exception ex) { return(Task.FromException <ICollection>(ex)); } }
public void Transforms() { var fixture = XElement.Parse(@"<z><p></p><p></p><q><h></h></q><q><h></h></q></z>"); var element = new XElementAdapter(fixture); var set = new WrappedSet(element); new ExampleTransformation().Transform(set); Assert.AreEqual("B", set.First("p").Attr("x")); Assert.AreEqual("WrappedSet(<z><p x=\"B\">A</p><p x=\"B\">A</p><q><h>1</h></q><q><h>2</h></q><q><h>C</h></q></z>)", set.ToString()); }
/// <summary> /// Initializes this PersistentSet from the cached values. /// </summary> /// <param name="persister">The CollectionPersister to use to reassemble the PersistentSet.</param> /// <param name="disassembled">The disassembled PersistentSet.</param> /// <param name="owner">The owner object.</param> /// <param name="cancellationToken">A cancellation token that can be used to cancel the work</param> public override async Task InitializeFromCacheAsync(ICollectionPersister persister, object disassembled, object owner, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); var array = (object[])disassembled; int size = array.Length; BeforeInitialize(persister, size); for (int i = 0; i < size; i++) { var element = await(persister.ElementType.AssembleAsync(array[i], Session, owner, cancellationToken)).ConfigureAwait(false); if (element != null) { WrappedSet.Add((T)element); } } SetInitialized(); }
public override async Task <IEnumerable> GetDeletesAsync(ICollectionPersister persister, bool indexIsFormula, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); IType elementType = persister.ElementType; var sn = (SetSnapShot <T>)GetSnapshot(); var deletes = new List <T>(((ICollection <T>)sn).Count); deletes.AddRange(sn.Where(obj => !WrappedSet.Contains(obj))); foreach (var obj in WrappedSet) { T oldValue; if (sn.TryGetValue(obj, out oldValue) && await(elementType.IsDirtyAsync(obj, oldValue, Session, cancellationToken)).ConfigureAwait(false)) { deletes.Add(oldValue); } } return(deletes); }
IQueryable GetQueryable() { return(queryable ?? (queryable = WasInitialized ? WrappedSet.AsQueryable() : this.Query(Session))); }