public void WhereIdMatchesStringIds()
        {
            var connection = TestConfiguration.GetConnection();
            var context    = new MongoDbContext(connection);
            var dbSet      = new MongoDbSet <WhereIdMatchesStringModel>(context);

            var entityCollection = new[]
            {
                new WhereIdMatchesStringModel {
                    Description = "1"
                },
                new WhereIdMatchesStringModel {
                    Description = "2"
                },
                new WhereIdMatchesStringModel {
                    Description = "3"
                },
                new WhereIdMatchesStringModel {
                    Description = "4"
                }
            };

            dbSet.AddRange(entityCollection);
            context.SaveChanges();

            var provider  = new MongoFrameworkQueryProvider <WhereIdMatchesStringModel>(connection);
            var queryable = new MongoFrameworkQueryable <WhereIdMatchesStringModel>(provider);

            var entityIds = entityCollection.Select(e => e.Id).Take(2);

            var idMatchQueryable = LinqExtensions.WhereIdMatches(queryable, entityIds);

            Assert.AreEqual(2, idMatchQueryable.Count());
            Assert.IsTrue(idMatchQueryable.ToList().All(e => entityIds.Contains(e.Id)));
        }
        public void EntityProcessorsNotFiredWhenNotTEntity()
        {
            EntityMapping.RegisterType(typeof(MongoFrameworkQueryableModel));

            var connection = TestConfiguration.GetConnection();
            var provider   = new MongoFrameworkQueryProvider <MongoFrameworkQueryableModel>(connection);
            var queryable  = new MongoFrameworkQueryable <MongoFrameworkQueryableModel>(provider);

            var processor = new TestProcessor <MongoFrameworkQueryableModel>();

            provider.EntityProcessors.Add(processor);

            var entityCollection = new EntityCollection <MongoFrameworkQueryableModel>();
            var writerPipeline   = new EntityWriterPipeline <MongoFrameworkQueryableModel>(connection);

            writerPipeline.AddCollection(entityCollection);
            entityCollection.Update(new MongoFrameworkQueryableModel {
                Title = "EntityProcessorNoFireTest"
            }, EntityEntryState.Added);
            writerPipeline.Write();

            foreach (var titles in queryable.Select(e => e.Title))
            {
                //Do nothing
            }

            Assert.IsFalse(processor.EntityProcessed);
        }
