Ejemplo n.º 1
0
 public virtual MongoDbContextModel GetModel(AbpMongoDbContext dbContext)
 {
     return(ModelCache.GetOrAdd(
                dbContext.GetType(),
                _ => CreateModel(dbContext)
                ));
 }
Ejemplo n.º 2
0
        protected virtual MongoDbContextModel CreateModel(AbpMongoDbContext dbContext)
        {
            var modelBuilder = CreateModelBuilder();

            BuildModelFromDbContextType(modelBuilder, dbContext.GetType());
            BuildModelFromDbContextInstance(modelBuilder, dbContext);
            return(modelBuilder.Build());
        }
Ejemplo n.º 3
0
        protected virtual void CreateCollectionIfNotExists(AbpMongoDbContext dbContext, string collectionName)
        {
            var filter  = new BsonDocument("name", collectionName);
            var options = new ListCollectionNamesOptions {
                Filter = filter
            };

            if (!dbContext.Database.ListCollectionNames(options).Any())
            {
                dbContext.Database.CreateCollection(collectionName);
            }
        }
Ejemplo n.º 4
0
        public MongoDbContextModel Build(AbpMongoDbContext dbContext)
        {
            lock (SyncObj)
            {
                var entityModels = _entityModelBuilders
                                   .Select(x => x.Value)
                                   .Cast <IMongoEntityModel>()
                                   .ToImmutableDictionary(x => x.EntityType, x => x);

                var baseClasses = new List <Type>();

                foreach (var entityModel in entityModels.Values)
                {
                    var map = entityModel.As <IHasBsonClassMap>().GetMap();
                    if (!BsonClassMap.IsClassMapRegistered(map.ClassType))
                    {
                        BsonClassMap.RegisterClassMap(map);
                    }

                    baseClasses.AddRange(entityModel.EntityType.GetBaseClasses(includeObject: false));

                    CreateCollectionIfNotExists(dbContext, entityModel.CollectionName);
                }

                baseClasses = baseClasses.Distinct().ToList();

                foreach (var baseClass in baseClasses)
                {
                    if (!BsonClassMap.IsClassMapRegistered(baseClass))
                    {
                        var map = new BsonClassMap(baseClass);
                        map.ConfigureAbpConventions();
                        BsonClassMap.RegisterClassMap(map);
                    }
                }

                return(new MongoDbContextModel(entityModels));
            }
        }
Ejemplo n.º 5
0
 protected virtual void BuildModelFromDbContextInstance(IMongoModelBuilder modelBuilder, AbpMongoDbContext dbContext)
 {
     dbContext.CreateModel(modelBuilder);
 }