90 lines
3.4 KiB
C#
90 lines
3.4 KiB
C#
using System;
|
|
using System.Threading.Tasks;
|
|
using Elsa.Activities.Console.Extensions;
|
|
using Elsa.Extensions;
|
|
using Elsa.Models;
|
|
using Elsa.Persistence;
|
|
using Elsa.Persistence.EntityFrameworkCore.DbContexts;
|
|
using Elsa.Persistence.EntityFrameworkCore.Extensions;
|
|
using Elsa.Runtime;
|
|
using Elsa.Services;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
namespace Sample24
|
|
{
|
|
/// <summary>
|
|
/// A simple demonstration of using Entity Framework Core MySql persistence provider. A migration is also demonstrated.
|
|
/// </summary>
|
|
public class Program
|
|
{
|
|
public static async Task Main(string[] args)
|
|
{
|
|
var services = BuildServices();
|
|
|
|
await CreateDatabase(services);
|
|
|
|
// Invoke startup tasks.
|
|
var startupRunner = services.GetRequiredService<IStartupRunner>();
|
|
await startupRunner.StartupAsync();
|
|
|
|
// Create a workflow definition.
|
|
var registry = services.GetService<IWorkflowRegistry>();
|
|
var workflowDefinition = await registry.GetWorkflowDefinitionAsync<HelloWorldWorkflow>();
|
|
|
|
// Mark this definition as the "latest" version.
|
|
workflowDefinition.IsLatest = true;
|
|
workflowDefinition.Version = 1;
|
|
|
|
using var scope = services.CreateScope();
|
|
var dbContext = scope.ServiceProvider.GetRequiredService<ElsaContext>();
|
|
|
|
// Persist the workflow definition.
|
|
var definitionStore = scope.ServiceProvider.GetRequiredService<IWorkflowDefinitionStore>();
|
|
await definitionStore.SaveAsync(workflowDefinition);
|
|
|
|
// Flush to DB.
|
|
await dbContext.SaveChangesAsync();
|
|
|
|
// Load the workflow definition.
|
|
workflowDefinition = await definitionStore.GetByIdAsync(
|
|
workflowDefinition.DefinitionId,
|
|
VersionOptions.Latest);
|
|
|
|
// Execute the workflow.
|
|
var invoker = scope.ServiceProvider.GetRequiredService<IWorkflowInvoker>();
|
|
var executionContext = await invoker.StartAsync(workflowDefinition);
|
|
|
|
// Persist the workflow instance.
|
|
var instanceStore = scope.ServiceProvider.GetRequiredService<IWorkflowInstanceStore>();
|
|
var workflowInstance = executionContext.Workflow.ToInstance();
|
|
await instanceStore.SaveAsync(workflowInstance);
|
|
|
|
// Flush to DB.
|
|
await dbContext.SaveChangesAsync();
|
|
}
|
|
|
|
private static async Task CreateDatabase(IServiceProvider services)
|
|
{
|
|
using var scope = services.CreateScope();
|
|
var dbContext = scope.ServiceProvider.GetRequiredService<ElsaContext>();
|
|
|
|
// Ensure DB exists.
|
|
await dbContext.Database.MigrateAsync();
|
|
}
|
|
|
|
private static IServiceProvider BuildServices()
|
|
{
|
|
return new ServiceCollection()
|
|
.AddElsa(
|
|
x => x.AddEntityFrameworkStores<SqliteContext>(
|
|
options => options
|
|
.UseSqlite(@"Data Source=c:\data\elsa.entity-framework-core.db;Cache=Shared",
|
|
builder => builder.MigrationsAssembly(typeof(SqliteContext).Assembly.FullName))))
|
|
.AddStartupRunner()
|
|
.AddConsoleActivities()
|
|
.AddWorkflow<HelloWorldWorkflow>()
|
|
.BuildServiceProvider();
|
|
}
|
|
}
|
|
} |