public void Update <TEntity>(TEntity entity)
            where TEntity : class
        {
            IMongoCollection <TEntity> mongoCollection = (IMongoCollection <TEntity>)GetCollection(typeof(TEntity));

            mongoCollection.WithWriteConcern(WriteConcern.Acknowledged).ReplaceOne(DynamicLambdaBuilder.GetIdLE(entity, typeof(PersistenceIdAttribute)), entity);
        }
Exemplo n.º 2
0
        public void CreateFilterForCollection_TakeAFilterExpression_And_Return_ABooleanExpression()
        {
            IEnumerable <InfoEntity> infoEntityList
                = Enumerable
                  .Range(1, 10)
                  .Select(x => new InfoEntity
            {
                Lastname = $"__lastname{x}"
            })
                  .ToList();

            var expression1 = DynamicLambdaBuilder
                              .CreateFilterForCollection <InfoEntity, string>(
                x => x.Lastname,
                infoEntityList.ElementAt(0)
                );

            Assert.AreEqual(((expression1.Body as BinaryExpression).Right as ConstantExpression).Value, "__lastname1");

            var expression2 = DynamicLambdaBuilder
                              .CreateFilterForCollection <InfoEntity, string>(
                x => x.Lastname,
                infoEntityList.ElementAt(3)
                );

            Assert.AreEqual(((expression2.Body as BinaryExpression).Right as ConstantExpression).Value, "__lastname4");

            var expression3 = DynamicLambdaBuilder
                              .CreateFilterForCollection <InfoEntity, string>(
                x => x.Lastname,
                infoEntityList.ElementAt(6)
                );

            Assert.AreEqual(((expression3.Body as BinaryExpression).Right as ConstantExpression).Value, "__lastname7");
        }
        public void BuildPredicate_WhenNoLambdaOperator_ThrowsArgumentException()
        {
            var builder = new DynamicLambdaBuilder();

            var ex = Assert.Throws<ArgumentException>(() => builder.BuildPredicate(typeof(Item), "i.Value == \"Foo\""));
            Assert.AreEqual(ExceptionMessages.DynamicLambdaBuilder_InvalidExpressionFormat, ex.Message);
        }
        public void BuildMember_WhenPassingMemberExpressionOnNestedItem_GeneratesValidLambda()
        {
            var builder = new DynamicLambdaBuilder();

            var expression = builder.BuildMember(typeof(Store.NestedItem), "i => i.Value");
            Assert.IsNotNull(expression);
        }
Exemplo n.º 5
0
        public void BuildMember_WhenPassingMemberExpressionOnNestedItem_GeneratesValidLambda()
        {
            var builder = new DynamicLambdaBuilder();

            var expression = builder.BuildMember(typeof(Store.NestedItem), "i => i.Value");

            Assert.IsNotNull(expression);
        }
Exemplo n.º 6
0
        public void BuildPredicate_WhenNoLambdaOperator_ThrowsArgumentException()
        {
            var builder = new DynamicLambdaBuilder();

            var ex = Assert.Throws <ArgumentException>(() => builder.BuildPredicate(typeof(Item), "i.Value == \"Foo\""));

            Assert.AreEqual(ExceptionMessages.DynamicLambdaBuilder_InvalidExpressionFormat, ex.Message);
        }
        public void Remove <TEntity>(TEntity entity)
            where TEntity : class
        {
            ICollection <TEntity> collection = (ICollection <TEntity>)GetCollection(typeof(TEntity));
            TEntity entityStored             = collection.SingleOrDefault(DynamicLambdaBuilder.GetIdLE(entity).Compile());

            collection.Remove(entityStored);
        }
Exemplo n.º 8
0
 public void GetIdLE_PersistenceIdAttributeWithDuplicateId_DuplicatedIdException()
 {
     Assert.ThrowsException <DuplicateIdException>(() =>
     {
         VersionWithDuplicateId version = new VersionWithDuplicateId()
         {
             Name = "versionWithId", Descpription = "D"
         };
         var expression = DynamicLambdaBuilder.GetIdLE(version, typeof(PersistenceIdAttribute));
     });
 }