Esempio n. 3
0
        public async Task SumAsync_NullableDecimal_HasValue()
        {
            EntityMapping.RegisterType(typeof(QueryableAsyncSumModel));

            var connection = TestConfiguration.GetConnection();
            var context    = new MongoDbContext(connection);
            var provider   = new MongoFrameworkQueryProvider <QueryableAsyncSumModel>(connection);
            var queryable  = new MongoFrameworkQueryable <QueryableAsyncSumModel>(provider);

            context.ChangeTracker.SetEntityState(new QueryableAsyncSumModel {
                Title = "SumAsync_NullableDecimal_HasValue.1", NullableDecimalNumber = 5
            }, EntityEntryState.Added);
            context.ChangeTracker.SetEntityState(new QueryableAsyncSumModel {
                Title = "SumAsync_NullableDecimal_HasValue.2", NullableDecimalNumber = 9
            }, EntityEntryState.Added);
            context.ChangeTracker.SetEntityState(new QueryableAsyncSumModel {
                Title = "SumAsync_NullableDecimal_HasValue.3"
            }, EntityEntryState.Added);
            context.SaveChanges();

            var a      = queryable.Select(e => e.NullableDecimalNumber).Sum();
            var result = await queryable.Select(e => e.NullableDecimalNumber).SumAsync();

            Assert.AreEqual(14, result);
        }
        public void EntityProcessorsRunWhenToDictionaryIsUsed()
        {
            EntityMapping.RegisterType(typeof(MongoFrameworkQueryableModel));

            var connection = TestConfiguration.GetConnection();
            var provider   = new MongoFrameworkQueryProvider <MongoFrameworkQueryableModel>(connection);
            var queryable  = new MongoFrameworkQueryable <MongoFrameworkQueryableModel>(provider);

            var processor = new TestProcessor <MongoFrameworkQueryableModel>();

            provider.EntityProcessors.Add(processor);

            var entityCollection = new EntityCollection <MongoFrameworkQueryableModel>();
            var writerPipeline   = new EntityWriterPipeline <MongoFrameworkQueryableModel>(connection);

            writerPipeline.AddCollection(entityCollection);
            entityCollection.Update(new MongoFrameworkQueryableModel {
                Title = "EntityProcessorsRunWithToDictionaryTest"
            }, EntityEntryState.Added);
            writerPipeline.Write();

            var result = queryable.ToDictionary(m => m.Id);

            Assert.AreEqual("EntityProcessorsRunWithToDictionaryTest", result.FirstOrDefault().Value.Title);
            Assert.IsTrue(processor.EntityProcessed);
        }
        public void EntityProcessorsNotFiredWhenNotTEntity_Select()
        {
            EntityMapping.RegisterType(typeof(MongoFrameworkQueryableModel));

            var connection = TestConfiguration.GetConnection();
            var context    = new MongoDbContext(connection);
            var provider   = new MongoFrameworkQueryProvider <MongoFrameworkQueryableModel>(connection);
            var queryable  = new MongoFrameworkQueryable <MongoFrameworkQueryableModel>(provider);

            var processor = new TestProcessor <MongoFrameworkQueryableModel>();

            provider.EntityProcessors.Add(processor);

            context.ChangeTracker.SetEntityState(new MongoFrameworkQueryableModel {
                Title = "EntityProcessorsNotFiredWhenNotTEntity_Select"
            }, EntityEntryState.Added);
            context.SaveChanges();

            foreach (var titles in queryable.Select(e => e.Title))
            {
                //Do nothing
            }

            Assert.IsFalse(processor.EntityProcessed);
        }
        public async Task AnyAsync_WithPredicate()
        {
            EntityMapping.RegisterType(typeof(QueryableAsyncModel));

            var connection = TestConfiguration.GetConnection();
            var context    = new MongoDbContext(connection);
            var provider   = new MongoFrameworkQueryProvider <QueryableAsyncModel>(connection);
            var queryable  = new MongoFrameworkQueryable <QueryableAsyncModel>(provider);

            context.ChangeTracker.SetEntityState(new QueryableAsyncModel {
                Title = "AnyAsync_WithPredicate.1"
            }, EntityEntryState.Added);
            context.ChangeTracker.SetEntityState(new QueryableAsyncModel {
                Title = "AnyAsync_WithPredicate.2"
            }, EntityEntryState.Added);
            context.SaveChanges();

            var resultOne = await queryable.AnyAsync(e => e.Title == "AnyAsync_WithPredicate.2");

            Assert.IsTrue(resultOne);

            var resultTwo = await queryable.AnyAsync(e => e.Title == "AnyAsync_WithPredicate.3");

            Assert.IsFalse(resultTwo);
        }
        public void EntityProcessorsFiresOnEnumerationOfTEntity()
        {
            EntityMapping.RegisterType(typeof(MongoFrameworkQueryableModel));

            var connection = TestConfiguration.GetConnection();
            var context    = new MongoDbContext(connection);
            var provider   = new MongoFrameworkQueryProvider <MongoFrameworkQueryableModel>(connection);
            var queryable  = new MongoFrameworkQueryable <MongoFrameworkQueryableModel>(provider);

            var processor = new TestProcessor <MongoFrameworkQueryableModel>();

            provider.EntityProcessors.Add(processor);

            context.ChangeTracker.SetEntityState(new MongoFrameworkQueryableModel {
                Title = "EntityProcessorFireTest"
            }, EntityEntryState.Added);
            context.SaveChanges();

            foreach (var dbEntity in queryable)
            {
                //Do nothing
            }

            Assert.IsTrue(processor.EntityProcessed);
        }
        public void ReadMixedEntities()
        {
            var connection = TestConfiguration.GetConnection();
            var context    = new MongoDbContext(connection);
            var provider   = new MongoFrameworkQueryProvider <MixedReadA>(connection);
            var queryable  = new MongoFrameworkQueryable <MixedReadA>(provider);

            context.ChangeTracker.SetEntityState(new MixedReadA
            {
                Description = "MongoFrameworkQueryableTests.ReadMixedEntities"
            }, EntityEntryState.Added);

            context.ChangeTracker.SetEntityState <MixedReadA>(new MixedReadB
            {
                BIsForBoolean = true,
                Description   = "MongoFrameworkQueryableTests.ReadMixedEntities"
            }, EntityEntryState.Added);

            context.SaveChanges();

            var readMixedEntitiesQuery = queryable.Where(e => e.Description == "MongoFrameworkQueryableTests.ReadMixedEntities");

            Assert.AreEqual(2, readMixedEntitiesQuery.Count());
            Assert.AreEqual(2, readMixedEntitiesQuery.OfType <MixedReadA>().Count());
            Assert.AreEqual(1, readMixedEntitiesQuery.OfType <MixedReadB>().Count());
        }
        public void WhereIdMatchesGuids()
        {
            var connection       = TestConfiguration.GetConnection();
            var writerPipeline   = new EntityWriterPipeline <WhereIdMatchesGuidModel>(TestConfiguration.GetConnection());
            var entityCollection = new EntityCollection <WhereIdMatchesGuidModel>()
            {
                new WhereIdMatchesGuidModel {
                    Description = "1"
                },
                new WhereIdMatchesGuidModel {
                    Description = "2"
                },
                new WhereIdMatchesGuidModel {
                    Description = "3"
                },
                new WhereIdMatchesGuidModel {
                    Description = "4"
                }
            };

            writerPipeline.AddCollection(entityCollection);
            writerPipeline.Write();

            var provider  = new MongoFrameworkQueryProvider <WhereIdMatchesGuidModel>(connection);
            var queryable = new MongoFrameworkQueryable <WhereIdMatchesGuidModel>(provider);

            var entityIds = entityCollection.Select(e => e.Id).Take(2);

            var idMatchQueryable = LinqExtensions.WhereIdMatches(queryable, entityIds);

            Assert.AreEqual(2, idMatchQueryable.Count());
            Assert.IsTrue(idMatchQueryable.ToList().All(e => entityIds.Contains(e.Id)));
        }
