.net core 使用具有EntityFramework核心的MassTransit 4.0 saga自动持久化状态
大家好,我刚刚开始使用MassTransit 4.0和.net core以及EntityFramework core 我定义了一个跨越多个类的状态,并使用.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
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);