Sylin.Koan.Data.Hygiene
1.0.288
dotnet add package Sylin.Koan.Data.Hygiene --version 1.0.288
NuGet\Install-Package Sylin.Koan.Data.Hygiene -Version 1.0.288
<PackageReference Include="Sylin.Koan.Data.Hygiene" Version="1.0.288" />
<PackageVersion Include="Sylin.Koan.Data.Hygiene" Version="1.0.288" />
<PackageReference Include="Sylin.Koan.Data.Hygiene" />
paket add Sylin.Koan.Data.Hygiene --version 1.0.288
#r "nuget: Sylin.Koan.Data.Hygiene, 1.0.288"
#:package Sylin.Koan.Data.Hygiene@1.0.288
#addin nuget:?package=Sylin.Koan.Data.Hygiene&version=1.0.288
#tool nuget:?package=Sylin.Koan.Data.Hygiene&version=1.0.288
Sylin.Koan.Data.Hygiene
Declarative field hygiene for Koan Entities: annotate string properties with [Trim],
[Lowercase], or [Uppercase] and the value is normalized on the persisted clone across every
write path — Save, bulk, batch, REST endpoints, soft-delete re-persists.
using Koan.Data.Abstractions.Annotations;
public sealed class Contact : Entity<Contact>
{
[Trim, Lowercase] public string Email { get; set; } = "";
[Trim] public string DisplayName { get; set; } = "";
}
Reference = Intent: referencing the package is the whole step — no registration, no options.
The contract
- Normalization applies to the persisted clone; the caller's in-memory instance is never modified (ARCH-0098 clone discipline).
nullpasses through; empty strings pass through; normalization is invariant-culture.ApplyOnReadis an identity no-op — trimming is irreversible by design, so the stored value IS the value. Types with hygiene transforms are automatically excluded from the distributed L2 cache.- Non-
stringor setter-less properties carrying hygiene attributes are skipped silently at scan time. Hygiene never throws; it is not validation.
Capability node: Field hygiene ·
Design record: docs/initiatives/data-hygiene.md.
Install
dotnet add package Sylin.Koan.Data.Hygiene
Limits
Configuration decides participation; unsupported requests reject before provider work with a named capability and a correction. Provider-specific limits live in the package's TECHNICAL.md.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Microsoft.Extensions.Configuration (>= 10.0.10)
- Microsoft.Extensions.Configuration.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Configuration.Binder (>= 10.0.10)
- Microsoft.Extensions.Configuration.EnvironmentVariables (>= 10.0.10)
- Microsoft.Extensions.Configuration.Json (>= 10.0.10)
- Microsoft.Extensions.DependencyInjection (>= 10.0.10)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Hosting (>= 10.0.10)
- Microsoft.Extensions.Hosting.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Logging (>= 10.0.10)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Logging.Console (>= 10.0.10)
- Microsoft.Extensions.Options (>= 10.0.10)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 10.0.10)
- Microsoft.Extensions.Options.DataAnnotations (>= 10.0.10)
- Newtonsoft.Json (>= 13.0.4)
- Sylin.Koan.Core (>= 1.0.39 && < 2.0.0)
- Sylin.Koan.Data.Abstractions (>= 1.0.41 && < 2.0.0)
- Sylin.Koan.Data.Core (>= 1.0.73 && < 2.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.288 | 115 | 9/13/2026 |
| 1.0.286 | 108 | 9/12/2026 |
| 1.0.284 | 99 | 9/12/2026 |
| 1.0.283 | 95 | 9/10/2026 |
| 1.0.280 | 107 | 9/10/2026 |
| 1.0.277 | 105 | 9/9/2026 |
| 1.0.274 | 96 | 9/9/2026 |
| 1.0.272 | 95 | 9/9/2026 |
| 1.0.268 | 100 | 9/9/2026 |
| 1.0.267 | 103 | 9/9/2026 |
| 1.0.263 | 90 | 9/5/2026 |
| 1.0.262 | 130 | 8/30/2026 |
| 1.0.261 | 100 | 8/30/2026 |
| 1.0.259 | 102 | 8/28/2026 |
| 1.0.258 | 102 | 8/28/2026 |
| 1.0.257 | 104 | 8/28/2026 |
| 1.0.256 | 96 | 8/28/2026 |
| 1.0.255 | 100 | 8/28/2026 |
| 1.0.254 | 114 | 8/27/2026 |
| 1.0.250 | 105 | 8/27/2026 |