diff --git a/src/persistence/Elsa.Persistence.MongoDb/Extensions/ServiceCollectionExtensions.cs b/src/persistence/Elsa.Persistence.MongoDb/Extensions/ServiceCollectionExtensions.cs index a7cde1d71..bf30c1cce 100644 --- a/src/persistence/Elsa.Persistence.MongoDb/Extensions/ServiceCollectionExtensions.cs +++ b/src/persistence/Elsa.Persistence.MongoDb/Extensions/ServiceCollectionExtensions.cs @@ -10,33 +10,38 @@ namespace Elsa.Persistence.MongoDb.Extensions { public static class ServiceCollectionExtensions { - public static ElsaOptions UseMongoDbPersistence(this ElsaOptions elsa, Action configureOptions) + public static ElsaOptions UseMongoDbPersistence(this ElsaOptions elsa, Action configureOptions) => UseMongoDbPersistence(elsa, configureOptions); + + public static ElsaOptions UseMongoDbPersistence(this ElsaOptions elsa, Action configureOptions) where TDbContext: ElsaMongoDbContext { - AddCore(elsa); + AddCore(elsa); elsa.Services.Configure(configureOptions); return elsa; } - public static ElsaOptions UseMongoDbPersistence(this ElsaOptions elsa, IConfiguration options) + public static ElsaOptions UseMongoDbPersistence(this ElsaOptions elsa, IConfiguration configuration) => UseMongoDbPersistence(elsa, configuration); + + public static ElsaOptions UseMongoDbPersistence(this ElsaOptions elsa, IConfiguration configuration) where TDbContext: ElsaMongoDbContext { - AddCore(elsa); - elsa.Services.Configure(options); + AddCore(elsa); + elsa.Services.Configure(configuration); return elsa; } - private static void AddCore(ElsaOptions elsa) + private static void AddCore(ElsaOptions elsa) where TDbContext : ElsaMongoDbContext { elsa.Services .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() - .AddSingleton() - .AddSingleton(sp => sp.GetRequiredService().WorkflowDefinitions) - .AddSingleton(sp => sp.GetRequiredService().WorkflowInstances) - .AddSingleton(sp => sp.GetRequiredService().WorkflowExecutionLog) - .AddSingleton(sp => sp.GetRequiredService().Bookmarks) + .AddSingleton() + .AddSingleton() + .AddSingleton(sp => sp.GetRequiredService().WorkflowDefinitions) + .AddSingleton(sp => sp.GetRequiredService().WorkflowInstances) + .AddSingleton(sp => sp.GetRequiredService().WorkflowExecutionLog) + .AddSingleton(sp => sp.GetRequiredService().Bookmarks) .AddStartupTask(); elsa diff --git a/src/persistence/Elsa.Persistence.MongoDb/Services/ElsaMongoDbContext.cs b/src/persistence/Elsa.Persistence.MongoDb/Services/ElsaMongoDbContext.cs index 340a0898b..50e80f99c 100644 --- a/src/persistence/Elsa.Persistence.MongoDb/Services/ElsaMongoDbContext.cs +++ b/src/persistence/Elsa.Persistence.MongoDb/Services/ElsaMongoDbContext.cs @@ -7,17 +7,19 @@ namespace Elsa.Persistence.MongoDb.Services { public class ElsaMongoDbContext { - private readonly IMongoDatabase _mongoDatabase; - public ElsaMongoDbContext(IOptions options) { - var mongoClient = new MongoClient(options.Value.ConnectionString); - _mongoDatabase = mongoClient.GetDatabase(options.Value.Db); + var connectionString = options.Value.ConnectionString; + var mongoClient = new MongoClient(connectionString); + var databaseName = options.Value.Db is not null and not "" ? options.Value.Db : MongoUrl.Create(connectionString).DatabaseName; + MongoDatabase = mongoClient.GetDatabase(databaseName); } + + protected IMongoDatabase MongoDatabase { get; } - public IMongoCollection WorkflowDefinitions => _mongoDatabase.GetCollection(CollectionNames.WorkflowDefinitions); - public IMongoCollection WorkflowInstances => _mongoDatabase.GetCollection(CollectionNames.WorkflowInstances); - public IMongoCollection WorkflowExecutionLog => _mongoDatabase.GetCollection(CollectionNames.WorkflowExecutionLog); - public IMongoCollection Bookmarks => _mongoDatabase.GetCollection(CollectionNames.Bookmarks); + public IMongoCollection WorkflowDefinitions => MongoDatabase.GetCollection(CollectionNames.WorkflowDefinitions); + public IMongoCollection WorkflowInstances => MongoDatabase.GetCollection(CollectionNames.WorkflowInstances); + public IMongoCollection WorkflowExecutionLog => MongoDatabase.GetCollection(CollectionNames.WorkflowExecutionLog); + public IMongoCollection Bookmarks => MongoDatabase.GetCollection(CollectionNames.Bookmarks); } } diff --git a/src/persistence/Elsa.Persistence.MongoDb/Stores/MongoDbStore.cs b/src/persistence/Elsa.Persistence.MongoDb/Stores/MongoDbStore.cs index 46e213540..42c4072c3 100644 --- a/src/persistence/Elsa.Persistence.MongoDb/Stores/MongoDbStore.cs +++ b/src/persistence/Elsa.Persistence.MongoDb/Stores/MongoDbStore.cs @@ -49,6 +49,9 @@ namespace Elsa.Persistence.MongoDb.Stores foreach (var entity in list.Where(x => x.Id == null!)) entity.Id = IdGenerator.Generate(); + if (!list.Any()) + return; + await Collection.InsertManyAsync(list, default, cancellationToken); }