Esempio n. 10
0
        public IQueryable <TEntity> AsQueryable()
        {
            var provider = new MongoFrameworkQueryProvider <TEntity>(Connection);

            provider.EntityProcessors.Add(new EntityMutationProcessor <TEntity>());
            var queryable = new MongoFrameworkQueryable <TEntity>(provider);

            return(queryable);
        }
        public async Task SingleOrDefaultAsync_NoValue()
        {
            EntityMapping.RegisterType(typeof(QueryableAsyncModel));

            var connection = TestConfiguration.GetConnection();
            var provider   = new MongoFrameworkQueryProvider <QueryableAsyncModel>(connection);
            var queryable  = new MongoFrameworkQueryable <QueryableAsyncModel>(provider);

            Assert.IsNull(await queryable.SingleOrDefaultAsync());
        }
        public async Task FirstAsync_NoValue()
        {
            EntityMapping.RegisterType(typeof(QueryableAsyncModel));

            var connection = TestConfiguration.GetConnection();
            var provider   = new MongoFrameworkQueryProvider <QueryableAsyncModel>(connection);
            var queryable  = new MongoFrameworkQueryable <QueryableAsyncModel>(provider);

            await Assert.ThrowsExceptionAsync <InvalidOperationException>(async() => await queryable.FirstAsync());
        }
        public void ValidToQuery()
        {
            EntityMapping.RegisterType(typeof(LinqExtensionsModel));

            var connection = TestConfiguration.GetConnection();
            var provider   = new MongoFrameworkQueryProvider <LinqExtensionsModel>(connection);
            var queryable  = new MongoFrameworkQueryable <LinqExtensionsModel>(provider);
            var result     = LinqExtensions.ToQuery(queryable);

            Assert.AreEqual("db.LinqExtensionsModel.aggregate([])", result);
        }
