예제 #1
0
        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);
        }
예제 #2
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);
        }
예제 #3
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()));
        }