Exemplo n.º 9
0
        public void GetIdLE_PersistenceIdAttributeWithoutIdAttribute_DuplicatedIdException()
        {
            VersionWithoutIdAttribute version = new VersionWithoutIdAttribute()
            {
                Name = "versionWithId", Descpription = "D"
            };
            var expression       = DynamicLambdaBuilder.GetIdLE(version, typeof(PersistenceIdAttribute));
            var binaryExpression = (BinaryExpression)expression.Body;
            var memberExpression = (MemberExpression)binaryExpression.Left;

            Assert.AreEqual("Id", memberExpression.Member.Name);
        }
        public void BuildPredicate_WhenPassingValidExpressionForNestedItem_GeneratesValidLambda()
        {
            var builder = new DynamicLambdaBuilder();

            var expression = builder.BuildPredicate(typeof(Store.NestedItem), "i => i.Value == \"Alpha\" || i.Value == \"Bravo\"");

            var result = Store.QueryNestedItems(expression);
            Assert.AreEqual(4, result.Length);
            Assert.AreEqual("Alpha", result[0].Value);
            Assert.AreEqual("Alpha", result[1].Value);
            Assert.AreEqual("Bravo", result[2].Value);
            Assert.AreEqual("Bravo", result[3].Value);
        }
Exemplo n.º 11
0
        public void BuildPredicate_WhenPassingValidExpressionForNestedItem_GeneratesValidLambda()
        {
            var builder = new DynamicLambdaBuilder();

            var expression = builder.BuildPredicate(typeof(Store.NestedItem), "i => i.Value == \"Alpha\" || i.Value == \"Bravo\"");

            var result = Store.QueryNestedItems(expression);

            Assert.AreEqual(4, result.Length);
            Assert.AreEqual("Alpha", result[0].Value);
            Assert.AreEqual("Alpha", result[1].Value);
            Assert.AreEqual("Bravo", result[2].Value);
            Assert.AreEqual("Bravo", result[3].Value);
        }
Exemplo n.º 12
0
        public void UpdateAsTransaction <TEntity, TResult>(IEnumerable <TEntity> entityList,
                                                           Expression <Func <TEntity, TResult> > filter)
            where TEntity : class
        {
            IMongoCollection <TEntity> mongoCollection =
                (IMongoCollection <TEntity>)GetCollection(typeof(TEntity));
            IClientSessionHandle clientSessionHandler = MongoDatabase.Client.StartSession();

            mongoCollection.WithWriteConcern(WriteConcern.Acknowledged)
            .BulkWrite(clientSessionHandler,
                       entityList
                       .Select(entity => new ReplaceOneModel <TEntity>(
                                   DynamicLambdaBuilder
                                   .CreateFilterForCollection(filter, entity), entity)));
        }
        public void Add <TEntity>(TEntity entity)
            where TEntity : class
        {
            ICollection <TEntity> entityCollection = (ICollection <TEntity>)GetCollection(typeof(TEntity));

            if (AutogenerateId)
            {
                PropertyInfo keyPropertyInfo = DynamicLambdaBuilder.GetKeyProperty <TEntity>(typeof(PersistenceIdAttribute));
                if (keyPropertyInfo != default)
                {
                    keyPropertyInfo.SetValue(entity, ObjectId.GenerateNewId());
                }
                else
                {
                    entity.GetType().GetProperty("Id").SetValue(entity, ObjectId.GenerateNewId());
                }
            }
            entityCollection.Add(entity);
        }
        public void Add <TEntity>(IEnumerable <TEntity> entityList) where TEntity : class
        {
            PropertyInfo keyPropertyInfo = AutogenerateId ?
                                           DynamicLambdaBuilder.GetKeyProperty <TEntity>(typeof(PersistenceIdAttribute)) : default;

            ICollection <TEntity> entityCollection = (ICollection <TEntity>)GetCollection(typeof(TEntity));

            foreach (var entity in entityList)
            {
                if (keyPropertyInfo != default)
                {
                    keyPropertyInfo.SetValue(entity, ObjectId.GenerateNewId());
                }
                else
                {
                    entity.GetType().GetProperty("Id").SetValue(entity, ObjectId.GenerateNewId());
                }
                entityCollection.Add(entity);
            }
        }
        public void Update <TEntity>(TEntity entity)
            where TEntity : class
        {
            ICollection <TEntity> collection      = (ICollection <TEntity>)GetCollection(typeof(TEntity));
            List <TEntity>        nCollection     = new List <TEntity>();
            PropertyInfo          keyPropertyInfo = AutogenerateId ?
                                                    DynamicLambdaBuilder.GetKeyProperty <TEntity>(typeof(PersistenceIdAttribute)) :
                                                    entity.GetType().GetProperty("Id")
            ;

            foreach (var _entity in collection)
            {
                if (keyPropertyInfo.GetValue(entity).Equals(keyPropertyInfo.GetValue(_entity)))
                {
                    continue;
                }
                nCollection.Add(_entity);
            }
            nCollection.Add(entity);
            UpdateCollection(typeof(TEntity), nCollection);
        }