public virtual MongoDbContextModel GetModel(AbpMongoDbContext dbContext) { return(ModelCache.GetOrAdd( dbContext.GetType(), _ => CreateModel(dbContext) )); }
protected virtual MongoDbContextModel CreateModel(AbpMongoDbContext dbContext) { var modelBuilder = CreateModelBuilder(); BuildModelFromDbContextType(modelBuilder, dbContext.GetType()); BuildModelFromDbContextInstance(modelBuilder, dbContext); return(modelBuilder.Build()); }
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); } }
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)); } }
protected virtual void BuildModelFromDbContextInstance(IMongoModelBuilder modelBuilder, AbpMongoDbContext dbContext) { dbContext.CreateModel(modelBuilder); }