abp
/Data
/
MyProjectNameMongoDbSchemaMigrator.cs
37 строк · 1.3 Кб
1using MongoDB.Driver;
2using Volo.Abp.Data;
3using Volo.Abp.DependencyInjection;
4using Volo.Abp.MongoDB;
5
6public class MyProjectNameMongoDbSchemaMigrator : ITransientDependency
7{
8private readonly IServiceProvider _serviceProvider;
9
10public MyProjectNameMongoDbSchemaMigrator(IServiceProvider serviceProvider)
11{
12_serviceProvider = serviceProvider;
13}
14
15public async Task MigrateAsync()
16{
17var dbContexts = _serviceProvider.GetServices<IAbpMongoDbContext>();
18var connectionStringResolver = _serviceProvider.GetRequiredService<IConnectionStringResolver>();
19
20foreach (var dbContext in dbContexts)
21{
22var connectionString =
23await connectionStringResolver.ResolveAsync(
24ConnectionStringNameAttribute.GetConnStringName(dbContext.GetType()));
25var mongoUrl = new MongoUrl(connectionString);
26var databaseName = mongoUrl.DatabaseName;
27var client = new MongoClient(mongoUrl);
28
29if (databaseName.IsNullOrWhiteSpace())
30{
31databaseName = ConnectionStringNameAttribute.GetConnStringName(dbContext.GetType());
32}
33
34(dbContext as AbpMongoDbContext)?.InitializeCollections(client.GetDatabase(databaseName));
35}
36}
37}
38