使用 EntityFramework Core 的 MassTransit 4.0 传奇自动持久化状态



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

我已经定义了一个跨越多个类的状态,我已经使用 1-多关系将其连接起来

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 不同。这就是添加查询自定义的原因。

根据您的实现,我认为除非您在映射中执行某些操作,否则没有其他方法。

MassTransit 在 EF Saga 存储库实现中没有什么特别之处,您可以自己检查代码。

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

最新更新