簡體   English   中英

相關 MassTransit Sagas 中的導航屬性不起作用

[英]Navigation properties in related MassTransit Sagas not working

我正在研究一個通用批處理組件( 在 Saga 中發布消息,其中類型僅在運行時已知)受到 Chris Pattersons 示例https://github.com/MassTransit/Sample-Batch的極大啟發。 但是,示例似乎存在問題, BatchStateBatchJobState上的導航屬性不起作用。

BatchStateMachine ,當觸發BatchJobDone事件時,我需要檢測它是否是最后一個 BatchJob 才能觸發新事件。

public class BatchState :
    SagaStateMachineInstance
{
    ...
    
    // Navigation Properties
    public List<BatchJobState> Jobs { get; set; } = new List<BatchJobState>();
    public Guid CorrelationId { get; set; }
}
public class BatchJobState :
    SagaStateMachineInstance
{
    ...

    // Navigation Properties
    public BatchState Batch { get; set; }
    public Guid CorrelationId { get; set; }
}

BatchJobState上的Batch屬性始終為null並且BatchState上的Jobs屬性始終為Count = 0

它們的配置如下:

class BatchStateEntityConfiguration :
    IEntityTypeConfiguration<BatchState>
{
    public void Configure(EntityTypeBuilder<BatchState> builder)
    {
        builder.HasKey(c => c.CorrelationId);

        builder.Property(c => c.CorrelationId)
            .ValueGeneratedNever()
            .HasColumnName("BatchId");

        builder.Property(c => c.CurrentState).IsRequired();

        builder.Property(c => c.Action)
            .HasConversion(new EnumToStringConverter<BatchAction>());

        builder.Property(c => c.UnprocessedOrderIds)
            .HasConversion(new JsonValueConverter<Stack<Guid>>())
            .Metadata.SetValueComparer(new JsonValueComparer<Stack<Guid>>());

        builder.Property(c => c.ProcessingOrderIds)
            .HasConversion(new JsonValueConverter<Dictionary<Guid, Guid>>())
            .Metadata.SetValueComparer(new JsonValueComparer<Dictionary<Guid, Guid>>());
    }
}
class JobStateEntityConfiguration :
    IEntityTypeConfiguration<BatchJobState>
{
    public void Configure(EntityTypeBuilder<BatchJobState> builder)
    {
        builder.HasKey(c => c.CorrelationId);

        builder.Property(c => c.CorrelationId)
            .ValueGeneratedNever()
            .HasColumnName("BatchJobId");

        builder.Property(c => c.CurrentState).IsRequired();

        builder.Property(c => c.Action)
            .HasConversion(new EnumToStringConverter<BatchAction>());
    }
}

要顯示導航屬性,您需要使用 Eager Loading via.Include(...)。 這可以使用查詢自定義添加到存儲庫。

在.AddSagaStateMachine<>().EntityFrameworkRepository(r =>)里面

你會添加:

r.CustomizeQuery(x => x.Include(y => y.Jobs));

r.CustomizeQuery(x => x.Include(y => y.Batch));

到相應的 state 機器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM