【问题标题】:Automatic persistence of state with MassTransit 4.0 saga with EntityFramework CoreMassTransit 4.0 saga 与 EntityFramework Core 自动保持状态
【发布时间】:2018-01-12 10:05:10
【问题描述】:

您好,我刚刚开始使用带有 .net 核心和 EntityFramework 核心的 MassTransit 4.0。

我已经定义了一个跨越多个类的状态,我使用

将其连接成一对多的关系
public class SagaInstanceMap3 : IEntityTypeConfiguration<InstanceState>
{
    public void Configure(EntityTypeBuilder<InstanceState> builder)
    {
        builder.HasKey(x => x.CorrelationId);
        builder.HasMany(x => x.Args);
        builder.HasMany(x => x.MoreArgs);
        builder.Property(x => x.RowVersion).IsRowVersion().IsRequired(); 
    }
}

在创建初始状态时,所有内容都存储在数据库中,但在接下来的转换中获取状态时,只获取主表

我已经能够使用queryCustomization 来解决这个问题,如下所示

   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<InstanceState>(sagaDbContextFactory,
                queryCustomization: q => q.Include(it => it.Args).ThenInclude(it => it.MoreArgs),
                optimistic: true); 

不幸的是,这意味着我必须记住将所有关系映射两次!是否有办法让 EF Core 集成在转换时急切地获取所有子表?

EF6.0 与之前版本的 MassTransit 集成不需要我使用 queryCustomization 技巧。

【问题讨论】:

  • 这是因为 EF Core 的工作方式与 EF 6.0 不同。这就是添加查询自定义的原因。我认为没有其他办法,除非你在映射中做一些事情。 MT 在 EF Saga 仓库实现中没有什么特别之处,可以自己查看代码。

标签: .net-core entity-framework-core masstransit


【解决方案1】:

这是因为 EF Core 的工作方式与 EF 6.0 不同。这就是添加查询自定义的原因。

根据您的实现,我认为除非您在映射中做某事,否则别无他法。

MassTransit 在 EF Saga 存储库实现中没有什么特别之处,您可以自己查看the code

【讨论】:

    【解决方案2】:

    我不再使用 Masstransit,但也许这个项目 https://github.com/kbilsted/EFCoreEagerFetching 在定义关系方面对其他人有用。

    【讨论】:

    • 谢谢 Carlo 但我只需要使用 Masstransit
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-22
    • 2012-03-09
    • 1970-01-01
    相关资源
    最近更新 更多