Browse Source

Add mongodb scheme migrator

pull/5174/head
liangshiwei 6 years ago
parent
commit
8ed7db41ba
  1. 31
      framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbModule.cs
  2. 45
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/MongoDb/MongoDbMyProjectNameDbSchemaMigrator.cs

31
framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbModule.cs

@ -1,8 +1,5 @@
using System;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using MongoDB.Driver;
using Volo.Abp.Data;
using Volo.Abp.Domain;
using Volo.Abp.Domain.Repositories.MongoDB;
using Volo.Abp.Modularity;
@ -36,31 +33,5 @@ namespace Volo.Abp.MongoDB
typeof(MongoDbRepositoryFilterer<,>)
);
}
public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
InitializeAllCollections(context.ServiceProvider);
}
private void InitializeAllCollections(IServiceProvider serviceProvider)
{
var dbContexts = serviceProvider.GetServices<IAbpMongoDbContext>();
var connectionStringResolver = serviceProvider.GetService<IConnectionStringResolver>();
foreach (var dbContext in dbContexts)
{
var connectionString = connectionStringResolver.Resolve(ConnectionStringNameAttribute.GetConnStringName(dbContext.GetType()));
var mongoUrl = new MongoUrl(connectionString);
var databaseName = mongoUrl.DatabaseName;
var client = new MongoClient(mongoUrl);
if (databaseName.IsNullOrWhiteSpace())
{
databaseName = ConnectionStringNameAttribute.GetConnStringName(dbContext.GetType());
}
(dbContext as AbpMongoDbContext)?.InitializeCollections(client.GetDatabase(databaseName));
}
}
}
}

45
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/MongoDb/MongoDbMyProjectNameDbSchemaMigrator.cs

@ -0,0 +1,45 @@
using System;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using MongoDB.Driver;
using MyCompanyName.MyProjectName.Data;
using Volo.Abp.Data;
using Volo.Abp.MongoDB;
namespace MyCompanyName.MyProjectName.MongoDB
{
public class MongoDbMyProjectNameDbSchemaMigrator : IMyProjectNameDbSchemaMigrator
{
private readonly IServiceProvider _serviceProvider;
public MongoDbMyProjectNameDbSchemaMigrator(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
public Task MigrateAsync()
{
var dbContexts = _serviceProvider.GetServices<IAbpMongoDbContext>();
var connectionStringResolver = _serviceProvider.GetService<IConnectionStringResolver>();
foreach (var dbContext in dbContexts)
{
var connectionString =
connectionStringResolver.Resolve(
ConnectionStringNameAttribute.GetConnStringName(dbContext.GetType()));
var mongoUrl = new MongoUrl(connectionString);
var databaseName = mongoUrl.DatabaseName;
var client = new MongoClient(mongoUrl);
if (databaseName.IsNullOrWhiteSpace())
{
databaseName = ConnectionStringNameAttribute.GetConnStringName(dbContext.GetType());
}
(dbContext as AbpMongoDbContext)?.InitializeCollections(client.GetDatabase(databaseName));
}
return Task.CompletedTask;
}
}
}
Loading…
Cancel
Save