Throw ObjectNotFoundException from FindRequired; add run-console wrappers

- DbBase.FindRequired / Client.FindByNameRequired now throw the
  domain-specific ObjectNotFoundException (NHibernate lineage; Rails
  equivalent: ActiveRecord::RecordNotFound) on a lookup miss; the
  no-context case stays InvalidOperationException (configuration error)
- Console demo catches the new type; tests (18)/(21) assert it,
  (19)/(23) keep InvalidOperationException with rationale comments
- scripts/run-console.sh delegates to dotnet.sh; run-console.ps1 is
  the Windows/PowerShell counterpart (mise-first, repo-root cd)

Yak: objectnotfoundexception-run-console-wrappers-3p8b
This commit is contained in:
2026-09-14 22:39:21 +01:00
parent 4b6e6f5a00
commit ec9586c316
8 changed files with 104 additions and 17 deletions
+39
View File
@@ -0,0 +1,39 @@
# Run the Before.Console demo app (src/Before.Console/Program.cs) on Windows.
#
# Windows counterpart of scripts/run-console.sh:
# - runs from the repo root, like the other scripts
# - prefers mise (see mise.toml) and falls back to a dotnet on PATH
#
# Troubleshooting: if dotnet fails with "The user's home directory could not
# be determined" (some sandboxed shells), set DOTNET_CLI_HOME first:
# PS> $env:DOTNET_CLI_HOME = "$PWD\.dotnet-cli"
#
# Usage (from anywhere):
# PS> .\scripts\run-console.ps1 # no args
# PS> .\scripts\run-console.ps1 --verbose # args go to the program
# The script inserts the `--` separator for dotnet run itself.
#
# If script execution is blocked by policy:
# PS> powershell -ExecutionPolicy Bypass -File .\scripts\run-console.ps1
$ErrorActionPreference = 'Stop'
$repoRoot = Split-Path -Parent $PSScriptRoot
Push-Location $repoRoot
try {
$dotnetArgs = @('run', '--project', 'src/Before.Console')
if ($args.Count -gt 0) {
$dotnetArgs += '--'
$dotnetArgs += $args
}
if (Get-Command mise -ErrorAction SilentlyContinue) {
mise exec -- dotnet @dotnetArgs
}
else {
dotnet @dotnetArgs
}
exit $LASTEXITCODE
}
finally {
Pop-Location
}