Esempio n. 14
0
        public async Task SumAsync_NullableLong_NoValue()
        {
            EntityMapping.RegisterType(typeof(QueryableAsyncSumModel));

            var connection = TestConfiguration.GetConnection();
            var provider   = new MongoFrameworkQueryProvider <QueryableAsyncSumModel>(connection);
            var queryable  = new MongoFrameworkQueryable <QueryableAsyncSumModel>(provider);

            var result = await queryable.Select(e => e.NullableLongNumber).SumAsync();

            Assert.IsNull(result);
        }
        public async Task AnyAsync_NoValues()
        {
            EntityMapping.RegisterType(typeof(QueryableAsyncModel));

            var connection = TestConfiguration.GetConnection();
            var context    = new MongoDbContext(connection);
            var provider   = new MongoFrameworkQueryProvider <QueryableAsyncModel>(connection);
            var queryable  = new MongoFrameworkQueryable <QueryableAsyncModel>(provider);

            var result = await queryable.AnyAsync();

            Assert.IsFalse(result);
        }
        public async Task MinAsync_NoValues()
        {
            EntityMapping.RegisterType(typeof(QueryableAsyncModel));

            var connection = TestConfiguration.GetConnection();
            var context    = new MongoDbContext(connection);
            var provider   = new MongoFrameworkQueryProvider <QueryableAsyncModel>(connection);
            var queryable  = new MongoFrameworkQueryable <QueryableAsyncModel>(provider);

            context.SaveChanges();

            await Assert.ThrowsExceptionAsync <InvalidOperationException>(async() => await queryable.Select(e => e.IntNumber).MinAsync());
        }
        public async Task CountAsync_NoValues()
        {
            EntityMapping.RegisterType(typeof(QueryableAsyncModel));

            var connection = TestConfiguration.GetConnection();
            var context    = new MongoDbContext(connection);
            var provider   = new MongoFrameworkQueryProvider <QueryableAsyncModel>(connection);
            var queryable  = new MongoFrameworkQueryable <QueryableAsyncModel>(provider);

            context.SaveChanges();

            var result = await queryable.CountAsync();

            Assert.AreEqual(0, result);
        }
