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); }
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); }
public void BuildMember_WhenPassingMemberExpressionOnNestedItem_GeneratesValidLambda() { var builder = new DynamicLambdaBuilder(); var expression = builder.BuildMember(typeof(Store.NestedItem), "i => i.Value"); Assert.IsNotNull(expression); }
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); }
public void GetIdLE_PersistenceIdAttributeWithDuplicateId_DuplicatedIdException() { Assert.ThrowsException <DuplicateIdException>(() => { VersionWithDuplicateId version = new VersionWithDuplicateId() { Name = "versionWithId", Descpription = "D" }; var expression = DynamicLambdaBuilder.GetIdLE(version, typeof(PersistenceIdAttribute)); }); }
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); }
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); }
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); }