With the new #dotnet project I've gone all in with value types, even using custom type for entity IDs.
record struct Id<T>(long Value)
It's better for type safety (can't mix IDs of different entities) and also for type inference.
If only #csharp had proper type aliases, so I could define UserId = Id<User>! global using helps, but it's still only project-specific. I want to write code generator that generates those global usings.