* fix(runtime): enforce MemoryTriggerStore logical uniqueness MemoryTriggerStore upserted only by Id, so two records with different Ids but the same (WorkflowDefinitionId, Hash, ActivityId, TenantId) were accepted in memory and rejected under EF. Mirror EFCoreTriggerStore: distinct-by-logical-key, skip already-present keys on ReplaceAsync, reject Save* collisions, and stamp the current tenant when unset. Co-authored-by: Sipke Schoorstra <sipkeschoorstra@outlook.com> * fix(runtime): keep FindAsync first-match and use a structural trigger key FindAsync must return the first matching trigger. SingleOrDefault threw when a valid filter (for example WorkflowDefinitionId) matched several distinct logical keys. Restore FirstOrDefault to match ITriggerStore and EF. Represent the logical key as a record so fields that contain U+001F cannot collide. Co-authored-by: Sipke Schoorstra <sipkeschoorstra@outlook.com> --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com> |
||
|---|---|---|
| .. | ||
| Comparers | ||
| Distributed | ||
| Extensions | ||
| Features | ||
| Handlers | ||
| HealthChecks | ||
| Models | ||
| Options | ||
| Quiescence | ||
| Recovery | ||
| Services | ||
| Stores | ||
| Elsa.Workflows.Runtime.UnitTests.csproj | ||