.net core 使用具有EntityFramework核心的MassTransit 4.0 saga自动持久化状态

.net core 使用具有EntityFramework核心的MassTransit 4.0 saga自动持久化状态,.net-core,entity-framework-core,masstransit,.net Core,Entity Framework Core,Masstransit,大家好,我刚刚开始使用MassTransit 4.0和.net core以及EntityFramework core 我定义了一个跨越多个类的状态,并使用 public class SagaInstanceMap3 : IEntityTypeConfiguration<InstanceState> { public void Configure(EntityTypeBuilder<InstanceState> builder) { buil

大家好,我刚刚开始使用MassTransit 4.0和.net core以及EntityFramework core

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

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(); 
    }
}
不幸的是,这意味着我必须记住映射我所有的关系两次!是否有办法让EF核心集成在转换时急切地获取所有子表


EF6.0与MassTransit早期版本的集成不需要我执行
查询定制
技巧。

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

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


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

我不再使用MassTransit,但也许这个项目在定义关系方面只对其他人有用一次。

这是因为EF Core与EF 6.0的工作方式不同。这就是添加查询自定义的原因。我认为没有其他方法,除非你在映射中做些什么。MT在EF Saga存储库实现中没有什么特别之处,您可以自己检查代码。谢谢Carlo,但我只需要使用Masstransit
   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);