Esempio n. 18
0
        /// <inheritdoc/>
        public async ValueTask <CacheEntry <T>?> GetAsync <T>(string cacheKey)
        {
            await TryConfigureIndexes();

            var provider  = new MongoFrameworkQueryProvider <DbCachedEntry>(Connection);
            var queryable = new MongoFrameworkQueryable <DbCachedEntry>(provider);

            var dbEntry    = queryable.Where(e => e.CacheKey == cacheKey).FirstOrDefault();
            var cacheEntry = default(CacheEntry <T>);

            if (dbEntry != default)
            {
                cacheEntry = new CacheEntry <T>((T)dbEntry.Value !, dbEntry.Expiry);
            }

            return(cacheEntry);
        }
        public static IQueryable <TEntity> SearchGeoNear <TEntity, TCoordinates>(this IMongoDbSet <TEntity> dbSet, Expression <Func <TEntity, object> > targetField, GeoJsonPoint <TCoordinates> point, Expression <Func <TEntity, object> > distanceResultField = null, double?maxDistance = null, double?minDistance = null) where TEntity : class where TCoordinates : GeoJsonCoordinates
        {
            var entitySerializer   = BsonSerializer.LookupSerializer <TEntity>();
            var keyExpressionField = new ExpressionFieldDefinition <TEntity>(targetField);
            var keyStringField     = keyExpressionField.Render(entitySerializer, BsonSerializer.SerializerRegistry);

            var distanceFieldName = "Distance";

            if (distanceResultField != null)
            {
                var distanceResultExpressionField = new ExpressionFieldDefinition <TEntity>(distanceResultField);
                var distanceResultStringField     = distanceResultExpressionField.Render(entitySerializer, BsonSerializer.SerializerRegistry);
                distanceFieldName = distanceResultStringField.FieldName;
            }

            var geoNearSettings = new BsonDocument
            {
                { "near", point.ToBsonDocument() },
                { "key", keyStringField.FieldName },
                { "distanceField", distanceFieldName },

                //Note: Limit here is maxed as an operational courtesy as future versions will eliminate it (see Jira SERVER-22949)
                //		Additionally, $geoNear operations still have a 16MB document limit in aggregation (see Jira SERVER-18965)
                { "limit", int.MaxValue }
            };

            if (maxDistance.HasValue)
            {
                geoNearSettings.Add("maxDistance", maxDistance.Value);
            }
            if (minDistance.HasValue)
            {
                geoNearSettings.Add("minDistance", minDistance.Value);
            }

            var stage = new BsonDocument
            {
                { "$geoNear", geoNearSettings }
            };

            var originalProvider = dbSet.Provider as IMongoFrameworkQueryProvider <TEntity>;
            var provider         = new MongoFrameworkQueryProvider <TEntity>(originalProvider, stage);

            return(new MongoFrameworkQueryable <TEntity>(provider));
        }
        public async Task SingleOrDefaultAsync_HasValue()
        {
            EntityMapping.RegisterType(typeof(QueryableAsyncModel));

            var connection = TestConfiguration.GetConnection();
            var context    = new MongoDbContext(connection);
            var provider   = new MongoFrameworkQueryProvider <QueryableAsyncModel>(connection);
            var queryable  = new MongoFrameworkQueryable <QueryableAsyncModel>(provider);

            context.ChangeTracker.SetEntityState(new QueryableAsyncModel {
                Title = "SingleOrDefaultAsync_HasValue.1"
            }, EntityEntryState.Added);
            context.SaveChanges();

            var result = await queryable.SingleOrDefaultAsync();

            Assert.AreEqual("SingleOrDefaultAsync_HasValue.1", result.Title);
        }
        public void EnumerateQueryable()
        {
            EntityMapping.RegisterType(typeof(MongoFrameworkQueryableModel));

            var connection = TestConfiguration.GetConnection();
            var context    = new MongoDbContext(connection);
            var provider   = new MongoFrameworkQueryProvider <MongoFrameworkQueryableModel>(connection);
            var queryable  = new MongoFrameworkQueryable <MongoFrameworkQueryableModel>(provider);

            context.ChangeTracker.SetEntityState(new MongoFrameworkQueryableModel {
                Title = "EnumerateQueryable"
            }, EntityEntryState.Added);
            context.SaveChanges();

            foreach (var dbEntity in queryable)
            {
                Assert.AreEqual("EnumerateQueryable", dbEntity.Title);
            }
        }
        public async Task ToArrayAsync()
        {
            EntityMapping.RegisterType(typeof(QueryableAsyncModel));

            var connection = TestConfiguration.GetConnection();
            var context    = new MongoDbContext(connection);
            var provider   = new MongoFrameworkQueryProvider <QueryableAsyncModel>(connection);
            var queryable  = new MongoFrameworkQueryable <QueryableAsyncModel>(provider);

            context.ChangeTracker.SetEntityState(new QueryableAsyncModel {
                Title = "ToArrayAsync"
            }, EntityEntryState.Added);
            context.SaveChanges();

            var result = await queryable.ToArrayAsync();

            Assert.AreEqual(1, result.Length);
            Assert.AreEqual("ToArrayAsync", result[0].Title);
        }
        public async Task AsyncEnumeration()
        {
            EntityMapping.RegisterType(typeof(QueryableAsyncModel));

            var connection = TestConfiguration.GetConnection();
            var context    = new MongoDbContext(connection);
            var provider   = new MongoFrameworkQueryProvider <QueryableAsyncModel>(connection);
            var queryable  = new MongoFrameworkQueryable <QueryableAsyncModel>(provider);

            context.ChangeTracker.SetEntityState(new QueryableAsyncModel {
                Title = "EnumerateQueryableAsync"
            }, EntityEntryState.Added);
            context.SaveChanges();

            await foreach (var entity in queryable.AsAsyncEnumerable())
            {
                Assert.AreEqual("EnumerateQueryableAsync", entity.Title);
            }
        }
        public async Task SingleOrDefaultAsync_HasMoreThanOneValue()
        {
            EntityMapping.RegisterType(typeof(QueryableAsyncModel));

            var connection = TestConfiguration.GetConnection();
            var context    = new MongoDbContext(connection);
            var provider   = new MongoFrameworkQueryProvider <QueryableAsyncModel>(connection);
            var queryable  = new MongoFrameworkQueryable <QueryableAsyncModel>(provider);

            context.ChangeTracker.SetEntityState(new QueryableAsyncModel {
                Title = "SingleOrDefaultAsync_HasMoreThanOneValue.1"
            }, EntityEntryState.Added);
            context.ChangeTracker.SetEntityState(new QueryableAsyncModel {
                Title = "SingleOrDefaultAsync_HasMoreThanOneValue.2"
            }, EntityEntryState.Added);
            context.SaveChanges();

            await Assert.ThrowsExceptionAsync <InvalidOperationException>(async() => await queryable.SingleOrDefaultAsync());
        }
        public static IQueryable <TEntity> SearchGeoNear <TEntity, TCoordinates>(this IMongoDbSet <TEntity> dbSet, Expression <Func <TEntity, object> > targetField, GeoJsonPoint <TCoordinates> point, Expression <Func <TEntity, object> > distanceResultField = null, double?maxDistance = null, double?minDistance = null) where TEntity : class where TCoordinates : GeoJsonCoordinates
        {
            var entitySerializer   = BsonSerializer.LookupSerializer <TEntity>();
            var keyExpressionField = new ExpressionFieldDefinition <TEntity>(targetField);
            var keyStringField     = keyExpressionField.Render(entitySerializer, BsonSerializer.SerializerRegistry);

            var distanceFieldName = "Distance";

            if (distanceResultField != null)
            {
                var distanceResultExpressionField = new ExpressionFieldDefinition <TEntity>(distanceResultField);
                var distanceResultStringField     = distanceResultExpressionField.Render(entitySerializer, BsonSerializer.SerializerRegistry);
                distanceFieldName = distanceResultStringField.FieldName;
            }

            var geoNearSettings = new BsonDocument
            {
                { "near", point.ToBsonDocument() },
                { "key", keyStringField.FieldName },
                { "distanceField", distanceFieldName }
            };

            if (maxDistance.HasValue)
            {
                geoNearSettings.Add("maxDistance", maxDistance.Value);
            }
            if (minDistance.HasValue)
            {
                geoNearSettings.Add("minDistance", minDistance.Value);
            }

            var stage = new BsonDocument
            {
                { "$geoNear", geoNearSettings }
            };

            var originalProvider = dbSet.Provider as IMongoFrameworkQueryProvider <TEntity>;
            var provider         = new MongoFrameworkQueryProvider <TEntity>(originalProvider, stage);

            return(new MongoFrameworkQueryable <TEntity>(provider));
        }
        public async Task MinAsync_WithSelector()
        {
            EntityMapping.RegisterType(typeof(QueryableAsyncModel));

            var connection = TestConfiguration.GetConnection();
            var context    = new MongoDbContext(connection);
            var provider   = new MongoFrameworkQueryProvider <QueryableAsyncModel>(connection);
            var queryable  = new MongoFrameworkQueryable <QueryableAsyncModel>(provider);

            context.ChangeTracker.SetEntityState(new QueryableAsyncModel {
                Title = "MinAsync_WithSelector.1", IntNumber = 20
            }, EntityEntryState.Added);
            context.ChangeTracker.SetEntityState(new QueryableAsyncModel {
                Title = "MinAsync_WithSelector.2", IntNumber = 10
            }, EntityEntryState.Added);
            context.SaveChanges();

            var result = await queryable.MinAsync(e => e.IntNumber);

            Assert.AreEqual(10, result);
        }
        public async Task MinAsync_HasValues_Date()
        {
            EntityMapping.RegisterType(typeof(QueryableAsyncModel));

            var connection = TestConfiguration.GetConnection();
            var context    = new MongoDbContext(connection);
            var provider   = new MongoFrameworkQueryProvider <QueryableAsyncModel>(connection);
            var queryable  = new MongoFrameworkQueryable <QueryableAsyncModel>(provider);

            context.ChangeTracker.SetEntityState(new QueryableAsyncModel {
                Title = "MinAsync_HasValues_Date.1", Date = new DateTime(2020, 3, 10, 0, 0, 0, DateTimeKind.Utc)
            }, EntityEntryState.Added);
            context.ChangeTracker.SetEntityState(new QueryableAsyncModel {
                Title = "MinAsync_HasValues_Date.2", Date = new DateTime(2020, 1, 10, 0, 0, 0, DateTimeKind.Utc)
            }, EntityEntryState.Added);
            context.SaveChanges();

            var result = await queryable.Select(e => e.Date).MinAsync();

            Assert.AreEqual(new DateTime(2020, 1, 10, 0, 0, 0, DateTimeKind.Utc), result);
        }
        public void EnumerateQueryable()
        {
            EntityMapping.RegisterType(typeof(MongoFrameworkQueryableModel));

            var connection = TestConfiguration.GetConnection();
            var provider   = new MongoFrameworkQueryProvider <MongoFrameworkQueryableModel>(connection);
            var queryable  = new MongoFrameworkQueryable <MongoFrameworkQueryableModel>(provider);

            var entityCollection = new EntityCollection <MongoFrameworkQueryableModel>();
            var writerPipeline   = new EntityWriterPipeline <MongoFrameworkQueryableModel>(connection);

            writerPipeline.AddCollection(entityCollection);
            entityCollection.Update(new MongoFrameworkQueryableModel {
                Title = "EnumerateQueryable"
            }, EntityEntryState.Added);
            writerPipeline.Write();

            foreach (var entity in queryable)
            {
                Assert.AreEqual("EnumerateQueryable", entity.Title);
            }
        }
        public void EntityProcessorsNotFiredWhenNotTEntity_Any()
        {
            EntityMapping.RegisterType(typeof(MongoFrameworkQueryableModel));

            var connection = TestConfiguration.GetConnection();
            var context    = new MongoDbContext(connection);
            var provider   = new MongoFrameworkQueryProvider <MongoFrameworkQueryableModel>(connection);
            var queryable  = new MongoFrameworkQueryable <MongoFrameworkQueryableModel>(provider);

            var processor = new TestProcessor <MongoFrameworkQueryableModel>();

            provider.EntityProcessors.Add(processor);

            context.ChangeTracker.SetEntityState(new MongoFrameworkQueryableModel {
                Title = "EntityProcessorsNotFiredWhenNotTEntity_Any"
            }, EntityEntryState.Added);
            context.SaveChanges();

            var result = queryable.Any(e => e.Title == "EntityProcessorsNotFiredWhenNotTEntity_Any");

            Assert.IsTrue(result);
            Assert.IsFalse(processor.EntityProcessed);
        }
        public void EntityProcessorsRunWhenToDictionaryIsUsed()
        {
            EntityMapping.RegisterType(typeof(MongoFrameworkQueryableModel));

            var connection = TestConfiguration.GetConnection();
            var context    = new MongoDbContext(connection);
            var provider   = new MongoFrameworkQueryProvider <MongoFrameworkQueryableModel>(connection);
            var queryable  = new MongoFrameworkQueryable <MongoFrameworkQueryableModel>(provider);

            var processor = new TestProcessor <MongoFrameworkQueryableModel>();

            provider.EntityProcessors.Add(processor);

            context.ChangeTracker.SetEntityState(new MongoFrameworkQueryableModel {
                Title = "EntityProcessorsRunWithToDictionaryTest"
            }, EntityEntryState.Added);
            context.SaveChanges();

            var result = queryable.ToDictionary(m => m.Id);

            Assert.AreEqual("EntityProcessorsRunWithToDictionaryTest", result.FirstOrDefault().Value.Title);
            Assert.IsTrue(processor.EntityProcessed);
        }