[System]
You are a helpful assistant that answers strictly in JSON. Here's the JSON schema you must adhere to:
<schema>
{"title":"JSON Schema for Beef Database code-generation (https://github.com/Avanade/Beef).","$schema":"https://json-schema.org/draft-04/schema#","definitions":{"CodeGeneration":{"type":"object","title":"'CodeGeneration' object (database-driven)","description":"The 'CodeGeneration' object defines global properties that are used to drive the underlying database-driven code generation.","properties":{"schema":{"type":"string","title":"The name of the 'Schema' where the artefacts are defined in, or should be created in, the database.","description":"This is used as the default 'Schema' for all child objects."},"columnNameIsDeleted":{"type":"string","title":"The column name for the 'IsDeleted' capability.","description":"Defaults to 'IsDeleted'."},"columnNameTenantId":{"type":"string","title":"The column name for the 'TenantId' capability.","description":"Defaults to 'TenantId'."},"columnNameOrgUnitId":{"type":"string","title":"The column name for the 'OrgUnitId' capability.","description":"Defaults to 'OrgUnitId'."},"columnNameRowVersion":{"type":"string","title":"The column name for the 'RowVersion' capability.","description":"Defaults to 'RowVersion'."},"columnNameCreatedBy":{"type":"string","title":"The column name for the 'CreatedBy' capability.","description":"Defaults to 'CreatedBy'."},"columnNameCreatedDate":{"type":"string","title":"The column name for the 'CreatedDate' capability.","description":"Defaults to 'CreatedDate'."},"columnNameUpdatedBy":{"type":"string","title":"The column name for the 'UpdatedBy' capability.","description":"Defaults to 'UpdatedBy'."},"columnNameUpdatedDate":{"type":"string","title":"The column name for the 'UpdatedDate' capability.","description":"Defaults to 'UpdatedDate'."},"columnNameDeletedBy":{"type":"string","title":"The column name for the 'DeletedBy' capability.","description":"Defaults to 'UpdatedBy'."},"columnNameDeletedDate":{"type":"string","title":"The column name for the 'DeletedDate' capability.","description":"Defaults to 'UpdatedDate'."},"orgUnitJoinSql":{"type":"string","title":"The SQL table or function that is to be used to join against for security-based 'OrgUnitId' verification.","description":"Defaults to '[Sec].[fnGetUserOrgUnits]()'."},"checkUserPermissionSql":{"type":"string","title":"The SQL stored procedure that is to be used for 'Permission' verification.","description":"Defaults to '[Sec].[spCheckUserHasPermission]'."},"getUserPermissionSql":{"type":"string","title":"The SQL function that is to be used for 'Permission' verification.","description":"Defaults to '[Sec].[fnGetUserHasPermission]'."},"cdcSchema":{"type":"string","title":"The schema name for the generated 'CDC'-related database artefacts.","description":"Defaults to 'XCdc' (literal)."},"cdcAuditTableName":{"type":"string","title":"The table name for the 'Cdc'-Tracking.","description":"Defaults to 'CdcTracking' (literal)."},"cdcIdentifierMapping":{"type":"boolean","title":"Indicates whether to include the generation of the generic 'Cdc'-IdentifierMapping database capabilities."},"cdcIdentifierMappingTableName":{"type":"string","title":"The table name for the 'Cdc'-IdentifierMapping.","description":"Defaults to 'CdcIdentifierMapping' (literal)."},"cdcIdentifierMappingStoredProcedureName":{"type":"string","title":"The table name for the 'Cdc'-IdentifierMapping.","description":"Defaults to 'spCreateCdcIdentifierMapping' (literal)."},"cdcExcludeColumnsFromETag":{"type":"array","title":"The default list of 'Column' names that should be excluded from the generated ETag (used for the likes of duplicate send tracking)","items":{"type":"string"}},"jsonSerializer":{"type":"string","title":"The JSON Serializer to use for JSON property attribution.","description":"Defaults to 'Newtonsoft'. This can be overridden within the 'Entity'(s).","enum":["None","Newtonsoft"]},"pluralizeCollectionProperties":{"type":"boolean","title":"Indicates whether the .NET collection properties should be pluralized."},"hasBeefDbo":{"type":"boolean","title":"Indicates whether the database has (contains) the standard _Beef_ 'dbo' schema objects.","description":"Defaults to 'true'."},"autoDotNetRename":{"type":"string","title":"The option to automatically rename the SQL Tables and Columns for use in .NET.","description":"Defaults 'SnakeKebabToPascalCase' that will remove any underscores or hyphens separating each word and capitalize the first character of each; e.g. 'internal-customer_id' would be renamed as 'InternalCustomerId'. The 'PascalCase' option will capatilize the first character only.","enum":["None","PascalCase","SnakeKebabToPascalCase"]},"entityScope":{"type":"string","title":"The entity scope option.","description":"Defaults to 'Common' for backwards compatibility; 'Autonomous' is recommended. Determines where the entity is scoped/defined, being 'Common' or 'Business' (i.e. not externally visible).","enum":["Common","Business","Autonomous"]},"eventSubjectRoot":{"type":"string","title":"The root for the event name by prepending to all event subject names via CDC.","description":"Used to enable the sending of messages to the likes of EventHub, Service Broker, SignalR, etc. This can be extended within the 'Entity'(s)."},"eventSubjectFormat":{"type":"string","title":"The default formatting for the Subject when an Event is published via CDC.","description":"Defaults to 'NameAndKey' (being the event subject name appended with the corresponding unique key.)'.","enum":["NameOnly","NameAndKey"]},"eventActionFormat":{"type":"string","title":"The formatting for the Action when an Event is published via CDC.","description":"Defaults to 'None' (no formatting required, i.e. as-is).","enum":["None","PastTense"]},"eventSourceRoot":{"type":"string","title":"The URI root for the event source by prepending to all event source URIs for CDC.","description":"The event source is only updated where an 'EventSourceKind' is not 'None'. This can be extended within the 'Entity'(s)."},"eventSourceKind":{"type":"string","title":"The URI kind for the event source URIs for CDC.","description":"Defaults to 'None' (being the event source is not updated).","enum":["None","Absolute","Relative","RelativeOrAbsolute"]},"eventSourceFormat":{"type":"string","title":"The default formatting for the Source when an Event is published via CDC.","description":"Defaults to 'NameAndKey' (being the event subject name appended with the corresponding unique key.)'.","enum":["NameOnly","NameAndKey","NameAndGlobalId"]},"eventOutbox":{"type":"boolean","title":"Indicates whether events will publish using the outbox pattern and therefore the event outbox artefacts are required."},"eventOutboxTableName":{"type":"string","title":"The table name for the 'EventOutbox'.","description":"Defaults to 'EventOutbox' (literal)."},"pathBase":{"type":"string","title":"The base path (directory) prefix for the Database-related artefacts; other 'Path*' properties append to this value when they are not specifically overridden.","description":"Defaults to 'Company' (runtime parameter) + '.' + 'AppName' (runtime parameter). For example 'Beef.Demo'."},"pathDatabaseSchema":{"type":"string","title":"The path (directory) for the Schema Database-related artefacts.","description":"Defaults to 'PathBase' + '.Database/Schema' (literal). For example 'Beef.Demo.Database/Schema'."},"pathDatabaseMigrations":{"type":"string","title":"The path (directory) for the Schema Database-related artefacts.","description":"Defaults to 'PathBase' + '.Database/Migrations' (literal). For example 'Beef.Demo.Database/Migrations'."},"pathBusiness":{"type":"string","title":"The path (directory) for the Business-related (.NET) artefacts.","description":"Defaults to 'PathBase' + '.Business' (literal). For example 'Beef.Demo.Business'."},"PathCdcPublisher":{"type":"string","title":"The path (directory) for the CDC-related (.NET) artefacts.","description":"Defaults to 'PathBase' + '.Cdc' (literal). For example 'Beef.Demo.Cdc'."},"orgUnitImmutable":{"type":"boolean","title":"Indicates whether the 'OrgUnitId' column is considered immutable, in that it can not be changed once set.","description":"This is only applicable for stored procedures."},"namespaceBase":{"type":"string","title":"The base Namespace (root) for the .NET artefacts.","description":"Defaults to 'Company' (runtime parameter) + '.' + 'AppName' (runtime parameter). For example 'Beef.Demo'."},"namespaceCommon":{"type":"string","title":"The Namespace (root) for the Common-related .NET artefacts.","description":"Defaults to 'NamespaceBase' + '.Common' (literal). For example 'Beef.Demo.Common'."},"namespaceBusiness":{"type":"string","title":"The Namespace (root) for the Business-related .NET artefacts.","description":"Defaults to 'NamespaceBase' + '.Business' (literal). For example 'Beef.Demo.Business'."},"NamespaceCdcPublisher":{"type":"string","title":"The Namespace (root) for the CDC-related publisher .NET artefacts.","description":"Defaults to 'NamespaceBase' + '.CdcPublisher' (literal). For example 'Beef.Demo.CdcPublisher'."},"tables":{"type":"array","title":"The corresponding 'Table' collection.","items":{"$ref":"#/definitions/Table"}},"queries":{"type":"array","title":"The corresponding 'Query' collection.","items":{"$ref":"#/definitions/Query"}}}},"Table":{"type":"object","title":"'Table' object (entity-driven)","description":"The 'Table' object identifies an existing database 'Table' (or 'View') and defines its code-generation characteristics.","properties":{"name":{"type":"string","title":"The name of the 'Table' in the database."},"schema":{"type":"string","title":"The name of the 'Schema' where the 'Table' is defined in the database.","description":"Defaults to 'CodeGeneration.Schema'."},"alias":{"type":"string","title":"The 'Schema.Table' alias name.","description":"Will automatically default where not specified."},"includeColumns":{"type":"array","title":"The list of 'Column' names to be included in the underlying generated output.","description":"Where not specified this indicates that all 'Columns' are to be included.","items":{"type":"string"}},"excludeColumns":{"type":"array","title":"The list of 'Column' names to be excluded from the underlying generated output.","description":"Where not specified this indicates no 'Columns' are to be excluded.","items":{"type":"string"}},"get":{"type":"boolean","title":"Indicates whether a 'Get' stored procedure is to be automatically generated where not otherwise explicitly specified."},"getAll":{"type":"boolean","title":"Indicates whether a 'GetAll' stored procedure is to be automatically generated where not otherwise explicitly specified.","description":"The 'GetAllOrderBy' is used to specify the 'GetAll' query sort order."},"getAllOrderBy":{"type":"array","title":"The list of 'Column' names (including sort order 'ASC'/'DESC' literal) to be used as the 'GetAll' query sort order.","description":"This relates to the 'GetAll' selection.","items":{"type":"string"}},"create":{"type":"boolean","title":"Indicates whether a 'Create' stored procedure is to be automatically generated where not otherwise explicitly specified."},"update":{"type":"boolean","title":"Indicates whether a 'Update' stored procedure is to be automatically generated where not otherwise explicitly specified."},"upsert":{"type":"boolean","title":"Indicates whether a 'Upsert' stored procedure is to be automatically generated where not otherwise explicitly specified."},"delete":{"type":"boolean","title":"Indicates whether a 'Delete' stored procedure is to be automatically generated where not otherwise explicitly specified."},"merge":{"type":"boolean","title":"Indicates whether a 'Merge' (insert/update/delete of 'Udt' list) stored procedure is to be automatically generated where not otherwise explicitly specified.","description":"This will also require a 'Udt' (SQL User Defined Table) and 'Tvp' (.NET Table-Valued Parameter) to function."},"efModel":{"type":"boolean","title":"Indicates whether an 'Entity Framework' .NET (C#) model is to be generated."},"efModelName":{"type":"string","title":"The .NET (C#) EntityFramework (EF) model name.","description":"Defaults to 'Name'."},"udt":{"type":"boolean","title":"Indicates whether a 'User Defined Table (UDT)' type should be created."},"udtExcludeColumns":{"type":"array","title":"The list of 'Column' names to be excluded from the 'User Defined Table (UDT)'.","description":"Where not specified this indicates that no 'Columns' are to be excluded.","items":{"type":"string"}},"tvp":{"type":"string","title":"The name of the .NET entity associated with the 'Udt' so that it can be expressed (created) as a Table-Valued Parameter for usage within the corresponding 'DbMapper'."},"entityScope":{"type":"string","title":"The entity scope option.","description":"Defaults to 'CodeGeneration.EntityScope'. Determines where the entity is scoped/defined, being 'Common' or 'Business' (i.e. not externally visible).","enum":["Common","Business","Autonomous"]},"permission":{"type":"string","title":"The permission (prefix) to be used for security permission checking (suffix defaults to 'Read', 'Write' or 'Delete' and can be overridden in the underlying stored procedure)."},"orgUnitImmutable":{"type":"boolean","title":"Indicates whether the 'OrgUnitId' column is considered immutable, in that it can not be changed once set.","description":"Defaults to 'CodeGeneration.OrgUnitImmutable'. This is only applicable for stored procedures."},"columnNameIsDeleted":{"type":"string","title":"The column name for the 'IsDeleted' capability.","description":"Defaults to 'CodeGeneration.IsDeleted'."},"columnNameTenantId":{"type":"string","title":"The column name for the 'TenantId' capability.","description":"Defaults to 'CodeGeneration.TenantId'."},"columnNameOrgUnitId":{"type":"string","title":"The column name for the 'OrgUnitId' capability.","description":"Defaults to 'CodeGeneration.OrgUnitId'."},"columnNameRowVersion":{"type":"string","title":"The column name for the 'RowVersion' capability.","description":"Defaults to 'CodeGeneration.RowVersion'."},"columnNameCreatedBy":{"type":"string","title":"The column name for the 'CreatedBy' capability.","description":"Defaults to 'CodeGeneration.CreatedBy'."},"columnNameCreatedDate":{"type":"string","title":"The column name for the 'CreatedDate' capability.","description":"Defaults to 'CodeGeneration.CreatedDate'."},"columnNameUpdatedBy":{"type":"string","title":"The column name for the 'UpdatedBy' capability.","description":"Defaults to 'CodeGeneration.UpdatedBy'."},"columnNameUpdatedDate":{"type":"string","title":"The column name for the 'UpdatedDate' capability.","description":"Defaults to 'CodeGeneration.UpdatedDate'."},"columnNameDeletedBy":{"type":"string","title":"The column name for the 'DeletedBy' capability.","description":"Defaults to 'CodeGeneration.UpdatedBy'."},"columnNameDeletedDate":{"type":"string","title":"The column name for the 'DeletedDate' capability.","description":"Defaults to 'CodeGeneration.UpdatedDate'."},"storedProcedures":{"type":"array","title":"The corresponding 'StoredProcedure' collection.","items":{"$ref":"#/definitions/StoredProcedure"}}},"required":["name"]},"StoredProcedure":{"type":"object","title":"'StoredProcedure' object (database-driven)","description":"The code generation for an 'StoredProcedure' is primarily driven by the 'Type' property. This encourages (enforces) a consistent implementation for the standardised **CRUD** (Create, Read, Update and Delete) actions, as well as supporting 'Upsert', 'Merge' and ad-hoc queries as required.","properties":{"name":{"type":"string","title":"The name of the 'StoredProcedure'; generally the verb/action, i.e. 'Get', 'Update', etc.","description":"See 'StoredProcedureName' for the actual name used in the database."},"type":{"type":"string","title":"The stored procedure operation type.","description":"Defaults to 'GetColl'.","enum":["Get","GetColl","Create","Update","Upsert","Delete","Merge"]},"paging":{"type":"boolean","title":"Indicates whether standardized paging support should be added.","description":"This only applies where the stored procedure operation 'Type' is 'GetColl'."},"storedProcedureName":{"type":"string","title":"The 'StoredProcedure' name in the database.","description":"Defaults to 'sp' + 'Table.Name' + 'Name'; e.g. 'spTableName' or 'spPersonGet'."},"reselectStatement":{"type":"string","title":"The SQL statement to perform the reselect after a 'Create', 'Update' or 'Upsert' stored procedure operation 'Type'.","description":"Defaults to '[{{Table.Schema}}].[sp{{Table.Name}}Get]' passing the primary key column(s)."},"intoTempTable":{"type":"boolean","title":"Indicates whether to select into a '#TempTable' to allow other statements access to the selected data.","description":"A 'Select * from #TempTable' is also performed (code-generated) where the stored procedure operation 'Type' is 'GetColl'."},"withHints":{"type":"string","title":"the table hints using the SQL Server 'WITH()' statement; the value specified will be used as-is; e.g. 'NOLOCK' will result in 'WITH(NOLOCK)'."},"mergeOverrideIdentityColumns":{"type":"array","title":"The list of 'Column' names to be used in the 'Merge' statement to determine whether to _insert_, _update_ or _delete_.","description":"This is used to override the default behaviour of using the primary key column(s).","items":{"type":"string"}},"permission":{"type":"string","title":"The name of the 'StoredProcedure' in the database."},"orgUnitImmutable":{"type":"boolean","title":"Indicates whether the 'OrgUnitId' column is considered immutable, in that it can not be changed once set.","description":"Defaults to 'Table.OrgUnitImmutable'."},"includeColumns":{"type":"array","title":"The list of 'Column' names to be included in the underlying generated _settable_ output (further filters 'Table.IncludeColumns').","description":"Where not specified this indicates that all 'Columns' are to be included. Only filters the columns where 'Type' is 'Get', 'GetColl', 'Create', 'Update' or 'Upsert'.","items":{"type":"string"}},"excludeColumns":{"type":"array","title":"The list of 'Column' names to be excluded from the underlying generated _settable_ output (further filters 'Table.ExcludeColumns').","description":"Where not specified this indicates no 'Columns' are to be excluded. Only filters the columns where 'Type' is 'Get', 'GetColl', 'Create', 'Update' or 'Upsert'.","items":{"type":"string"}},"parameters":{"type":"array","title":"The corresponding 'Parameter' collection.","items":{"$ref":"#/definitions/Parameter"}},"where":{"type":"array","title":"The corresponding 'Where' collection.","items":{"$ref":"#/definitions/Where"}},"orderby":{"type":"array","title":"The corresponding 'OrderBy' collection.","items":{"$ref":"#/definitions/OrderBy"}},"execute":{"type":"array","title":"The corresponding 'Execute' collection.","items":{"$ref":"#/definitions/Execute"}}},"required":["name"]},"Parameter":{"type":"object","title":"'Parameter' object (database-driven)","description":"The 'Parameter' is used to define a stored procedure parameter and its charateristics. These are in addition to those that are automatically inferred (added) by the selected 'StoredProcedure.Type'.","properties":{"name":{"type":"string","title":"The parameter name (without the '@' prefix)."},"column":{"type":"string","title":"The corresponding column name; used to infer characteristics.","description":"Defaults to 'Name'."},"sqlType":{"type":"string","title":"The SQL type definition (overrides inherited Column definition) including length/precision/scale."},"nullable":{"type":"boolean","title":"Indicates whether the parameter is nullable.","description":"Note that when the parameter value is 'NULL' it will not be included in the query."},"treatColumnNullAs":{"type":"boolean","title":"Indicates whether the column value where NULL should be treated as the specified value; results in: 'ISNULL([x].[col], value)'."},"collection":{"type":"boolean","title":"Indicates whether the parameter is a collection (one or more values to be included 'IN' the query)."},"operator":{"type":"string","title":"The where clause equality operator","description":"Defaults to 'EQ'.","enum":["EQ","NE","LT","LE","GT","GE","LIKE"]}},"required":["name"]},"Where":{"type":"object","title":"'Where' object (database-driven)","description":"The 'Where' object defines an additional where 'Statement' to be added. This is in addition to those automatically added based on the 'StoredProcedure.Type'.","properties":{"statement":{"type":"string","title":"The where statement (TSQL)."}},"required":["statement"]},"OrderBy":{"type":"object","title":"'OrderBy' object (database-driven)","description":"The 'OrderBy' object defines the query order. Only valid for 'StoredProcedure.Type' of 'GetAll'.","properties":{"name":{"type":"string","title":"The name of the 'Column' to order by."},"order":{"type":"string","title":"The corresponding sort order.","description":"Defaults to 'Ascending'.","enum":["Ascending","Descending"]}},"required":["name"]},"Execute":{"type":"object","title":"'Execute' object (database-driven)","description":"The _Execute_ object enables additional TSQL statements to be embedded within the stored procedure.","properties":{"statement":{"type":"string","title":"The additional TSQL statement."},"location":{"type":"string","title":"The location of the statement in relation to the underlying primary stored procedure statement.","description":"Defaults to 'After'.","enum":["Before","After"]}},"required":["statement"]},"Query":{"type":"object","title":"'Query' object (database-driven)","description":"The 'Query' object enables the definition of more complex multi-table queries ('Joins') that would primarily result in a database _View_. The primary table 'Name' for the query is required to be specified. Multiple queries can be specified for the same table(s). The 'IncludeColumns' and 'ExcludeColumns' provide a shorthand to include or exclude selected columns; with the 'AliasColumns' providing a means to rename where required (for example duplicate name). Additional 'Where' and 'Order' configuration can also be added as required.","properties":{"name":{"type":"string","title":"The name of the primary table of the query."},"schema":{"type":"string","title":"The schema name of the primary table of the view.","description":"Defaults to 'CodeGeneration.dbo'."},"alias":{"type":"string","title":"The 'Schema.Table' alias name.","description":"Will automatically default where not specified."},"includeColumns":{"type":"array","title":"The list of 'Column' names to be included in the underlying generated output.","description":"Where not specified this indicates that all 'Columns' are to be included.","items":{"type":"string"}},"excludeColumns":{"type":"array","title":"The list of 'Column' names to be excluded from the underlying generated output.","description":"Where not specified this indicates no 'Columns' are to be excluded.","items":{"type":"string"}},"aliasColumns":{"type":"array","title":"The list of 'Column' and 'Alias' pairs (split by a '^' lookup character) to enable column aliasing/renaming.","description":"Each alias value should be formatted as 'Column' + '^' + 'Alias'; e.g. 'PCODE^ProductCode'","items":{"type":"string"}},"view":{"type":"boolean","title":"Indicates whether a 'View' is to be generated."},"viewName":{"type":"string","title":"The 'View' name.","description":"Defaults to 'vw' + 'Name'; e.g. 'vwTableName'."},"viewSchema":{"type":"string","title":"The schema name for the 'View'.","description":"Defaults to 'Schema'."},"permission":{"type":"string","title":"The permission to be used for security permission checking.","description":"The suffix is optional, and where not specified will default to '.READ'."},"columnNameIsDeleted":{"type":"string","title":"The column name for the 'IsDeleted' capability.","description":"Defaults to 'CodeGeneration.IsDeleted'."},"columnNameTenantId":{"type":"string","title":"The column name for the 'TenantId' capability.","description":"Defaults to 'CodeGeneration.TenantId'."},"columnNameOrgUnitId":{"type":"string","title":"The column name for the 'OrgUnitId' capability.","description":"Defaults to 'CodeGeneration.OrgUnitId'."},"columnNameRowVersion":{"type":"string","title":"The column name for the 'RowVersion' capability.","description":"Defaults to 'CodeGeneration.RowVersion'."},"columnNameCreatedBy":{"type":"string","title":"The column name for the 'CreatedBy' capability.","description":"Defaults to 'CodeGeneration.CreatedBy'."},"columnNameCreatedDate":{"type":"string","title":"The column name for the 'CreatedDate' capability.","description":"Defaults to 'CodeGeneration.CreatedDate'."},"columnNameUpdatedBy":{"type":"string","title":"The column name for the 'UpdatedBy' capability.","description":"Defaults to 'CodeGeneration.UpdatedBy'."},"columnNameUpdatedDate":{"type":"string","title":"The column name for the 'UpdatedDate' capability.","description":"Defaults to 'CodeGeneration.UpdatedDate'."},"columnNameDeletedBy":{"type":"string","title":"The column name for the 'DeletedBy' capability.","description":"Defaults to 'CodeGeneration.UpdatedBy'."},"columnNameDeletedDate":{"type":"string","title":"The column name for the 'DeletedDate' capability.","description":"Defaults to 'CodeGeneration.UpdatedDate'."},"joins":{"type":"array","title":"The corresponding 'Join' collection.","items":{"$ref":"#/definitions/QueryJoin"}},"order":{"type":"array","title":"The corresponding 'Order' collection.","items":{"$ref":"#/definitions/QueryOrder"}},"where":{"type":"array","title":"The corresponding 'Where' collection.","items":{"$ref":"#/definitions/QueryWhere"}}},"required":["name"]},"QueryJoin":{"type":"object","title":"'QueryJoin' object (database-driven)","description":"The 'QueryJoin' object defines a join to another (or same) table within a query. The 'Type' defines the join type, such as inner join, etc. The 'IncludeColumns' and 'ExcludeColumns' provide a shorthand to include or exclude selected columns; with the 'AliasColumns' providing a means to rename where required (for example duplicate name).","properties":{"name":{"type":"string","title":"The name of the table to join."},"schema":{"type":"string","title":"The schema name of the table to join.","description":"Defaults to 'Table.Schema'; i.e. same schema."},"alias":{"type":"string","title":"The 'Schema.Table' alias name.","description":"Will automatically default where not specified."},"type":{"type":"string","title":"The SQL join type.","description":"Defaults to 'Inner'.","enum":["Inner","Left","Right","Full"]},"includeColumns":{"type":"array","title":"The list of 'Column' names to be included in the underlying generated output.","description":"Where not specified this indicates that all 'Columns' are to be included.","items":{"type":"string"}},"excludeColumns":{"type":"array","title":"The list of 'Column' names to be excluded from the underlying generated output.","description":"Where not specified this indicates no 'Columns' are to be excluded.","items":{"type":"string"}},"aliasColumns":{"type":"array","title":"The list of 'Column' and 'Alias' pairs (split by a '^' lookup character) to enable column renaming.","description":"Each alias value should be formatted as 'Column' + '^' + 'Alias'; e.g. 'PCODE^ProductCode'","items":{"type":"string"}},"columnNameIsDeleted":{"type":"string","title":"The column name for the 'IsDeleted' capability.","description":"Defaults to 'CodeGeneration.IsDeleted'."},"columnNameTenantId":{"type":"string","title":"The column name for the 'TenantId' capability.","description":"Defaults to 'CodeGeneration.TenantId'."},"columnNameOrgUnitId":{"type":"string","title":"The column name for the 'OrgUnitId' capability.","description":"Defaults to 'CodeGeneration.OrgUnitId'."},"columnNameRowVersion":{"type":"string","title":"The column name for the 'RowVersion' capability.","description":"Defaults to 'CodeGeneration.RowVersion'."},"columnNameCreatedBy":{"type":"string","title":"The column name for the 'CreatedBy' capability.","description":"Defaults to 'CodeGeneration.CreatedBy'."},"columnNameCreatedDate":{"type":"string","title":"The column name for the 'CreatedDate' capability.","description":"Defaults to 'CodeGeneration.CreatedDate'."},"columnNameUpdatedBy":{"type":"string","title":"The column name for the 'UpdatedBy' capability.","description":"Defaults to 'CodeGeneration.UpdatedBy'."},"columnNameUpdatedDate":{"type":"string","title":"The column name for the 'UpdatedDate' capability.","description":"Defaults to 'CodeGeneration.UpdatedDate'."},"columnNameDeletedBy":{"type":"string","title":"The column name for the 'DeletedBy' capability.","description":"Defaults to 'CodeGeneration.UpdatedBy'."},"columnNameDeletedDate":{"type":"string","title":"The column name for the 'DeletedDate' capability.","description":"Defaults to 'CodeGeneration.UpdatedDate'."},"on":{"type":"array","title":"The corresponding 'JoinOn' collection.","items":{"$ref":"#/definitions/QueryJoinOn"}}},"required":["name"]},"QueryJoinOn":{"type":"object","title":"'QueryJoinOn' object (database-driven)","description":"The 'QueryJoinOn' object defines the join on characteristics for a join within a query.","properties":{"name":{"type":"string","title":"The name of the join column (from the 'Join' table)."},"toSchema":{"type":"string","title":"The name of the other join to table schema.","description":"Defaults to 'Table.Schema'; i.e. same schema. See also 'ToTable' and 'ToColumn' as these all relate."},"toTable":{"type":"string","title":"The name of the other join to table.","description":"Defaults to 'Table.Name'; i.e. primary table. See also 'ToSchema' and 'ToColumn' as these all relate."},"toColumn":{"type":"string","title":"The name of the other join to column.","description":"Defaults to 'Name'; i.e. assumes same name. See also 'ToSchema' and 'ToTable' as these all relate."},"toStatement":{"type":"string","title":"The fully qualified name ('Alias.Name') of the other column being joined to or other valid SQL (e.g. function) bypassing the corresponding 'Schema', 'Table' and 'Column' logic."}},"required":["name"]},"QueryOrder":{"type":"object","title":"'QueryOrder' object (database-driven)","description":"The 'QueryOrder' object that defines the query order.","properties":{"name":{"type":"string","title":"The name of the 'Column' to order by.","description":"See also 'Schema' and 'Table' as these all relate."},"schema":{"type":"string","title":"The name of order by table schema. See also 'Name' and 'Column' as these all relate.","description":"Defaults to 'Query.Schema'."},"table":{"type":"string","title":"The name of the order by table.","description":"Defaults to 'Table.Name'; i.e. primary table. See also 'Schema' and 'Column' as these all relate."},"order":{"type":"string","title":"The corresponding sort order.","description":"Defaults to 'Ascending'.","enum":["Ascending","Descending"]}},"required":["name"]},"QueryWhere":{"type":"object","title":"'QueryWhere' object (database-driven)","description":"The 'QueryWhere' object defines an additional where 'Statement' to be added.","properties":{"statement":{"type":"string","title":"The where TSQL statement."}},"required":["statement"]}},"allOf":[{"$ref":"#/definitions/CodeGeneration"}]}
</schema>

