AgentSkillsCN

scaffold-single-stream-projection

创建 Marten 单流投影,将来自单一流程的事件汇聚成单一视图(例如,实体详情)。

SKILL.md
--- frontmatter
name: scaffold-single-stream-projection
description: Create a Marten Single Stream Projection to aggregate events from a single stream into a view (e.g., entity details).

Follow this guide to create a Single Stream Projection in Marten. This projection creates a single document for a single event stream (aggregate instance).

  1. Define the Projection Class

    • Create a class in src/BookStore.ApiService/Projections/
    • Naming: {Resource}Projection (e.g., AuthorDetailsProjection)
    • Base Class: SingleStreamProjection<T> matches the standard pattern for explicit single stream aggregation.
    • Template: templates/Projection.cs
  2. Configure in Marten

    • Open src/BookStore.ApiService/Infrastructure/Extensions/MartenConfigurationExtensions.cs
    • Register the projection in RegisterProjections:
      csharp
      options.Projections.Add<AuthorDetailsProjection>(ProjectionLifecycle.Async);
      
    • Note: Async is recommended for performance. Inline handles consistency but impacts write performance.
  3. Indexing (Optional)

    • In ConfigureIndexes:
      csharp
      options.Schema.For<AuthorDetailsProjection>().Index(x => x.Name);
      
  4. Querying

    • Query this projection by ID (matching the stream ID) or other fields.
    • Example: session.LoadAsync<AuthorDetailsProjection>(streamId)

Related Skills

  • /scaffold-aggregate: Create the events first.
  • /scaffold-read: Create an endpoint to query this projection.