Ejemplo n.º 1
0
        /// <summary>
        /// Executes save of entity on database
        /// </summary>
        /// <param name="entity">Entity to save</param>
        public void Save(TEntity entity)
        {
            //Se non è passato un dato valido, emetto eccezione
            if (entity == null)
            {
                throw new ArgumentNullException(nameof(entity));
            }

            //Utilizzo l'helper per il salvataggio
            RepositoryHelper.Save(entity, DataSession, s =>
            {
                //Se l'entità ha un identificatore nullo, aggiungo
                if (entity.GetId() == null)
                {
                    //Eseguo l'assegnazione dell'identificatore primario
                    AssignPrimaryIdentifier(entity);

                    //Inserisco ed esco
                    Collection.InsertOne(entity);
                    return;
                }

                //In caso contrario, compongo il filtro per individuare
                //univocamente l'entità in modo che possa essere rimpiazzata
                FieldDefinition <TEntity, object> idFieldDefinition = new StringFieldDefinition <TEntity, object>("Id");
                var uniqueFilter = Builders <TEntity> .Filter.Eq(idFieldDefinition, entity.GetId());

                //Eseguo il replace
                Collection.FindOneAndReplace(uniqueFilter, entity);
            });
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Get maximum value on entity
        /// </summary>
        /// <typeparam name="TOutput">Type of output</typeparam>
        /// <param name="fieldName">Field name</param>
        /// <returns>Returns value</returns>
        protected TOutput Max <TOutput>(string fieldName)
        {
            //Validazione argomenti
            if (string.IsNullOrEmpty(fieldName))
            {
                throw new ArgumentNullException(nameof(fieldName));
            }

            //Definizione del campo su cui lavorare
            var idFieldDefinition = new StringFieldDefinition <TEntity, object>(fieldName);

            //Recupero il primo elemento con valore massimo
            var elementWithMaxValue = Collection
                                      .Find(Builders <TEntity> .Filter.Empty)
                                      .Sort(Builders <TEntity> .Sort.Descending(idFieldDefinition))
                                      .Limit(1)
                                      .FirstOrDefault();

            //Se l'elemento non esiste, ritorno il default
            if (elementWithMaxValue == null)
            {
                return(default(TOutput));
            }

            //Recupero il valore della proprietà
            return((TOutput)elementWithMaxValue.GetId());
        }
        public void MigrateIdentity(string fromVersion, string toVersion)
        {
            if (!ValidateMigrationOperation("Migrate Identity", fromVersion, toVersion))
            {
                return;
            }

            //creating collection
            var db = _mongoClient.GetDatabase(_config.DataBase);

            db.CreateCollection(IdentityMongodbSchema.Collection);

            //creating index
            var fieldDef = new StringFieldDefinition <BsonDocument>(IdentityMongodbSchema.IdentityNameProp);
            var indexDef = Builders <BsonDocument> .IndexKeys.Ascending(fieldDef);

            var indexOpt = new CreateIndexOptions <BsonDocument>()
            {
                Unique = true,
                Name   = IdentityMongodbSchema.IdentityNameIndex
            };

            db.GetCollection <BsonDocument>(IdentityMongodbSchema.Collection)
            .Indexes
            .CreateOne(indexDef, indexOpt);
        }
        public bool Execute(IMongoDatabase database, MongoStorageOptions storageOptions, IMongoMigrationContext migrationContext)
        {
            var name = $@"{storageOptions.Prefix}.signal";

            database.DropCollection(name);

            var cosmosStorageOptions = storageOptions as CosmosStorageOptions;

            if (cosmosStorageOptions != null)
            {
                database.CreateCollection(name);
                var collection = database.GetCollection <BsonDocument>(name);
                var options    = new CreateIndexOptions {
                    ExpireAfter = TimeSpan.FromHours(cosmosStorageOptions.CosmosHourlyTtl)
                };
                var field           = new StringFieldDefinition <BsonDocument>("_ts");
                var indexDefinition = new IndexKeysDefinitionBuilder <BsonDocument>().Ascending(field);
                collection.Indexes.CreateOne(indexDefinition, options);
            }

            var createOptions = new CreateCollectionOptions
            {
                Capped       = true,
                MaxSize      = 1000000,
                MaxDocuments = 1000
            };

            database.CreateCollection(name, createOptions);

            return(true);
        }
Ejemplo n.º 5
0
        private static void ApplyPredicate <TEntity, TForeign>(AggregateQueryable <TEntity> aggregateQueryable, Expression predicate, string asFieldName)
        {
            if (predicate == null)
            {
                return;
            }

            var foreignType  = typeof(TForeign);
            var isEnumerable = typeof(TForeign).IsEnumerable();

            if (isEnumerable)
            {
                foreignType = foreignType.GetElementTypeOf();
            }

            //lamb = Expression.Lambda(methodCall.Arguments[0], Expression.Parameter(typeof(TEntity), "p"));
            var filterDefinitionBuilder = new FilterDefinitionBuilder <TEntity>();
            var param1Type = typeof(FieldDefinition <TEntity>);
            var param2Type = typeof(FilterDefinition <>).MakeGenericType(foreignType);

            var method = filterDefinitionBuilder.GetType()
                         .GetGenericMethod(nameof(filterDefinitionBuilder.ElemMatch), BindingFlags.Public | BindingFlags.Instance,
                                           new[] { foreignType }, new[] { param1Type, param2Type }, typeof(FilterDefinition <TEntity>));

            var expressionFilterDefinition = Activator.CreateInstance(typeof(ExpressionFilterDefinition <>).MakeGenericType(foreignType), predicate);
            var asField = new StringFieldDefinition <TEntity>(asFieldName);

            var elmMatch = (FilterDefinition <TEntity>)method.Invoke(filterDefinitionBuilder, new object[] { asField, expressionFilterDefinition });

            //Filter ($match) elements of TForeign using predicate
            aggregateQueryable.AggregateFluent = aggregateQueryable.AggregateFluent.Match(elmMatch);
        }
        public void Should_resolve_array_name_with_positional_operator_with_multiple_dots()
        {
            var subject = new StringFieldDefinition <Person, string>("Pets.$.Name.Last");

            var renderedField = subject.Render(BsonSerializer.SerializerRegistry.GetSerializer <Person>(), BsonSerializer.SerializerRegistry);

            renderedField.FieldName.Should().Be("pets.$.name.ln");
            renderedField.FieldSerializer.Should().BeOfType <StringSerializer>();
        }
        public void Should_resolve_a_nested_field()
        {
            var subject = new StringFieldDefinition<Person, string>("Name.First");

            var renderedField = subject.Render(BsonSerializer.SerializerRegistry.GetSerializer<Person>(), BsonSerializer.SerializerRegistry);

            renderedField.FieldName.Should().Be("name.fn");
            renderedField.FieldSerializer.Should().BeOfType<StringSerializer>();
        }
Ejemplo n.º 8
0
    protected void CreateIndex(string fieldName, CreateIndexOptions options)
    {
        var field    = new StringFieldDefinition <TModel>(fieldName);
        var indexDef = new IndexKeysDefinitionBuilder <TModel>().Ascending(field);

        var indexModel = new CreateIndexModel <TModel>(indexDef, options);

        _collection.Indexes.CreateOne(indexModel);
    }
        public void Should_resolve_from_a_BsonDocumentSerializer_with_dots()
        {
            var subject = new StringFieldDefinition<BsonDocument, BsonValue>("test.one.two.three");

            var renderedField = subject.Render(BsonDocumentSerializer.Instance, BsonSerializer.SerializerRegistry);

            renderedField.FieldName.Should().Be("test.one.two.three");
            renderedField.FieldSerializer.Should().BeOfType<BsonValueSerializer>();
        }
        public void Should_resolve_top_level_field()
        {
            var subject = new StringFieldDefinition<Person, Name>("Name");

            var renderedField = subject.Render(BsonSerializer.SerializerRegistry.GetSerializer<Person>(), BsonSerializer.SerializerRegistry);

            renderedField.FieldName.Should().Be("name");
            renderedField.FieldSerializer.Should().BeOfType<BsonClassMapSerializer<Name>>();
        }
        public void Should_resolve_from_a_BsonDocumentSerializer_with_dots()
        {
            var subject = new StringFieldDefinition <BsonDocument, BsonValue>("test.one.two.three");

            var renderedField = subject.Render(BsonDocumentSerializer.Instance, BsonSerializer.SerializerRegistry);

            renderedField.FieldName.Should().Be("test.one.two.three");
            renderedField.FieldSerializer.Should().BeOfType <BsonValueSerializer>();
        }
        public void Should_resolve_from_a_non_IBsonDocumentSerializer()
        {
            var subject = new StringFieldDefinition<string, string>("test");

            var renderedField = subject.Render(new StringSerializer(), BsonSerializer.SerializerRegistry);

            renderedField.FieldName.Should().Be("test");
            renderedField.FieldSerializer.Should().BeOfType<StringSerializer>();
        }
        public void Should_resolve_from_a_non_IBsonDocumentSerializer()
        {
            var subject = new StringFieldDefinition <string, string>("test");

            var renderedField = subject.Render(new StringSerializer(), BsonSerializer.SerializerRegistry);

            renderedField.FieldName.Should().Be("test");
            renderedField.FieldSerializer.Should().BeOfType <StringSerializer>();
        }
        public void Should_resolve_top_level_field()
        {
            var subject = new StringFieldDefinition <Person, Name>("Name");

            var renderedField = subject.Render(BsonSerializer.SerializerRegistry.GetSerializer <Person>(), BsonSerializer.SerializerRegistry);

            renderedField.FieldName.Should().Be("name");
            renderedField.FieldSerializer.Should().BeOfType <BsonClassMapSerializer <Name> >();
        }
        public void Should_resolve_a_nested_field_that_does_not_exist()
        {
            var subject = new StringFieldDefinition <Person, string>("Name.NoExisty");

            var renderedField = subject.Render(BsonSerializer.SerializerRegistry.GetSerializer <Person>(), BsonSerializer.SerializerRegistry);

            renderedField.FieldName.Should().Be("name.NoExisty");
            renderedField.FieldSerializer.Should().BeOfType <StringSerializer>();
        }
        public void Should_resolve_array_name()
        {
            var subject = new StringFieldDefinition <Person, string>("Pets.Type");

            var renderedField = subject.Render(BsonSerializer.SerializerRegistry.GetSerializer <Person>(), BsonSerializer.SerializerRegistry);

            renderedField.FieldName.Should().Be("pets.type");
            renderedField.FieldSerializer.Should().BeOfType <StringSerializer>();
        }
        internal FilterDefinition <T> GetFilterDefinition <TKey>(TKey key)
        {
            if (string.IsNullOrEmpty(BsonIdName))
            {
                throw new ArgumentException($"'{nameof(BsonIdName)}' cannot be null or empty", nameof(BsonIdName));
            }
            StringFieldDefinition <T, TKey> field = new StringFieldDefinition <T, TKey>(BsonIdName);

            return(Builders <T> .Filter.Eq <TKey>(field, key));
        }
Ejemplo n.º 18
0
        public bool CurrencyCode(StringFieldDefinition <TModel> def)
        {
            IEnumerable <WorkingReport> reports = def.ValidateAdditional?.Invoke(Models, Params);

            if (reports != null && reports.Any())
            {
                Reports.AddRange(reports);
                return(false);
            }
            return(true);
        }
Ejemplo n.º 19
0
        public void Should_resolve_an_array_field_with_field_name()
        {
            FieldDefinition <Person, IEnumerable <Gender> > subject = new StringFieldDefinition <Person, IEnumerable <Gender> >("Genders");

            var renderedField = subject.Render(BsonSerializer.SerializerRegistry.GetSerializer <Person>(), BsonSerializer.SerializerRegistry);

            renderedField.FieldName.Should().Be("gs");
            renderedField.UnderlyingSerializer.Should().BeOfType <ImpliedImplementationInterfaceSerializer <IEnumerable <Gender>, List <Gender> > >();
            renderedField.FieldSerializer.Should().BeSameAs(renderedField.UnderlyingSerializer);
            renderedField.ValueSerializer.Should().BeSameAs(renderedField.FieldSerializer);
        }
Ejemplo n.º 20
0
        /// <summary>初回パスワード</summary>
        public bool InitialPassword(StringFieldDefinition <TModel> def)
        {
            var reports = def.ValidateAdditional?.Invoke(Models, Params); // -> PB0301.ImportData

            if (reports != null && reports.Any())
            {
                Reports.AddRange(reports);
                return(false);
            }
            return(true);
        }
Ejemplo n.º 21
0
        public void Should_resolve_an_array_field_with_field_name_and_scalar_value_and_scalar_value_is_allowed()
        {
            FieldDefinition <Person, Gender> subject = new StringFieldDefinition <Person, Gender>("Genders");

            var renderedField = subject.Render(BsonSerializer.SerializerRegistry.GetSerializer <Person>(), BsonSerializer.SerializerRegistry, allowScalarValueForArrayField: true);

            renderedField.FieldName.Should().Be("gs");
            renderedField.UnderlyingSerializer.Should().BeOfType <ImpliedImplementationInterfaceSerializer <IEnumerable <Gender>, List <Gender> > >();
            renderedField.FieldSerializer.Should().BeNull();
            renderedField.ValueSerializer.Should().BeOfType <EnumSerializer <Gender> >();
        }
 private async void AddUniqueIndex(string property)
 {
     var options = new CreateIndexOptions()
     {
         Unique = true
     };
     var field           = new StringFieldDefinition <EngineeringTeamEntity>(property);
     var indexDefinition = new IndexKeysDefinitionBuilder <EngineeringTeamEntity>().Ascending(field);
     CreateIndexModel <EngineeringTeamEntity> _Index = new CreateIndexModel <EngineeringTeamEntity>(indexDefinition, options);
     await _TeamsCollection.Indexes.CreateOneAsync(_Index);
 }
        public void Should_resolve_a_nested_field()
        {
            var subject = new StringFieldDefinition <Person, string>("Name.First");

            var renderedField = subject.Render(BsonSerializer.SerializerRegistry.GetSerializer <Person>(), BsonSerializer.SerializerRegistry);

            renderedField.FieldName.Should().Be("name.fn");
            renderedField.UnderlyingSerializer.Should().BeOfType <StringSerializer>();
            renderedField.FieldSerializer.Should().BeSameAs(renderedField.UnderlyingSerializer);
            renderedField.ValueSerializer.Should().BeSameAs(renderedField.FieldSerializer);
        }
Ejemplo n.º 24
0
        public static void CreateIndex(string collectionId, string indexName)
        {
            var options = new CreateIndexOptions()
            {
                Unique = false
            };
            var field           = new StringFieldDefinition <T>(indexName);
            var indexDefinition = new IndexKeysDefinitionBuilder <T>().Ascending(field);

            database.GetCollection <T>(collectionId).Indexes.CreateOneAsync(indexDefinition, options).Wait();
        }
        public void Should_resolve_array_name_with_positional_operator()
        {
            var subject = new StringFieldDefinition <Person, string>("Pets.$.Type");

            var renderedField = subject.Render(BsonSerializer.SerializerRegistry.GetSerializer <Person>(), BsonSerializer.SerializerRegistry);

            renderedField.FieldName.Should().Be("pets.$.type");
            renderedField.UnderlyingSerializer.Should().BeOfType <StringSerializer>();
            renderedField.FieldSerializer.Should().BeSameAs(renderedField.UnderlyingSerializer);
            renderedField.ValueSerializer.Should().BeSameAs(renderedField.FieldSerializer);
        }
        public void Should_resolve_from_a_BsonDocumentSerializer()
        {
            var subject = new StringFieldDefinition <BsonDocument, BsonValue>("test");

            var renderedField = subject.Render(BsonDocumentSerializer.Instance, BsonSerializer.SerializerRegistry);

            renderedField.FieldName.Should().Be("test");
            renderedField.UnderlyingSerializer.Should().BeNull();
            renderedField.FieldSerializer.Should().BeNull();
            renderedField.ValueSerializer.Should().BeOfType <BsonValueSerializer>();
        }
        public void Should_resolve_array_name_with_multiple_dots()
        {
            var subject = new StringFieldDefinition <Person, string>("Pets.Name.First");

            var renderedField = subject.Render(BsonSerializer.SerializerRegistry.GetSerializer <Person>(), BsonSerializer.SerializerRegistry);

            renderedField.FieldName.Should().Be("pets.name.fn");
            renderedField.UnderlyingSerializer.Should().BeOfType <StringSerializer>();
            renderedField.FieldSerializer.Should().BeSameAs(renderedField.UnderlyingSerializer);
            renderedField.ValueSerializer.Should().BeSameAs(renderedField.FieldSerializer);
        }
Ejemplo n.º 28
0
        public UserDAO()
        {
            _collection = conn.getDatabase().GetCollection <UserModel>("DBUsermigration");
            var options = new CreateIndexOptions()
            {
                Unique = true
            };
            var field           = new StringFieldDefinition <UserModel>("mail");
            var indexDefinition = new IndexKeysDefinitionBuilder <UserModel>().Ascending(field);

            _collection.Indexes.CreateOneAsync(indexDefinition, options);
        }
Ejemplo n.º 29
0
        private void AddUniqueIndex(string property)
        {
            var options = new CreateIndexOptions()
            {
                Unique = true
            };
            var field           = new StringFieldDefinition <AirplaneEntity>(property);
            var indexDefinition = new IndexKeysDefinitionBuilder <AirplaneEntity>().Ascending(field);
            CreateIndexModel <AirplaneEntity> _Index = new CreateIndexModel <AirplaneEntity>(indexDefinition, options);

            _AirplanesCollection.Indexes.CreateOne(_Index);
        }
Ejemplo n.º 30
0
        private void _createUsernameUniqueIndex()
        {
            var options = new CreateIndexOptions()
            {
                Unique = true
            };
            var field            = new StringFieldDefinition <User>("Username");
            var indexDefinition  = new IndexKeysDefinitionBuilder <User>().Ascending(field);
            var createIndexModel = new CreateIndexModel <User>(indexDefinition, options);

            usersCol.Indexes.CreateOne(createIndexModel);
        }
Ejemplo n.º 31
0
        protected static CreateIndexModel <T> CreateUniqueField(string fieldName)
        {
            var options = new CreateIndexOptions()
            {
                Unique = true
            };
            var field           = new StringFieldDefinition <T>(fieldName);
            var indexDefinition = new IndexKeysDefinitionBuilder <T>().Ascending(field);
            var indexModel      = new CreateIndexModel <T>(indexDefinition, options);

            return(indexModel);
        }
Ejemplo n.º 32
0
        protected void btnCreateIndex_Click(object sender, EventArgs e)
        {
            var options = new CreateIndexOptions()
            {
                Unique = false, Background = true
            };

            var field1           = new StringFieldDefinition <LogEntity>("AppId");
            var indexDefinition1 = new IndexKeysDefinitionBuilder <LogEntity>().Ascending(field1);

            MongoDataBase.GetCollection <LogEntity>().Indexes.CreateOneAsync(indexDefinition1, options);

            var field2           = new StringFieldDefinition <LogEntity>("Level");
            var indexDefinition2 = new IndexKeysDefinitionBuilder <LogEntity>().Ascending(field2);

            MongoDataBase.GetCollection <LogEntity>().Indexes.CreateOneAsync(indexDefinition2, options);

            var field3           = new StringFieldDefinition <LogEntity>("Time");
            var indexDefinition3 = new IndexKeysDefinitionBuilder <LogEntity>().Descending(field3);

            MongoDataBase.GetCollection <LogEntity>().Indexes.CreateOneAsync(indexDefinition3, options);


            var field4           = new StringFieldDefinition <LogTag>("Tag");
            var indexDefinition4 = new IndexKeysDefinitionBuilder <LogTag>().Ascending(field4);

            MongoDataBase.GetCollection <LogTag>().Indexes.CreateOneAsync(indexDefinition4, options);


            var field5           = new StringFieldDefinition <LogTag>("Time");
            var indexDefinition5 = new IndexKeysDefinitionBuilder <LogTag>().Descending(field5);

            MongoDataBase.GetCollection <LogTag>().Indexes.CreateOneAsync(indexDefinition5, options);

            var field8           = new StringFieldDefinition <LogTag>("LogId");
            var indexDefinition8 = new IndexKeysDefinitionBuilder <LogTag>().Ascending(field8);

            MongoDataBase.GetCollection <LogTag>().Indexes.CreateOneAsync(indexDefinition8, options);

            var field6           = new StringFieldDefinition <LogStatistics>("Time");
            var indexDefinition6 = new IndexKeysDefinitionBuilder <LogStatistics>().Descending(field6);

            MongoDataBase.GetCollection <LogStatistics>().Indexes.CreateOneAsync(indexDefinition6, options);

            var field7           = new StringFieldDefinition <LogStatistics>("AppId");
            var indexDefinition7 = new IndexKeysDefinitionBuilder <LogStatistics>().Ascending(field7);

            MongoDataBase.GetCollection <LogStatistics>().Indexes.CreateOneAsync(indexDefinition7, options);



            Response.Write("Create Index Success");
        }
Ejemplo n.º 33
0
        public object distinct(object field, object query, object options)
        {
            DistinctOptions distinctOptions = new DistinctOptions();

            var fieldDefinition = new StringFieldDefinition <BsonDocument, object>(field.ToStringOrDefault());
            var cursor          = this._collection.Distinct(
                fieldDefinition,
                query.ToBsonDocument(),
                distinctOptions);

            return(new MongoEvaluatedCursor <object>(cursor));
        }
Ejemplo n.º 34
0
        public bool NameForBankBranchMaster(StringFieldDefinition <TModel> def)
        {
            //return true;
            IEnumerable <WorkingReport> reports = def.ValidateAdditional?.Invoke(Models, Params);

            if (reports != null && reports.Any())
            {
                Reports.AddRange(reports);
                return(false);
            }
            return(true);
        }
        public void Should_resolve_array_name_with_a_multi_digit_indexer()
        {
            var subject = new StringFieldDefinition<Person, string>("Pets.42.Type");

            var renderedField = subject.Render(BsonSerializer.SerializerRegistry.GetSerializer<Person>(), BsonSerializer.SerializerRegistry);

            renderedField.FieldName.Should().Be("pets.42.type");
            renderedField.FieldSerializer.Should().BeOfType<StringSerializer>();
        }
        public void Should_resolve_array_name_with_positional_operator_with_multiple_dots()
        {
            var subject = new StringFieldDefinition<Person, string>("Pets.$.Name.Last");

            var renderedField = subject.Render(BsonSerializer.SerializerRegistry.GetSerializer<Person>(), BsonSerializer.SerializerRegistry);

            renderedField.FieldName.Should().Be("pets.$.name.ln");
            renderedField.FieldSerializer.Should().BeOfType<StringSerializer>();
        }