EntityFramework Saga persistance在现有DB中重新创建模式

时间:2015-12-30 08:43:00

标签: masstransit automatonymous

我使用MT v3.0.17与Automatonymous, 我注意到,如果数据库已经存在,则不会创建实例状态表。由于我将多个不同的自动命名状态机指向同一个数据库,因此我想指示即使数据库存在也要创建表。

如何做到这一点?

由于

2 个答案:

答案 0 :(得分:0)

如果您使用的是Entity Framework,则可以使用迁移来创建/更新数据库和关联的表,如Microsoft所述:

https://msdn.microsoft.com/en-us/data/dn579398.aspx

如果您使用的是NHibernate,则可以使用Schema验证方法,该方法将根据需要验证和更新架构。这在单元测试中完成,如图所示:

https://github.com/MassTransit/MassTransit/blob/develop/src/MassTransit.AutomatonymousIntegration.Tests/SqlLiteSessionFactoryProvider.cs#L104

答案 1 :(得分:0)

受到masstransit本身的单元测试的启发,我们使用EF迁移,并明确地作为EF在启动期间应用所述迁移

 public static void Main()
    {
        var saga = new MySaga();

        var contextFactory = new SagaWithDependencyContextFactory();

        using (var context = contextFactory.CreateDbContext(Array.Empty<string>()))
        {
            context.Database.Migrate();
        }

        Func<DbContext> sagaDbContextFactory = () => contextFactory.CreateDbContext(Array.Empty<string>());

        var efSagaRepository =
            new EntityFrameworkSagaRepository<MySagaInstanceState>(sagaDbContextFactory);  

        // .. create bus etc..