Small MongoDB provider improvements
This commit is contained in:
parent
3f173d6468
commit
ce7222af28
|
|
@ -10,33 +10,38 @@ namespace Elsa.Persistence.MongoDb.Extensions
|
|||
{
|
||||
public static class ServiceCollectionExtensions
|
||||
{
|
||||
public static ElsaOptions UseMongoDbPersistence(this ElsaOptions elsa, Action<ElsaMongoDbOptions> configureOptions)
|
||||
public static ElsaOptions UseMongoDbPersistence(this ElsaOptions elsa, Action<ElsaMongoDbOptions> configureOptions) => UseMongoDbPersistence<ElsaMongoDbContext>(elsa, configureOptions);
|
||||
|
||||
public static ElsaOptions UseMongoDbPersistence<TDbContext>(this ElsaOptions elsa, Action<ElsaMongoDbOptions> configureOptions) where TDbContext: ElsaMongoDbContext
|
||||
{
|
||||
AddCore(elsa);
|
||||
AddCore<TDbContext>(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<ElsaMongoDbContext>(elsa, configuration);
|
||||
|
||||
public static ElsaOptions UseMongoDbPersistence<TDbContext>(this ElsaOptions elsa, IConfiguration configuration) where TDbContext: ElsaMongoDbContext
|
||||
{
|
||||
AddCore(elsa);
|
||||
elsa.Services.Configure<ElsaMongoDbOptions>(options);
|
||||
AddCore<TDbContext>(elsa);
|
||||
elsa.Services.Configure<ElsaMongoDbOptions>(configuration);
|
||||
return elsa;
|
||||
}
|
||||
|
||||
private static void AddCore(ElsaOptions elsa)
|
||||
private static void AddCore<TDbContext>(ElsaOptions elsa) where TDbContext : ElsaMongoDbContext
|
||||
{
|
||||
elsa.Services
|
||||
.AddSingleton<MongoDbWorkflowDefinitionStore>()
|
||||
.AddSingleton<MongoDbWorkflowInstanceStore>()
|
||||
.AddSingleton<MongoDbWorkflowExecutionLogStore>()
|
||||
.AddSingleton<MongoDbBookmarkStore>()
|
||||
.AddSingleton<ElsaMongoDbContext>()
|
||||
.AddSingleton(sp => sp.GetRequiredService<ElsaMongoDbContext>().WorkflowDefinitions)
|
||||
.AddSingleton(sp => sp.GetRequiredService<ElsaMongoDbContext>().WorkflowInstances)
|
||||
.AddSingleton(sp => sp.GetRequiredService<ElsaMongoDbContext>().WorkflowExecutionLog)
|
||||
.AddSingleton(sp => sp.GetRequiredService<ElsaMongoDbContext>().Bookmarks)
|
||||
.AddSingleton<TDbContext>()
|
||||
.AddSingleton<ElsaMongoDbContext, TDbContext>()
|
||||
.AddSingleton(sp => sp.GetRequiredService<TDbContext>().WorkflowDefinitions)
|
||||
.AddSingleton(sp => sp.GetRequiredService<TDbContext>().WorkflowInstances)
|
||||
.AddSingleton(sp => sp.GetRequiredService<TDbContext>().WorkflowExecutionLog)
|
||||
.AddSingleton(sp => sp.GetRequiredService<TDbContext>().Bookmarks)
|
||||
.AddStartupTask<DatabaseInitializer>();
|
||||
|
||||
elsa
|
||||
|
|
|
|||
|
|
@ -7,17 +7,19 @@ namespace Elsa.Persistence.MongoDb.Services
|
|||
{
|
||||
public class ElsaMongoDbContext
|
||||
{
|
||||
private readonly IMongoDatabase _mongoDatabase;
|
||||
|
||||
public ElsaMongoDbContext(IOptions<ElsaMongoDbOptions> 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<WorkflowDefinition> WorkflowDefinitions => _mongoDatabase.GetCollection<WorkflowDefinition>(CollectionNames.WorkflowDefinitions);
|
||||
public IMongoCollection<WorkflowInstance> WorkflowInstances => _mongoDatabase.GetCollection<WorkflowInstance>(CollectionNames.WorkflowInstances);
|
||||
public IMongoCollection<WorkflowExecutionLogRecord> WorkflowExecutionLog => _mongoDatabase.GetCollection<WorkflowExecutionLogRecord>(CollectionNames.WorkflowExecutionLog);
|
||||
public IMongoCollection<Bookmark> Bookmarks => _mongoDatabase.GetCollection<Bookmark>(CollectionNames.Bookmarks);
|
||||
public IMongoCollection<WorkflowDefinition> WorkflowDefinitions => MongoDatabase.GetCollection<WorkflowDefinition>(CollectionNames.WorkflowDefinitions);
|
||||
public IMongoCollection<WorkflowInstance> WorkflowInstances => MongoDatabase.GetCollection<WorkflowInstance>(CollectionNames.WorkflowInstances);
|
||||
public IMongoCollection<WorkflowExecutionLogRecord> WorkflowExecutionLog => MongoDatabase.GetCollection<WorkflowExecutionLogRecord>(CollectionNames.WorkflowExecutionLog);
|
||||
public IMongoCollection<Bookmark> Bookmarks => MongoDatabase.GetCollection<Bookmark>(CollectionNames.Bookmarks);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue