{"record":{"id":"de2acd44ef7e069c","repo":"elsa-workflows/elsa-core","slug":"schema-version-must-be-greater-than-zero","errorCode":null,"errorMessage":"Schema version must be greater than zero.","messagePattern":"Schema version must be greater than zero\\.","errorType":"validation","errorClass":"ArgumentOutOfRangeException","httpStatus":null,"severity":"error","filePath":"src/modules/Elsa.Persistence.VNext/Builders/PersistenceSchemaBuilder.cs","lineNumber":12,"sourceCode":"namespace Elsa.Persistence.VNext.Builders;\n\npublic class PersistenceSchemaBuilder(string name)\n{\n    private readonly List<PersistenceTable> _tables = [];\n    private readonly List<PersistenceStorageUnit> _storageUnits = [];\n    private int _version = 1;\n\n    public PersistenceSchemaBuilder Version(int version)\n    {\n        if (version < 1)\n            throw new ArgumentOutOfRangeException(nameof(version), version, \"Schema version must be greater than zero.\");\n\n        _version = version;\n        return this;\n    }\n\n    public PersistenceSchemaBuilder Table(string name, Action<PersistenceTableBuilder> configure, string? schema = null)\n    {\n        var builder = new PersistenceTableBuilder(name, schema);\n        configure(builder);\n        _tables.Add(builder.Build());\n        return this;\n    }\n\n    public PersistenceSchemaBuilder StorageUnit(string name, Action<PersistenceStorageUnitBuilder> configure, string? @namespace = null)\n    {\n        var builder = new PersistenceStorageUnitBuilder(name, @namespace);\n        configure(builder);\n        _storageUnits.Add(builder.Build());","sourceCodeStart":1,"sourceCodeEnd":30,"githubUrl":"https://github.com/elsa-workflows/elsa-core/blob/fe9217bdfa0e27f0e09e45006eb6898f616e513d/src/modules/Elsa.Persistence.VNext/Builders/PersistenceSchemaBuilder.cs#L1-L30","documentation":"PersistenceSchemaBuilder.Version rejects any schema version less than 1. The builder starts at version 1, and explicit versions must be positive integers because schema versions are used for migration ordering and must be comparable and nonzero.","triggerScenarios":"Calling PersistenceSchemaBuilder.Version(0) or Version(negative number) while constructing a schema, often computing the version from a variable that defaults to 0 or from an uninitialized config value.","commonSituations":"Reading the schema version from an unset appsetting or environment variable; off-by-one arithmetic producing 0; passing a default(int) placeholder.","solutions":["Pass an integer >= 1, e.g. builder.Version(1).","Validate/normalize the version source (config value) before calling Version.","Clamp with Math.Max(1, candidateVersion) when the value is computed."],"exampleFix":"// before\nbuilder.Version(0);\n// after\nbuilder.Version(1);","handlingStrategy":"validation","validationCode":"if (version < 1) throw new ArgumentOutOfRangeException(nameof(version));\nbuilder.Version(version);","typeGuard":null,"tryCatchPattern":"try { builder.Version(version); }\ncatch (ArgumentOutOfRangeException ex) when (ex.ParamName == \"version\") { builder.Version(1); }","preventionTips":["Default to Version(1) unless migrations require otherwise.","Clamp computed versions with Math.Max(1, v).","Validate config-sourced versions at startup."],"tags":["schema","builder","argument-out-of-range","version"],"backgroundTag":"argument-out-of-range","analyzedSha":"fe9217bdfa0e27f0e09e45006eb6898f616e513d","analyzedAt":"2026-09-13T20:32:34.702Z","contentChangedAt":"2026-09-13T20:32:34.702Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}