public MongoDbEntityModifedAllEvent(ICommandRepository commandRepository, ISpecificationQueryStrategy <TEntity> specificationStrategy, IEnumerable <MongoUpdateItem <TEntity> > mongoUpdateItems, WriteConcern writeConcern) : base(commandRepository, null) { MongoUpdateItems = mongoUpdateItems; SpecificationStrategy = specificationStrategy; WriteConcern = writeConcern; }
public MongoDbEntityModifedAllEvent(ICommandRepository commandRepository, ISpecificationQueryStrategy <TEntity> specificationStrategy, IMongoUpdate mongoUpdate, WriteConcern writeConcern) : base(commandRepository, null) { MongoUpdate = mongoUpdate; SpecificationStrategy = specificationStrategy; WriteConcern = writeConcern; }
/// <summary> /// Applies a criteria that is used for matching entities against and combine it with the current specified predicate using the logical "and". /// </summary> /// <param name="predicate">A function to filter each entity.</param> /// <returns>The current instance.</returns> public QueryOptions <T> SatisfyBy([NotNull] Expression <Func <T, bool> > predicate) { Guard.NotNull(predicate, nameof(predicate)); predicate = _specificationStrategy != null?_specificationStrategy.Predicate.And(predicate) : predicate; _specificationStrategy = new SpecificationQueryStrategy <T>(predicate); return(this); }
/// <summary> /// Includes a specification strategy/criteria that is used for matching entities against and combine it with the current specified predicate using the logical "and". /// </summary> /// <param name="criteria">The specification criteria that is used for matching entities against.</param> /// <returns>The current instance.</returns> public QueryOptions <T> Include([NotNull] ISpecificationQueryStrategy <T> criteria) { Guard.NotNull(criteria, nameof(criteria)); var predicate = _specificationStrategy != null?_specificationStrategy.Predicate.And(criteria.Predicate) : criteria.Predicate; _specificationStrategy = new SpecificationQueryStrategy <T>(predicate); return(this); }
public WriteConcernResult ModifyAll <TEntity>( ICommandRepository commandRepository, ISpecificationQueryStrategy <TEntity> specificationStrategy, WriteConcern writeConcern, params MongoUpdateItem <TEntity>[] updateItems) where TEntity : class { if (writeConcern == null) { throw new ArgumentNullException("writeConcern", "writeConcern is null."); } if (specificationStrategy == null) { throw new ArgumentNullException("predicate", "predicate is null."); } if (updateItems == null) { throw new ArgumentNullException("mongoUpdate", "mongoUpdate is null."); } var mongoDatabase = commandRepository.ObjectContext as MongoDatabase; if (mongoDatabase == null) { throw new NotSupportedException("Load can only be used with a DbContext"); } var updateBuilder = new UpdateBuilder(); foreach (var item in updateItems) { var value = BsonTypeMapper.MapToBsonValue(item.Value); updateBuilder.Set(item.Key, value); } var collection = mongoDatabase.GetCollection <TEntity>(typeof(TEntity).FullName); var query = collection.AsQueryable().AddQueryStrategy(specificationStrategy); var mongoQuery = ((MongoQueryable <TEntity>)query).GetMongoQuery(); var result = collection.Update(mongoQuery, updateBuilder, UpdateFlags.Multi, writeConcern); var modifyAllEvent = new MongoDbEntityModifedAllEvent <TEntity>(commandRepository, specificationStrategy, updateBuilder, writeConcern); commandRepository.RaiseEvent(modifyAllEvent); return(result); }
public WriteConcernResult ModifyAll <TEntity>( ICommandRepository commandRepository, ISpecificationQueryStrategy <TEntity> specificationStrategy, WriteConcern writeConcern, IMongoUpdate mongoUpdate) where TEntity : class { if (writeConcern == null) { throw new ArgumentNullException("writeConcern", "writeConcern is null."); } if (specificationStrategy == null) { throw new ArgumentNullException("predicate", "predicate is null."); } if (mongoUpdate == null) { throw new ArgumentNullException("mongoUpdate", "mongoUpdate is null."); } var mongoDatabase = commandRepository.ObjectContext as MongoDatabase; if (mongoDatabase == null) { throw new NotSupportedException("ModifyAll can only be used with a MongoDatabase context"); } var collection = mongoDatabase.GetCollection <TEntity>(typeof(TEntity).FullName); var query = collection.AsQueryable().AddQueryStrategy(specificationStrategy); var mongoQuery = ((MongoQueryable <TEntity>)query).GetMongoQuery(); // Call Mongo var result = collection.Update(mongoQuery, mongoUpdate, UpdateFlags.Multi, writeConcern); var modifyAllEvent = new MongoDbEntityModifedAllEvent <TEntity>(commandRepository, specificationStrategy, mongoUpdate, writeConcern); commandRepository.RaiseEvent(modifyAllEvent); return(result); }
public static IQueryStrategy AsQueryStrategy <T>(this ISpecificationQueryStrategy <T> specification) { return((IQueryStrategy)specification); }
public static WriteConcernResult ModifyAll <TEntity>(this IRepository commandRepository, ISpecificationQueryStrategy <TEntity> specificationStrategy, IMongoUpdate mongoUpdate) where TEntity : class { return(_DefaultImplementation.ModifyAll <TEntity>(commandRepository, specificationStrategy, new WriteConcern(), mongoUpdate)); }
public static WriteConcernResult ModifyAll <TEntity>(this IRepository commandRepository, ISpecificationQueryStrategy <TEntity> specificationStrategy, WriteConcern writeConcern, params MongoUpdateItem <TEntity>[] updateItems) where TEntity : class { return(_DefaultImplementation.ModifyAll <TEntity>(commandRepository, specificationStrategy, writeConcern, updateItems)); }