【问题标题】:EntityFramework Saga persistance recreate schema in existing DB实体框架 Saga 持久性在现有数据库中创建模式
【发布时间】:2015-12-30 08:42:59
【问题描述】:

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

如何做到这一点?

谢谢

【问题讨论】:

    标签: masstransit automatonymous


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      受 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..
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-11
        • 1970-01-01
        • 2016-09-07
        • 1970-01-01
        • 2011-09-28
        相关资源
        最近更新 更多