[User] Provide a JSON object that satisfies the schema "JSON Schema for Beef Database code-generation (https://github.com/Avanade/Beef).". Here are the required top‑level fields: none (all optional). Return only the valid JSON object.

JSON Schema for Beef Database code-generation (https://github.com/Avanade/Beef).

'CodeGeneration' object (database-driven)

The 'CodeGeneration' object defines global properties that are used to drive the underlying database-driven code generation.

The name of the 'Schema' where the artefacts are defined in, or should be created in, the database.

This is used as the default 'Schema' for all child objects.

The column name for the 'IsDeleted' capability.

Defaults to 'IsDeleted'.

The column name for the 'TenantId' capability.

Defaults to 'TenantId'.

The column name for the 'OrgUnitId' capability.

Defaults to 'OrgUnitId'.

The column name for the 'RowVersion' capability.

Defaults to 'RowVersion'.

The column name for the 'CreatedBy' capability.

Defaults to 'CreatedBy'.

The column name for the 'CreatedDate' capability.

Defaults to 'CreatedDate'.

The column name for the 'UpdatedBy' capability.

Defaults to 'UpdatedBy'.

The column name for the 'UpdatedDate' capability.

Defaults to 'UpdatedDate'.

The column name for the 'DeletedBy' capability.

Defaults to 'UpdatedBy'.

The column name for the 'DeletedDate' capability.

Defaults to 'UpdatedDate'.

The SQL table or function that is to be used to join against for security-based 'OrgUnitId' verification.

Defaults to '[Sec].[fnGetUserOrgUnits]()'.

The SQL stored procedure that is to be used for 'Permission' verification.

Defaults to '[Sec].[spCheckUserHasPermission]'.

The SQL function that is to be used for 'Permission' verification.

Defaults to '[Sec].[fnGetUserHasPermission]'.

The schema name for the generated 'CDC'-related database artefacts.

Defaults to 'XCdc' (literal).

The table name for the 'Cdc'-Tracking.

Defaults to 'CdcTracking' (literal).

Indicates whether to include the generation of the generic 'Cdc'-IdentifierMapping database capabilities.

The table name for the 'Cdc'-IdentifierMapping.

Defaults to 'CdcIdentifierMapping' (literal).

Defaults to 'spCreateCdcIdentifierMapping' (literal).

The default list of 'Column' names that should be excluded from the generated ETag (used for the likes of duplicate send tracking)

The JSON Serializer to use for JSON property attribution.

Defaults to 'Newtonsoft'. This can be overridden within the 'Entity'(s).

Indicates whether the .NET collection properties should be pluralized.

Indicates whether the database has (contains) the standard _Beef_ 'dbo' schema objects.

Defaults to 'true'.

The option to automatically rename the SQL Tables and Columns for use in .NET.

Defaults 'SnakeKebabToPascalCase' that will remove any underscores or hyphens separating each word and capitalize the first character of each; e.g. 'internal-customer_id' would be renamed as 'InternalCustomerId'. The 'PascalCase' option will capatilize the first character only.

The entity scope option.

Defaults to 'Common' for backwards compatibility; 'Autonomous' is recommended. Determines where the entity is scoped/defined, being 'Common' or 'Business' (i.e. not externally visible).

The root for the event name by prepending to all event subject names via CDC.

Used to enable the sending of messages to the likes of EventHub, Service Broker, SignalR, etc. This can be extended within the 'Entity'(s).

The default formatting for the Subject when an Event is published via CDC.

Defaults to 'NameAndKey' (being the event subject name appended with the corresponding unique key.)'.

The formatting for the Action when an Event is published via CDC.

Defaults to 'None' (no formatting required, i.e. as-is).

The URI root for the event source by prepending to all event source URIs for CDC.

The event source is only updated where an 'EventSourceKind' is not 'None'. This can be extended within the 'Entity'(s).

The URI kind for the event source URIs for CDC.

Defaults to 'None' (being the event source is not updated).

None Absolute Relative RelativeOrAbsolute

The default formatting for the Source when an Event is published via CDC.

Indicates whether events will publish using the outbox pattern and therefore the event outbox artefacts are required.

The table name for the 'EventOutbox'.

Defaults to 'EventOutbox' (literal).

The base path (directory) prefix for the Database-related artefacts; other 'Path*' properties append to this value when they are not specifically overridden.

Defaults to 'Company' (runtime parameter) + '.' + 'AppName' (runtime parameter). For example 'Beef.Demo'.

The path (directory) for the Schema Database-related artefacts.

Defaults to 'PathBase' + '.Database/Schema' (literal). For example 'Beef.Demo.Database/Schema'.

Defaults to 'PathBase' + '.Database/Migrations' (literal). For example 'Beef.Demo.Database/Migrations'.

The path (directory) for the Business-related (.NET) artefacts.

Defaults to 'PathBase' + '.Business' (literal). For example 'Beef.Demo.Business'.

The path (directory) for the CDC-related (.NET) artefacts.

Defaults to 'PathBase' + '.Cdc' (literal). For example 'Beef.Demo.Cdc'.

Indicates whether the 'OrgUnitId' column is considered immutable, in that it can not be changed once set.

This is only applicable for stored procedures.

The base Namespace (root) for the .NET artefacts.

The Namespace (root) for the Common-related .NET artefacts.

Defaults to 'NamespaceBase' + '.Common' (literal). For example 'Beef.Demo.Common'.

The Namespace (root) for the Business-related .NET artefacts.

Defaults to 'NamespaceBase' + '.Business' (literal). For example 'Beef.Demo.Business'.

The Namespace (root) for the CDC-related publisher .NET artefacts.

Defaults to 'NamespaceBase' + '.CdcPublisher' (literal). For example 'Beef.Demo.CdcPublisher'.

The corresponding 'Table' collection.

The corresponding 'Query' collection.

'Table' object (entity-driven)

The 'Table' object identifies an existing database 'Table' (or 'View') and defines its code-generation characteristics.

The name of the 'Table' in the database.

The name of the 'Schema' where the 'Table' is defined in the database.

Defaults to 'CodeGeneration.Schema'.

The 'Schema.Table' alias name.

Will automatically default where not specified.

The list of 'Column' names to be included in the underlying generated output.

Where not specified this indicates that all 'Columns' are to be included.

The list of 'Column' names to be excluded from the underlying generated output.

Where not specified this indicates no 'Columns' are to be excluded.

Indicates whether a 'Get' stored procedure is to be automatically generated where not otherwise explicitly specified.

Indicates whether a 'GetAll' stored procedure is to be automatically generated where not otherwise explicitly specified.

The 'GetAllOrderBy' is used to specify the 'GetAll' query sort order.

The list of 'Column' names (including sort order 'ASC'/'DESC' literal) to be used as the 'GetAll' query sort order.

This relates to the 'GetAll' selection.

Indicates whether a 'Create' stored procedure is to be automatically generated where not otherwise explicitly specified.

Indicates whether a 'Update' stored procedure is to be automatically generated where not otherwise explicitly specified.

Indicates whether a 'Upsert' stored procedure is to be automatically generated where not otherwise explicitly specified.

Indicates whether a 'Delete' stored procedure is to be automatically generated where not otherwise explicitly specified.

Indicates whether a 'Merge' (insert/update/delete of 'Udt' list) stored procedure is to be automatically generated where not otherwise explicitly specified.

This will also require a 'Udt' (SQL User Defined Table) and 'Tvp' (.NET Table-Valued Parameter) to function.

Indicates whether an 'Entity Framework' .NET (C#) model is to be generated.

The .NET (C#) EntityFramework (EF) model name.

Defaults to 'Name'.

Indicates whether a 'User Defined Table (UDT)' type should be created.

The list of 'Column' names to be excluded from the 'User Defined Table (UDT)'.

Where not specified this indicates that no 'Columns' are to be excluded.

The name of the .NET entity associated with the 'Udt' so that it can be expressed (created) as a Table-Valued Parameter for usage within the corresponding 'DbMapper'.

The entity scope option.

Defaults to 'CodeGeneration.EntityScope'. Determines where the entity is scoped/defined, being 'Common' or 'Business' (i.e. not externally visible).

The permission (prefix) to be used for security permission checking (suffix defaults to 'Read', 'Write' or 'Delete' and can be overridden in the underlying stored procedure).

Defaults to 'CodeGeneration.OrgUnitImmutable'. This is only applicable for stored procedures.

The column name for the 'IsDeleted' capability.

Defaults to 'CodeGeneration.IsDeleted'.

The column name for the 'TenantId' capability.

Defaults to 'CodeGeneration.TenantId'.

The column name for the 'OrgUnitId' capability.

Defaults to 'CodeGeneration.OrgUnitId'.

The column name for the 'RowVersion' capability.

Defaults to 'CodeGeneration.RowVersion'.

The column name for the 'CreatedBy' capability.

Defaults to 'CodeGeneration.CreatedBy'.

The column name for the 'CreatedDate' capability.

Defaults to 'CodeGeneration.CreatedDate'.

The column name for the 'UpdatedBy' capability.

Defaults to 'CodeGeneration.UpdatedBy'.

The column name for the 'UpdatedDate' capability.

Defaults to 'CodeGeneration.UpdatedDate'.

The column name for the 'DeletedBy' capability.

Defaults to 'CodeGeneration.UpdatedBy'.

The column name for the 'DeletedDate' capability.

The corresponding 'StoredProcedure' collection.

'StoredProcedure' object (database-driven)

The code generation for an 'StoredProcedure' is primarily driven by the 'Type' property. This encourages (enforces) a consistent implementation for the standardised **CRUD** (Create, Read, Update and Delete) actions, as well as supporting 'Upsert', 'Merge' and ad-hoc queries as required.

The name of the 'StoredProcedure'; generally the verb/action, i.e. 'Get', 'Update', etc.

See 'StoredProcedureName' for the actual name used in the database.

The stored procedure operation type.

Defaults to 'GetColl'.

Indicates whether standardized paging support should be added.

This only applies where the stored procedure operation 'Type' is 'GetColl'.

The 'StoredProcedure' name in the database.

Defaults to 'sp' + 'Table.Name' + 'Name'; e.g. 'spTableName' or 'spPersonGet'.

The SQL statement to perform the reselect after a 'Create', 'Update' or 'Upsert' stored procedure operation 'Type'.

Defaults to '[{{Table.Schema}}].[sp{{Table.Name}}Get]' passing the primary key column(s).

Indicates whether to select into a '#TempTable' to allow other statements access to the selected data.

A 'Select * from #TempTable' is also performed (code-generated) where the stored procedure operation 'Type' is 'GetColl'.

the table hints using the SQL Server 'WITH()' statement; the value specified will be used as-is; e.g. 'NOLOCK' will result in 'WITH(NOLOCK)'.

The list of 'Column' names to be used in the 'Merge' statement to determine whether to _insert_, _update_ or _delete_.

This is used to override the default behaviour of using the primary key column(s).

The name of the 'StoredProcedure' in the database.

Defaults to 'Table.OrgUnitImmutable'.

The list of 'Column' names to be included in the underlying generated _settable_ output (further filters 'Table.IncludeColumns').

Where not specified this indicates that all 'Columns' are to be included. Only filters the columns where 'Type' is 'Get', 'GetColl', 'Create', 'Update' or 'Upsert'.

The list of 'Column' names to be excluded from the underlying generated _settable_ output (further filters 'Table.ExcludeColumns').

Where not specified this indicates no 'Columns' are to be excluded. Only filters the columns where 'Type' is 'Get', 'GetColl', 'Create', 'Update' or 'Upsert'.

The corresponding 'Parameter' collection.

The corresponding 'Where' collection.

The corresponding 'OrderBy' collection.

The corresponding 'Execute' collection.

'Parameter' object (database-driven)

The 'Parameter' is used to define a stored procedure parameter and its charateristics. These are in addition to those that are automatically inferred (added) by the selected 'StoredProcedure.Type'.

The parameter name (without the '@' prefix).

The corresponding column name; used to infer characteristics.

Defaults to 'Name'.

The SQL type definition (overrides inherited Column definition) including length/precision/scale.

Indicates whether the parameter is nullable.

Note that when the parameter value is 'NULL' it will not be included in the query.

Indicates whether the column value where NULL should be treated as the specified value; results in: 'ISNULL([x].[col], value)'.

Indicates whether the parameter is a collection (one or more values to be included 'IN' the query).

The where clause equality operator

Defaults to 'EQ'.

'Where' object (database-driven)

The 'Where' object defines an additional where 'Statement' to be added. This is in addition to those automatically added based on the 'StoredProcedure.Type'.

The where statement (TSQL).

'OrderBy' object (database-driven)

The 'OrderBy' object defines the query order. Only valid for 'StoredProcedure.Type' of 'GetAll'.

The name of the 'Column' to order by.

The corresponding sort order.

Defaults to 'Ascending'.

'Execute' object (database-driven)

The _Execute_ object enables additional TSQL statements to be embedded within the stored procedure.

The additional TSQL statement.

The location of the statement in relation to the underlying primary stored procedure statement.

Defaults to 'After'.

'Query' object (database-driven)

The 'Query' object enables the definition of more complex multi-table queries ('Joins') that would primarily result in a database _View_. The primary table 'Name' for the query is required to be specified. Multiple queries can be specified for the same table(s). The 'IncludeColumns' and 'ExcludeColumns' provide a shorthand to include or exclude selected columns; with the 'AliasColumns' providing a means to rename where required (for example duplicate name). Additional 'Where' and 'Order' configuration can also be added as required.

The name of the primary table of the query.

The schema name of the primary table of the view.

Defaults to 'CodeGeneration.dbo'.

The 'Schema.Table' alias name.

Will automatically default where not specified.

The list of 'Column' names to be included in the underlying generated output.

Where not specified this indicates that all 'Columns' are to be included.

The list of 'Column' names to be excluded from the underlying generated output.

Where not specified this indicates no 'Columns' are to be excluded.

The list of 'Column' and 'Alias' pairs (split by a '^' lookup character) to enable column aliasing/renaming.

Each alias value should be formatted as 'Column' + '^' + 'Alias'; e.g. 'PCODE^ProductCode'

Indicates whether a 'View' is to be generated.

The 'View' name.

Defaults to 'vw' + 'Name'; e.g. 'vwTableName'.

The schema name for the 'View'.

Defaults to 'Schema'.

The permission to be used for security permission checking.

The suffix is optional, and where not specified will default to '.READ'.

The column name for the 'IsDeleted' capability.

Defaults to 'CodeGeneration.IsDeleted'.

The column name for the 'TenantId' capability.

Defaults to 'CodeGeneration.TenantId'.

The column name for the 'OrgUnitId' capability.

Defaults to 'CodeGeneration.OrgUnitId'.

The column name for the 'RowVersion' capability.

Defaults to 'CodeGeneration.RowVersion'.

The column name for the 'CreatedBy' capability.

Defaults to 'CodeGeneration.CreatedBy'.

The column name for the 'CreatedDate' capability.

Defaults to 'CodeGeneration.CreatedDate'.

The column name for the 'UpdatedBy' capability.

Defaults to 'CodeGeneration.UpdatedBy'.

The column name for the 'UpdatedDate' capability.

Defaults to 'CodeGeneration.UpdatedDate'.

The column name for the 'DeletedBy' capability.

Defaults to 'CodeGeneration.UpdatedBy'.

The column name for the 'DeletedDate' capability.

Defaults to 'CodeGeneration.UpdatedDate'.

The corresponding 'Join' collection.

The corresponding 'Order' collection.

The corresponding 'Where' collection.

'QueryJoin' object (database-driven)

The 'QueryJoin' object defines a join to another (or same) table within a query. The 'Type' defines the join type, such as inner join, etc. The 'IncludeColumns' and 'ExcludeColumns' provide a shorthand to include or exclude selected columns; with the 'AliasColumns' providing a means to rename where required (for example duplicate name).

The name of the table to join.

The schema name of the table to join.

Defaults to 'Table.Schema'; i.e. same schema.

The 'Schema.Table' alias name.

Will automatically default where not specified.

The SQL join type.

Defaults to 'Inner'.

The list of 'Column' names to be included in the underlying generated output.

Where not specified this indicates that all 'Columns' are to be included.

The list of 'Column' names to be excluded from the underlying generated output.

Where not specified this indicates no 'Columns' are to be excluded.

The list of 'Column' and 'Alias' pairs (split by a '^' lookup character) to enable column renaming.

Each alias value should be formatted as 'Column' + '^' + 'Alias'; e.g. 'PCODE^ProductCode'

The column name for the 'IsDeleted' capability.

Defaults to 'CodeGeneration.IsDeleted'.

The column name for the 'TenantId' capability.

Defaults to 'CodeGeneration.TenantId'.

The column name for the 'OrgUnitId' capability.

Defaults to 'CodeGeneration.OrgUnitId'.

The column name for the 'RowVersion' capability.

Defaults to 'CodeGeneration.RowVersion'.

The column name for the 'CreatedBy' capability.

Defaults to 'CodeGeneration.CreatedBy'.

The column name for the 'CreatedDate' capability.

Defaults to 'CodeGeneration.CreatedDate'.

The column name for the 'UpdatedBy' capability.

Defaults to 'CodeGeneration.UpdatedBy'.

The column name for the 'UpdatedDate' capability.

Defaults to 'CodeGeneration.UpdatedDate'.

The column name for the 'DeletedBy' capability.

Defaults to 'CodeGeneration.UpdatedBy'.

The column name for the 'DeletedDate' capability.

The corresponding 'JoinOn' collection.

'QueryJoinOn' object (database-driven)

The 'QueryJoinOn' object defines the join on characteristics for a join within a query.

The name of the join column (from the 'Join' table).

The name of the other join to table schema.

Defaults to 'Table.Schema'; i.e. same schema. See also 'ToTable' and 'ToColumn' as these all relate.

The name of the other join to table.

Defaults to 'Table.Name'; i.e. primary table. See also 'ToSchema' and 'ToColumn' as these all relate.

The name of the other join to column.

Defaults to 'Name'; i.e. assumes same name. See also 'ToSchema' and 'ToTable' as these all relate.

The fully qualified name ('Alias.Name') of the other column being joined to or other valid SQL (e.g. function) bypassing the corresponding 'Schema', 'Table' and 'Column' logic.

'QueryOrder' object (database-driven)

The 'QueryOrder' object that defines the query order.

The name of the 'Column' to order by.

See also 'Schema' and 'Table' as these all relate.

The name of order by table schema. See also 'Name' and 'Column' as these all relate.

Defaults to 'Query.Schema'.

The name of the order by table.

Defaults to 'Table.Name'; i.e. primary table. See also 'Schema' and 'Column' as these all relate.

The corresponding sort order.

Defaults to 'Ascending'.

'QueryWhere' object (database-driven)

The 'QueryWhere' object defines an additional where 'Statement' to be added.

The where TSQL statement.