MassTransit - 具有 Entity Framework 核心的 Saga 存储库
MassTransit - Saga repository with Entity Framework Core
非常感谢您。
我的项目以 .NET Core 2.2 为目标。
我正在尝试定义一个使用 Masstransit 6.2.5 的服务,它使用带有 SQL 数据库的 SAGA Machine。
使用此代码
services.AddMassTransit(cfg =>
{
cfg.AddConsumersFromNamespaceContaining<SubmitVolunteerConsumer>(); //add consumer
cfg.AddSagaStateMachine<UserStateMachine, UserState>(typeof(UserStateMachineDefinition))
.EntityFrameworkRepository(r =>
{
r.ConcurrencyMode = ConcurrencyMode.Pessimistic;
services.AddDbContext<DbContext, UserStateDbContext>((provider, build) =>
{
build.UseSqlServer(connectionString, m =>
{
m.MigrationsAssembly(Assembly.GetExecutingAssembly().GetName().Name);
m.MigrationsHistoryTable($"__{nameof(UserStateDbContext)}");
});
});
});
cfg.AddBus(provider => RabbitMqBus.ConfigureBus(provider, false));
});
导致问题,因为它需要 MassTransit.EntityFrameworkCore
6.2.5(但是,这是使用 Microsoft.EntityFrameworkCore.Relational
(3.1.3)),当我尝试 call/use 数据库上下文
收到此错误
Could not load type 'Microsoft.EntityFrameworkCore.Infrastructure.IDbContextOptionsExtensionWithDebugInfo' from assembly 'Microsoft.EntityFrameworkCore, Version=3.1.3.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'.
你能帮我找到一种在我的 Saga 机器上使用 SQL 服务器而不使用引用 Entity Framework Core 3.x 的 Nuget 的方法吗?
顺便说一句,这是我的 Dbcontext
public UserStateDbContext(DbContextOptions options)
: base(options)
{
}
protected override IEnumerable<ISagaClassMap> Configurations
{
get { yield return new UserStateMap(); }
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
IConfigurationRoot configuration = new ConfigurationBuilder()
.SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
.AddJsonFile("appsettings.json")
.Build();
optionsBuilder.UseSqlServer(configuration.GetConnectionString("GRPPortal"));
}
为什么说“不使用引用 Entity framework 3.x 的 Nuget”?要使用 MassTransit 6.2.5,依赖于 EF Core 3.1.3+ 的 EF Core 持久性。
如果您使用的是旧版本的 EF Core 并且无法升级,那么您需要查看仍然支持您的 EF Core 版本的旧版本的 MassTransit。这可能需要对 MassTransit 的依赖项进行其他绑定重定向,因为您的项目中有较新的版本。
如果你正在使用 EF6 并且不想添加 EFCore,那么有MassTransit.EntityFrameworkIntegration
如果您使用的是较新的 EF Core 版本,那么这可能可以通过绑定重定向来解决,但是,鉴于 EF Core 的状态相当不稳定,例如您正在使用 EF Core 5.x,在发布较新版本的 MassTransit 之前,可能不受支持。
如果您只是不想引入 任何 对 EF Core 的依赖以使 MassTransit 在没有 EF 的情况下与 SQL 服务器一起工作,那么还有其他选择,例如使用 NHibernate .您还可以考虑编写自己的持久性存储库。我不认为这会非常困难,因为这里提供了所有官方持久性的源代码:https://github.com/MassTransit/MassTransit/tree/77eb5d724c8e33ebba6bb846b2a277e4d55fa65a/src/Persistence
非常感谢您。
我的项目以 .NET Core 2.2 为目标。
我正在尝试定义一个使用 Masstransit 6.2.5 的服务,它使用带有 SQL 数据库的 SAGA Machine。
使用此代码
services.AddMassTransit(cfg =>
{
cfg.AddConsumersFromNamespaceContaining<SubmitVolunteerConsumer>(); //add consumer
cfg.AddSagaStateMachine<UserStateMachine, UserState>(typeof(UserStateMachineDefinition))
.EntityFrameworkRepository(r =>
{
r.ConcurrencyMode = ConcurrencyMode.Pessimistic;
services.AddDbContext<DbContext, UserStateDbContext>((provider, build) =>
{
build.UseSqlServer(connectionString, m =>
{
m.MigrationsAssembly(Assembly.GetExecutingAssembly().GetName().Name);
m.MigrationsHistoryTable($"__{nameof(UserStateDbContext)}");
});
});
});
cfg.AddBus(provider => RabbitMqBus.ConfigureBus(provider, false));
});
导致问题,因为它需要 MassTransit.EntityFrameworkCore
6.2.5(但是,这是使用 Microsoft.EntityFrameworkCore.Relational
(3.1.3)),当我尝试 call/use 数据库上下文
收到此错误
Could not load type 'Microsoft.EntityFrameworkCore.Infrastructure.IDbContextOptionsExtensionWithDebugInfo' from assembly 'Microsoft.EntityFrameworkCore, Version=3.1.3.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'.
你能帮我找到一种在我的 Saga 机器上使用 SQL 服务器而不使用引用 Entity Framework Core 3.x 的 Nuget 的方法吗?
顺便说一句,这是我的 Dbcontext
public UserStateDbContext(DbContextOptions options)
: base(options)
{
}
protected override IEnumerable<ISagaClassMap> Configurations
{
get { yield return new UserStateMap(); }
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
IConfigurationRoot configuration = new ConfigurationBuilder()
.SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
.AddJsonFile("appsettings.json")
.Build();
optionsBuilder.UseSqlServer(configuration.GetConnectionString("GRPPortal"));
}
为什么说“不使用引用 Entity framework 3.x 的 Nuget”?要使用 MassTransit 6.2.5,依赖于 EF Core 3.1.3+ 的 EF Core 持久性。
如果您使用的是旧版本的 EF Core 并且无法升级,那么您需要查看仍然支持您的 EF Core 版本的旧版本的 MassTransit。这可能需要对 MassTransit 的依赖项进行其他绑定重定向,因为您的项目中有较新的版本。
如果你正在使用 EF6 并且不想添加 EFCore,那么有MassTransit.EntityFrameworkIntegration
如果您使用的是较新的 EF Core 版本,那么这可能可以通过绑定重定向来解决,但是,鉴于 EF Core 的状态相当不稳定,例如您正在使用 EF Core 5.x,在发布较新版本的 MassTransit 之前,可能不受支持。
如果您只是不想引入 任何 对 EF Core 的依赖以使 MassTransit 在没有 EF 的情况下与 SQL 服务器一起工作,那么还有其他选择,例如使用 NHibernate .您还可以考虑编写自己的持久性存储库。我不认为这会非常困难,因为这里提供了所有官方持久性的源代码:https://github.com/MassTransit/MassTransit/tree/77eb5d724c8e33ebba6bb846b2a277e4d55fa65a/src/Persistence