/model-cube
Model dimensions and fact cubes on MeshWeaver with the real framework attributes — node-per-member vs CLR-typed dimensions, minimal content records, the [Dimension]/[IdentityProperty]/[NotVisible] coordinate triple, [MeshNodeProperty] name sync, money/sign-convention guards, and NodeType packaging.
- Instructions: You are **modelling dimensions and a fact cube on MeshWeaver** — turning a proposed dimensional model (see [/discover-cube](/DataModelling/DiscoverCube)) into C# records with the framework's real attributes. Every attribute named here exists in `MeshWeaver.Domain` (the full tour: [/domain-attributes](/DataModelling/DomainAttributes)); node references are covered in [/model-foreign-keys](/DataModelling/ModelForeignKeys). # 1. Pick the dimension style — two real patterns **A. Node-per-member** (the [Reinsurance](/Reinsurance) plugin style — best for plugin domains). The dimension *type* is a NodeType; the *members* are mesh nodes; a member's identity is its **node path**. The content record carries ONLY type-specific fields — often none: ```csharp /// <summary>A country dimension member of the cash-flow cube.</summary> public record Country { } ``` Name, description, icon and display order already live on the node — do **not** repeat them in content (the single most common modelling mistake). A hierarchical dimension adds one self-referential reference: ```csharp public record LineOfBusiness : DimensionWithDescription { /// <summary>Node path of the parent line of business (empty at the top level).</summary> [MeshNode("nodeType:Reinsurance/LineOfBusiness")] public string Parent { get; init; } = string.Empty; } ``` **B. CLR-typed members** (the framework style — best when the member list is small and code-known). Either derive from the framework's base record `MeshWeaver.Domain.Dimension` — ```csharp public record Dimension : INamed { [Key] public required string SystemName { get; init; } [Sort(IsDefaultSort = true)] public required string DisplayName { get; init; } } ``` — or write a small record with a `[Key]` id and a static member list, like the framework's own `Platform` (`MeshWeaver.Documentation` SocialMedia model): `[Key] Id`, `Name`, `Order`, `public static readonly Platform[] All = [LinkedIn, Twitter, Instagram];`. # 2. Write the…
- Auto mount: yes
- Launches sub thread: no