ContextQuery <T>( string partitionKey, StashContext <T> context, IQueryable <T> query, CommitStrategy commitStrategy) where T : IDataHelper <T>, new() { // Insert const int insertCount = 5; var insertItems = ContextInsert <T>(context, insertCount, partitionKey); Assert.IsTrue(context.GetTrackedEntities(EntityState.Inserted).Count == insertCount); context.Commit(commitStrategy); Assert.IsTrue(context.GetTrackedEntities(EntityState.Unchanged).Count == insertCount); // Detach a few var detachedItems = insertItems.Where((item, idx) => idx % 2 == 1).ToList(); int detachCount = detachedItems.Count; detachedItems.ForEach(item => context.Detach(item)); Assert.IsTrue(context.GetTrackedEntities(EntityState.Unchanged).Count == insertCount - detachCount); // query var queryItems = query.ToList(); Assert.IsTrue(queryItems.Count == insertCount); Assert.IsTrue(context.GetTrackedEntities(EntityState.Unchanged).Count == insertCount); // delete queryItems.ForEach(context.Delete); context.Commit(commitStrategy); Assert.IsTrue( context.GetTrackedEntities().Count == 0); }
ContextFull <T>( string partitionKey, IQueryable <T> query, CommitStrategy commitStrategy) where T : IDataHelper <T>, new() { var client = StashConfiguration.GetClient <T>(); const int insertCount = 5; // insert insertCount and commit var context = client.GetContext(); var insertItems = ContextInsert <T>(context, insertCount, partitionKey); Assert.IsTrue(context.GetTrackedEntities(EntityState.Inserted).Count == insertCount); context.Commit(commitStrategy); Assert.IsTrue(context.GetTrackedEntities(EntityState.Unchanged).Count == insertCount); // --------------------------------------------------------------------------------------------------------- const int updateCount = 7; // (1) Insert or Update New. No etag needed. context = client.GetContext(); var insertItems2 = ContextInsertOrUpdate <T>(context, 1, partitionKey); // (2) Insert or Merge New. No etag needed. var insertItems3 = ContextInsertOrMerge <T>(context, 1, partitionKey); // (3) Insert or Update Old. No etag needed. insertItems[0].UpdateDateTime(); context.InsertOrUpdate(insertItems[0]); // (4) Insert or Merge Old. No etag needed. insertItems[1].UpdateDateTime(); context.InsertOrMerge(insertItems[1]); // (5) Update Old. ETag needed. insertItems[2].UpdateDateTime(); context.Update(insertItems[2]); // (6) Merge Old. ETag needed. insertItems[3].UpdateDateTime(); context.Merge(insertItems[3]); // (7) Delete Old. ETag needed. context.Delete(insertItems[4]); Assert.IsTrue(context.GetTrackedEntities(EntityState.InsertedOrUpdated).Count == 2); Assert.IsTrue(context.GetTrackedEntities(EntityState.InsertedOrMerged).Count == 2); Assert.IsTrue(context.GetTrackedEntities(EntityState.Updated).Count == 1); Assert.IsTrue(context.GetTrackedEntities(EntityState.Merged).Count == 1); Assert.IsTrue(context.GetTrackedEntities(EntityState.Deleted).Count == 1); Assert.IsTrue(context.GetTrackedEntities( EntityState.InsertedOrUpdated | EntityState.InsertedOrMerged | EntityState.Updated | EntityState.Merged | EntityState.Deleted).Count == updateCount); Assert.IsTrue(context.GetTrackedEntities().Count == updateCount); context.Commit(commitStrategy); Assert.IsTrue(context.GetTrackedEntities().Count == updateCount - 1); Assert.IsTrue(context.GetTrackedEntities(EntityState.Unchanged).Count == updateCount - 1); // query and delete ... we should have to delete 6 since we inserted 5 + 2 and deleted 1 var deleteItems = query.ToList(); int deleteCount = deleteItems.Count; Assert.IsTrue(deleteItems.Count == 6); deleteItems .ForEach( i => context.Delete(i)); Assert.IsTrue(context.GetTrackedEntities(EntityState.Deleted).Count == deleteCount); context.Commit(commitStrategy); Assert.IsTrue(context.GetTrackedEntities(EntityState.Unchanged).Count == 0); }
public OngoingKnockoutBinding Bind <TProperty>(Expression <Func <TViewModel, List <TProperty> > > property, Expression <Func <TViewModel, List <SelectOption> > > optionsProperty = null, CommitStrategy commitStrategy = CommitStrategy.OnChange) { var propertyName = property.GetPropertyName(); _commitStrategies.Add(propertyName, commitStrategy); return(new OngoingKnockoutBinding(propertyName, optionsProperty?.GetPropertyName())); }