Skip to content
Promote Your Product

Custom Attributes

Namespace: ZhonTai.Admin.Core.Attributes

Zhongtai Admin provides a rich set of custom attributes for declarative control over transactions, permissions, DI lifecycle, data generation, and more.

Transaction Attributes

[Transaction]

Declarative transaction management via AOP interception.

csharp
[Transaction]
public async Task CreateOrder(OrderEntity order)
{
    await _orderRepo.InsertAsync(order);
    await _stockRepo.UpdateAsync(...);
    // Automatically rolls back on exception
}

[AdminTransaction]

Extends Transaction, defaults to using DbKeys.AdminDb (admin database).

csharp
[AdminTransaction]
public async Task UpdatePermission(...) { }

Parameters

ParameterTypeDefaultDescription
PropagationPropagationRequiredTransaction propagation behavior
IsolationLevelIsolationLevel-Isolation level
DbKeystring-Target database

WARNING

Requires Aop.Transaction = true in appconfig.json to take effect.

Permission & Access Attributes

[Login]

Marks a login endpoint. Skips permission validation but still requires JWT authentication.

csharp
[Login]
public async Task<IResultOutput<TokenInfo>> Login(LoginInput input) { }

[ValidatePermission]

Marks endpoints that require login + permission validation (default behavior, usually no need to add explicitly).

[ApiAccess]

Endpoint-level access control, restricting access by operation button unique codes.

csharp
[ApiAccess(All = false, Codes = new[] { "api:admin:module:delete", "api:admin:module:batchdelete" })]
public async Task Delete(long id) { }
ParameterDescription
AllDefault false. true = all codes must be satisfied for access, false = any one code is sufficient
CodesList of allowed access codes

[NoOperationLog]

Disables operation logging for the endpoint.

csharp
[NoOperationLog]
public async Task<IResultOutput> Ping() { }

Database Attributes

[Database]

Marks the target database for an entity (multi-database scenarios).

csharp
[Database("LogDb")]
public class LogEntity : EntityBase { }

[AdminTransaction]

Uses the specified database for transactions. See Transaction Attributes above.

DI Lifecycle Attributes

Controls automatic IOC container registration lifecycle.

csharp
[InjectSingleton]
public class MyCacheService { }

[InjectScoped]
public class MyService { }

[InjectTransient]
public class MyTool { }

[NonRegisterIOC]

Excludes from automatic IOC registration; requires manual registration.

csharp
[NonRegisterIOC]
public class MyCustomService { }

ID Generation Attributes

[Snowflake]

Auto-generates Snowflake ID for primary key (built into Entity.Id).

  • Optimized Snowflake algorithm (snowflake drift) — generates shorter IDs at higher speed.
  • Supports auto-scaling in container environments like K8s (auto-registers WorkerId), capable of generating unique numeric IDs in both standalone and distributed environments.
  • If ID generation demand does not exceed 50K/s, no configuration changes are needed.
  • If between 50K/s and 500K/s, it is recommended to set SeqBitLength=10.
  • If between 500K/s and 5M/s, it is recommended to set SeqBitLength=12.
csharp
[Snowflake]
public long Id { get; set; }

[OrderGuid]

Uses ordered Guid for primary key (a design balancing global uniqueness and index performance).

Applicable scenarios:

  • Distributed systems: No central sequence generator; each node generates IDs independently — no conflicts when merging data.
  • Horizontal sharding: No primary key duplication concerns during Merge/Sharding.
  • Security: External-facing IDs are not guessable (unlike auto-increment numbers).
  • No external dependencies: No need to rely on database auto-increment, Redis counters, or other external services.
csharp
[OrderGuid]
public Guid Id { get; set; }

Time Attributes

[ServerTime]

Auto-assigns server time on insert or update.

csharp
// Auto-assign on insert
[ServerTime]
public DateTime? CreatedTime { get; set; }

// Auto-assign on update only
[ServerTime(CanInsert = false, CanUpdate = true)]
public DateTime? ModifiedTime { get; set; }

API Grouping & Routing

[ApiGroup]

Swagger API grouping.

csharp
[ApiGroup("Order Management")]
public class OrderService { }

// Exclude from grouping
[ApiGroup(NonGroup = true)]
public class InternalService { }

[VersionRoute]

Versioned routing: /api/{version}/[area]/[controller]/[action]

csharp
[VersionRoute("v1")]
public class OrderService { }

[SchemaId]

Custom Swagger SchemaId to avoid conflicts between classes with the same name.

csharp
[SchemaId(Prefix = "Order", Suffix = "Input")]
public class OrderInput { }

Data Generation Attributes

[NotGen]

Excludes property during data generation/synchronization.

csharp
[NotGen]
public DateTime SyncTime { get; set; }

[ScanCacheKeys]

Marks a cache key constant class for system scanning and registration.

csharp
[ScanCacheKeys]
public static class MyCacheKeys
{
    public const string MyData = "MyModule:Data";
}

[ScanTaskNames]

Marks a task name constant class for system scanning and registration.