Duna.Libs.Core 1.0.8

dotnet add package Duna.Libs.Core --version 1.0.8
                    
NuGet\Install-Package Duna.Libs.Core -Version 1.0.8
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Duna.Libs.Core" Version="1.0.8" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Duna.Libs.Core" Version="1.0.8" />
                    
Directory.Packages.props
<PackageReference Include="Duna.Libs.Core" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Duna.Libs.Core --version 1.0.8
                    
#r "nuget: Duna.Libs.Core, 1.0.8"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Duna.Libs.Core@1.0.8
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Duna.Libs.Core&version=1.0.8
                    
Install as a Cake Addin
#tool nuget:?package=Duna.Libs.Core&version=1.0.8
                    
Install as a Cake Tool

Duna.Libs.Core

Core library for Dunasoft applications. Provides foundational abstractions and utilities for building data-driven services: generic CRUD, event bus, multi-database support, flexible ID generation, sorting, mapping, security, and more.

Note: All functionality previously in Duna.Libs.Utils has been merged into this library. If you were referencing Duna.Libs.Utils, you can replace it with Duna.Libs.Core and update namespaces as follows:

Old namespace New namespace
Duna.Libs.Utils.Auxf Duna.Libs.Core.Auxf
Duna.Libs.Utils.Security Duna.Libs.Core.Security
Duna.Libs.Utils.Graphics Duna.Libs.Core.Graphics
Duna.Libs.Utils.Tree Duna.Libs.Core.Tree
Duna.Libs.Utils.Exceptions Duna.Libs.Core.Exceptions

Table of Contents


License

Free for non-commercial, educational, and learning use.

Small Business License — up to 3 people in the organization AND up to 100 users:
$100 / year

Enterprise License — more than 3 people OR more than 100 users:
10% of gross revenue of all products built using this library, billed quarterly.

Copyright © 2021-present Soroush Dehbidi Asadzadeh / LOCBEEZ. All Rights Reserved.
Contact: info@soroushasadzadeh.com


Installation

dotnet add package Duna.Libs.Core

Package Structure

Duna.Libs.Core
├── Interfaces/          Core abstractions (IEntity, ICrudService, IMapper, IIdProvider, …)
├── Services/            CRUD, authorized, tree service implementations
├── IdProviders/         ID generation strategies (Guid, Long, Snowflake, Hybrid, …)
├── EventBus/            DB-backed outbox event bus (RabbitMQ)
├── Sort/                Serializable sort expression + IQueryable extension
├── Security/            Permission encoding/decoding, cryptography, captcha
├── Auxf/                Auxiliary helpers (Copier, EnumExtensions, ChecksumGenerator)
├── Graphics/            Image generation and bitmap manipulation
├── Tree/                Hierarchy helpers for tree-structured data
├── Enums/               DatabaseProvider, AccessLevel, …
├── Exceptions/          ExceptionBase, ErrorCode
└── (root)               DatabaseExtensions, SchemaHelper, SqlTypeHelper, Coder, Converter, …

Interfaces

IEntity

Duna.Libs.Core.Interfaces.IEntity<T>

The root marker interface for all domain entities. Requires a single Id property.

public interface IEntity<T>
{
    T Id { get; set; }
}

Every entity, DTO, and service type in this library is constrained to IEntity<TId>.


ICrudService

Duna.Libs.Core.Interfaces.ICrudService<TDto, TId>

Full async CRUD contract. Use this interface for dependency injection instead of the concrete CrudService.

Task<TDto> AddAsync(TDto input, CancellationToken token = default);
Task<IEnumerable<TDto>> AddListAsync(IEnumerable<TDto> input, CancellationToken token = default);
Task<TDto> UpdateAsync(TDto input, CancellationToken token = default);
Task<IEnumerable<TDto>> UpdateListAsync(IEnumerable<TDto> input, CancellationToken token = default);
Task RemoveAsync(TId input, CancellationToken token = default);
Task RemoveListAsync(IEnumerable<TId> input, CancellationToken token = default);
Task<TDto> GetAsync(TId id, CancellationToken token = default);
Task<List<TDto>> GetListAsync(string sortExpression, int startIndex, int size, CancellationToken token = default);
Task<List<TDto>> GetAllAsync(CancellationToken token = default);
Task<int> CountAsync(CancellationToken token = default);
Task<long> LongCountAsync(CancellationToken token = default);

IAuthorizedService

Duna.Libs.Core.Interfaces.IAuthorizedService<TDto, TId>

Extends CRUD with ownership/access checks before write operations.

Task<bool> HasWriteAccessAsync(TId id, CancellationToken token = default);
Task<bool> HasWriteAccessAsync(IEnumerable<TId> idList, CancellationToken token = default);
Task<TDto> AuthorizedUpdateAsync(TDto input, CancellationToken token = default);
Task AuthorizedRemoveAsync(TId id, CancellationToken token = default);

IMapper

Duna.Libs.Core.Interfaces.IMapper<TInterface, TId>
Duna.Libs.Core.Interfaces.IMapper<TEntitySourceBase, TEntityTargetBase, TId>

Two mapper shapes:

  • Single-type mapper — maps within one entity hierarchy (entity ↔ DTO sharing the same interface).
  • Dual-type mapper — maps between two independent entity hierarchies (e.g. read model ↔ write model).
// Single-type
TInterface Map(TInterface source, TInterface target);
TEntity Map<TEntity>(TInterface input, TEntity existing = null);
IEnumerable<TEntity> Map<TEntity>(IEnumerable<TInterface> list);

// Dual-type
TEntityTargetBase MapToTarget(TEntitySourceBase source, TEntityTargetBase existing);
TEntitySourceBase MapToSource(TEntityTargetBase source, TEntitySourceBase existing);
// …plus generic and list overloads

IIdProvider

Duna.Libs.Core.Interfaces.IIdProvider<TEntity, TId>

Abstracts ID assignment so you can swap strategies without changing service code.

bool Enable { get; }
Task<TId> GetLatestIdAsync(CancellationToken token = default);
Task<TId> GetNewIdAsync(TId latestId = default, CancellationToken token = default);
Task<IEnumerable<TId>> GetNewIdsAsync(int count, TId latestId = default, CancellationToken token = default);
Task<TEntity> CreateAsync(TId latestId = default, CancellationToken token = default);
Task<IEnumerable<TEntity>> CreateAsync(int count, TId latestId = default, CancellationToken token = default);
Task<TEntity> SetIdAsync(TEntity entity, TId latestId = default, CancellationToken token = default);
Task<IEnumerable<TEntity>> SetIdAsync(IEnumerable<TEntity> entities, TId latestId = default, CancellationToken token = default);

When Enable returns false (e.g. the column has a database identity), the provider is a no-op.


IContextProvider

Duna.Libs.Core.Services.IContextProvider<TDbContext>

Abstracts read/write context splitting for load-balancing scenarios.

TDbContext Context { get; }       // alias for WriteContext
TDbContext ReadContext { get; }
TDbContext WriteContext { get; }

Use ContextProvider<TDbContext> (single context) or supply separate read/write contexts for read replicas.


ICurrentUser / ICurrentUserDataProvider

Duna.Libs.Core.Interfaces.ICurrentUser<TId> — marker; extends IEntity<TId>.
Duna.Libs.Core.Interfaces.ICurrentUserDataProvider — implement to expose the authenticated user to authorized services.


IWorker

Duna.Libs.Core.Interfaces.IWorker

Exposes a node Index used by distributed ID generators (Snowflake, Hybrid).

public interface IWorker { int Index { get; } }

Register one implementation per process/node to guarantee ID uniqueness across a cluster.


ILongTree / IStringTree

Duna.Libs.Core.Interfaces.ILongTree / IStringTree

Marker interfaces for hierarchical entities. Implemented by tree CRUD services. Extension methods on these are available in ITreeExtensions.


Services

CrudService

Duna.Libs.Core.Services.CrudService<TDbContext, TEntity, TDto, TInterface, TId>

Concrete implementation of ICrudService. Wire up via DI:

// DI registration
services.AddScoped<ICrudService<ProductDto, int>,
    CrudService<AppDbContext, Product, ProductDto, IProduct, int>>();

Requires:

  • IContextProvider<TDbContext> — context access
  • IMapper<TInterface, TId> — DTO ↔ entity mapping
  • IIdProvider<TEntity, TId> — ID assignment

AuthorizedServiceBase

Duna.Libs.Core.Services.AuthorizedServiceBase<TDbContext, TEntity, TDto, TInterface, TId, TCurrentUser, TCurrentUserId>

Extends CrudService and implements IAuthorizedService. Override HasWriteAccessAsync to define ownership rules. All write operations call the access check before executing.


LongTreeCrudService / StringTreeCrudService

Duna.Libs.Core.Services.LongTreeCrudService<…> / StringTreeCrudService<…>

Hierarchical CRUD for tree-structured entities with long or string IDs. Provides path-aware operations (ancestors, descendants, move subtree).


ID Providers

All concrete providers extend IdProviderBase and implement IIdProvider<TEntity, TId>.
When the EF model detects a database-generated identity column, Enable is automatically set to false and the provider becomes a no-op.

IdProviderBase

Duna.Libs.Core.IdProviders.IdProviderBase<TDbContext, TEntity, TId>

Abstract base. Handles Enable/HasIdentity detection and delegates to GetNewIdAsync.


GuidIdProvider

Duna.Libs.Core.IdProviders.GuidIdProvider<TDbContext, TEntity>

Generates Guid.NewGuid() IDs. No database round-trips.

services.AddScoped<IIdProvider<Order, Guid>, GuidIdProvider<AppDbContext, Order>>();

LongIdProvider / Int32IdProvider / NumericIdProvider

Duna.Libs.Core.IdProviders.LongIdProvider<TDbContext, TEntity>
Duna.Libs.Core.IdProviders.Int32IdProvider<TDbContext, TEntity>
Duna.Libs.Core.IdProviders.NumericIdProvider<TDbContext, TEntity, TId>

Sequential providers. Read the current max ID from the database and increment. Use LongIdGenerator internally for high-throughput batches.


SnowflakeIdProvider

Duna.Libs.Core.IdProviders.SnowflakeIdProvider<TDbContext, TEntity>

Generates distributed long IDs using the Twitter Snowflake algorithm. Requires an IWorker to supply the node index.

services.AddSingleton<IWorker>(new WorkerNode(index: 1));
services.AddScoped<IIdProvider<Order, long>, SnowflakeIdProvider<AppDbContext, Order>>();

IDs encode timestamp + node + sequence — sortable and globally unique without coordination.


HybridNodeIdProvider

Duna.Libs.Core.IdProviders.HybridNodeIdProvider<TDbContext, TEntity>

Combines a database sequence lookup with node-local generation for scenarios requiring strict ordering within a node.


DisabledIdProvider

Duna.Libs.Core.IdProviders.DisabledIdProvider<TDbContext, TEntity, TId>

Always returns default(TId) and sets Enable = false. Use when the database generates IDs (IDENTITY / SERIAL / AUTO_INCREMENT).


UniqueIdGenerator / LongIdGenerator / SnowflakeIdGenerator

Low-level stateless generators used internally by the providers.

Type Output Algorithm
UniqueIdGenerator long, ulong, Guid, string Epoch-based with configurable fields
LongIdGenerator long Sequential with in-memory batching
SnowflakeIdGenerator long Timestamp (41 bit) + node (10 bit) + seq (12 bit)

Extension methods StringTreeIdExtensions and LongTreeIdExtensions bridge these generators to tree path operations.


Database

DatabaseProvider (enum)

Duna.Libs.Core.Enums.DatabaseProvider

Value Provider
MsSql (0) Microsoft SQL Server (default)
PostgreSql (1) PostgreSQL via Npgsql
MySql (2) MySQL / MariaDB

Read from configuration and pass to DatabaseExtensions, DbContextEventBusBase, and migration factories.


DatabaseExtensions

Duna.Libs.Core.DatabaseExtensions

Extension methods on DbContextOptionsBuilder for provider-agnostic configuration.

// Configure provider without migrations assembly (read/write contexts)
optionsBuilder.UseDatabase(connectionString, DatabaseProvider.PostgreSql);

// Configure provider with migrations assembly (migration context)
optionsBuilder.UseDatabaseWithMigrations(connectionString, DatabaseProvider.MySql, migrationsAssembly);

// Typed overloads for AddDbContext<T>
optionsBuilder.UseDatabase<MyDbContext>(connectionString, provider);
optionsBuilder.UseDatabaseWithMigrations<MyDbContext>(connectionString, provider, migrationsAssembly);

SQL Server is configured with compatibility level 120 (SQL Server 2014+) for broad compatibility.


DatabaseProviderDetector

Duna.Libs.Core.DatabaseProviderDetector

Resolves the active DatabaseProvider at runtime or during migrations from EF Core internals.

// In a migration
var provider = DatabaseProviderDetector.Detect(migrationBuilder);

// From context options
var provider = DatabaseProviderDetector.Detect(dbContext.Options);

Falls back to MsSql if detection fails.


SchemaHelper

Duna.Libs.Core.SchemaHelper

Resolves table names and schema values across providers. MySQL has no schema concept — the schema name is converted to a table prefix.

// SQL Server / PostgreSQL → schema: "Core", table: "EventBusMessage"
// MySQL                  → schema: null,   table: "core_EventBusMessage"
string schema = SchemaHelper.GetSchema("Core", provider);
string table  = SchemaHelper.GetTableName("EventBusMessage", "Core", provider);

SqlTypeHelper

Duna.Libs.Core.SqlTypeHelper

Returns provider-correct column type strings for use in OnModelCreating.

Property MsSql PostgreSql MySql
SqlGuid uniqueidentifier uuid char(36)
SqlDateTime datetime2 timestamptz datetime
SqlText nvarchar(255) varchar(255) varchar(255)
SqlTextMax nvarchar(max) text longtext
SqlInt int int int
SqlBigint bigint bigint bigint

EventBus

A durable outbox-pattern event bus backed by a relational database and delivered via RabbitMQ.

DbContextEventBusBase

Duna.Libs.Core.EventBus.DbContextEventBusBase

Base DbContext for the EventBus schema. Inherit from this instead of DbContext to get the outbox tables and provider-aware OnModelCreating.

public class MyEventBusContext : DbContextEventBusBase
{
    public MyEventBusContext(DbContextOptions options, DbContextEventBusOptions busOptions)
        : base(options, busOptions) { }
}

// Registration (SQL Server)
new MyEventBusContext(efOptions, new DbContextEventBusOptions(DatabaseProvider.MsSql));

// Call after creation to ensure schema + dequeue infrastructure
await ctx.EnsureCreatedAsync();

Exposes typed SQL column helpers (SqlGuid, SqlDateTime, etc.) and SchemaCore = "Core".


EventBusAdaptor

Duna.Libs.Core.EventBus.EventBusAdaptor

Manages the RabbitMQ IConnection / IChannel lifecycle with reconnect logic. Used internally by EventBusMessageService.

var adaptor = new EventBusAdaptor(factory, logger, configs);
await adaptor.ConnectAsync();

ConnectionStatus exposes NotConnected, Connecting, Connected.


EventBusMessageService

Duna.Libs.Core.EventBus.EventBusMessageService

Hosted service that polls the outbox table and publishes pending messages to RabbitMQ queues, then marks them consumed. Handles batching (SendBatchCount), concurrency TTL, and retry intervals from EventBusConfigs.


EventBusConfigs / EventBusConnectionConfigs / EventBusQueueConfigs

Configuration POCOs for the event bus. Typically bound from appsettings.json.

{
  "EventBus": {
    "SendBatchCount": 50,
    "SendMessageInterval": "00:00:10",
    "SendMessageConcurrentTTL": "00:02:00",
    "Connection": {
      "Host": "localhost",
      "Port": 5672,
      "UserName": "guest",
      "Password": "guest"
    },
    "Queues": [
      { "Name": "orders", "Exchange": "app" }
    ]
  }
}

Call configs.OverrideValuesFromStringValues() to parse string-typed fields from environment variables.


EventBusMessage / EventBusMessagePublish / EventBusMessageConsumed

Outbox table entities:

Type Purpose
EventBusMessage Pending outbox record. Written by the producer.
EventBusMessagePublish View/DTO used during the publish phase.
EventBusMessageConsumed Written after successful delivery to RabbitMQ.

Implement IEventBusMessage on your domain events and use EventBusMessageMapper to convert them to outbox records.


DequeueHelper / DbMigrationHelper

DequeueHelper — generates provider-specific SQL for atomic dequeue (SELECT + UPDATE with FOR UPDATE SKIP LOCKED on PostgreSQL/MySQL, WITH (UPDLOCK, READPAST) on SQL Server).

DbMigrationHelper — generates provider-specific DDL (CREATE TABLE, CREATE INDEX, DROP TABLE) for the EventBus schema, used in EF migrations via MigrationBuilder.Sql(...).


Sorting

SortExpression / SortExpressionElement / SortService

Duna.Libs.Core.Sort

Serialize/deserialize a sort descriptor from a query-string format and apply it to any IQueryable<T>.

// Parse from string: "Name asc, CreatedAt desc"
SortExpression sort = "Name asc, CreatedAt desc";

// Apply to a query
var sorted = dbContext.Products.Sort("Name asc, Price desc").Skip(0).Take(20);

SortExpressionElement holds a single field name, direction, and order index.
SortExpressionElementType is the enum for Asc / Desc.


Mapping

MapperBase

Duna.Libs.Core.MapperBase<TInterface, TId> — implement Map(source, target) to get free list and generic overloads.
Duna.Libs.Core.MapperBase<TEntitySourceBase, TEntityTargetBase, TId> — dual-hierarchy variant; implement MapToSource and MapToTarget.

public class ProductMapper : MapperBase<IProduct, int>
{
    public override IProduct Map(IProduct source, IProduct target)
    {
        target.Name  = source.Name;
        target.Price = source.Price;
        return target;
    }
}

EmptyMapper

Duna.Libs.Core.EmptyMapper<TInterface, TId>

No-op mapper where entity and DTO are the same type. Useful when no transformation is needed.


Utilities

Coder

Duna.Libs.Core.Coder

Generates sequential human-readable codes from a pattern string by incrementing the trailing numeric segment.

var coder = new Coder { Pattern = "ORD-0001", Seed = 1 };
string next = coder.NewCode; // "ORD-0002"

Set UseGeneralSequence = true to use UniqueIdGenerator instead of a simple seed increment.


Converter

Duna.Libs.Core.Converter

String conversion helpers: ToNullableInt(), ToNullableTimeSpan(), and related extension methods. Used internally by EventBusConfigs.OverrideValuesFromStringValues().


RingLoadbalancer

Duna.Libs.Core.RingLoadbalancer<TObject>

Thread-safe round-robin selector over a fixed array of objects. Use to distribute load across multiple DB contexts or connections.

var lb = new RingLoadbalancer<AppDbContext>(new[] { ctx1, ctx2, ctx3 });
var ctx = lb.Get(); // round-robin, thread-safe

TaskExtensions

Duna.Libs.Core.TaskExtensions

Helper extensions for fire-and-forget and safe Task continuation patterns.


ExpressionsExtensions / ITreeExtensions

Duna.Libs.Core.ExpressionsExtensions — LINQ expression helpers used internally by sort and query services.
Duna.Libs.Core.ITreeExtensions — extension methods on ILongTree / IStringTree for path manipulation.



Security

Duna.Libs.Core.Security

IPermission

IPermission<TAccessId> — marks a permission object with an AccessId.
IPermission<TAccessId, TAccessLevel> — extends with an AccessLevel and authorization check methods.

public interface IPermission<TAccessId>
{
    TAccessId AccessId { get; }
    bool IsAuthorized(string base64EncodedPermission);
}

PermissionEncoder

Duna.Libs.Core.Security.PermissionEncoder

Encodes lists of permissions to compact binary (byte array) or Base64 strings, and decodes them back. Useful for embedding permission sets in JWT claims or cookies.

// Encode a permission list to bytes
byte[] encoded = permissions.Encode();

// Encode to Base64 string (for JWT claims)
string base64 = permissions.EncodeToBase64String();

// Decode back to permission objects
var perms = encoded.Decode<MyPermission, long>().ToList();

// Decode with access level
var perms = encoded.Decode<MyPermission, long, long>().ToList();

// Decode from Base64
var perms = base64.DecodeFromBase64String<MyPermission, long>().ToList();

Cryptography

Duna.Libs.Core.Security.Cryptography

Provides common hashing and encryption utilities (MD5, SHA, AES) for passwords and sensitive data.


CaptchaCreator

Duna.Libs.Core.Security.CaptchaCreator

Generates image-based captcha challenges (math operations or text). Returns a CaptchaResult with the question image and the expected answer.

var captcha = CaptchaCreator.Create(CaptchaCreator.Operation.Add);
// captcha.Question — byte[] PNG image
// captcha.Answer   — int expected answer

Auxf (Auxiliary Utilities)

Duna.Libs.Core.Auxf

Copier

Duna.Libs.Core.Auxf.Copier

Reflection-based property copying utilities.

CopyProperties<TDestination>() — copies all primitive and string properties by matching name and type to a new instance of TDestination.

var dto = entity.CopyProperties<ProductDto>();

Fill<TEntity, TInterface>(filler) — fills only the null properties of an existing object from a filler object, using the interface's property set as scope.

// Only null fields in 'entity' are filled from 'defaults'
var result = entity.Fill<Product, IProduct>(defaults);

EnumExtensions

Duna.Libs.Core.Auxf.EnumExtensions

Extension methods for [Flags] enums across all underlying integer types (byte, int, long, ulong).

RemoveFlags(flags) — removes the specified flags from the enum value without affecting others.

var perms = MyFlags.Read | MyFlags.Write | MyFlags.Delete;
perms = perms.RemoveFlags(MyFlags.Delete); // → Read | Write

ChecksumGenerator

Duna.Libs.Core.Auxf.ChecksumGenerator

Generates checksums over byte arrays or strings for data integrity verification.


Graphics

Duna.Libs.Core.Graphics

ImageGenerator / BitmapHelper

ImageGenerator — creates in-memory images (used by CaptchaCreator).
BitmapHelper — low-level bitmap pixel manipulation helper used internally for image distortion effects.


Exceptions

ExceptionBase / ErrorCode

Duna.Libs.Core.Exceptions.ExceptionBase

Structured exception with ModuleId, ErrorCode, and HttpCode for API error mapping.

public class MyException : ExceptionBase
{
    public MyException(string message)
        : base(moduleId: 1, errorCode: 1001, httpCode: 400, message: message) { }
}

Duna.Libs.Core.Exceptions.ErrorCode — pre-defined error code constants.
Duna.Libs.Core.Enums.AccessLevel — enum for permission levels used by authorized services.


Type Reference

Type Namespace Kind
IEntity<T> Duna.Libs.Core.Interfaces Interface
ICrudService<TDto, TId> Duna.Libs.Core.Interfaces Interface
IAuthorizedService<TDto, TId> Duna.Libs.Core.Interfaces Interface
IMapper<TInterface, TId> Duna.Libs.Core.Interfaces Interface
IMapper<TSource, TTarget, TId> Duna.Libs.Core.Interfaces Interface
IIdProvider<TEntity, TId> Duna.Libs.Core.Interfaces Interface
IContextProvider<TDbContext> Duna.Libs.Core.Services Interface
ICurrentUser<TId> Duna.Libs.Core.Interfaces Interface
ICurrentUserDataProvider Duna.Libs.Core.Interfaces Interface
IWorker Duna.Libs.Core.Interfaces Interface
ILongTree Duna.Libs.Core.Interfaces Interface
IStringTree Duna.Libs.Core.Interfaces Interface
CrudService<…> Duna.Libs.Core.Services Class
AuthorizedServiceBase<…> Duna.Libs.Core.Services Class (abstract)
LongTreeCrudService<…> Duna.Libs.Core.Services Class
StringTreeCrudService<…> Duna.Libs.Core.Services Class
ContextProvider<TDbContext> Duna.Libs.Core.Services Class
MapperBase<TInterface, TId> Duna.Libs.Core Class (abstract)
MapperBase<TSource, TTarget, TId> Duna.Libs.Core Class (abstract)
EmptyMapper<TInterface, TId> Duna.Libs.Core Class
IdProviderBase<…> Duna.Libs.Core.IdProviders Class (abstract)
GuidIdProvider<TDbContext, TEntity> Duna.Libs.Core.IdProviders Class
LongIdProvider<TDbContext, TEntity> Duna.Libs.Core.IdProviders Class
Int32IdProvider<TDbContext, TEntity> Duna.Libs.Core.IdProviders Class
NumericIdProvider<TDbContext, TEntity, TId> Duna.Libs.Core.IdProviders Class
SnowflakeIdProvider<TDbContext, TEntity> Duna.Libs.Core.IdProviders Class
HybridNodeIdProvider<TDbContext, TEntity> Duna.Libs.Core.IdProviders Class
DisabledIdProvider<TDbContext, TEntity, TId> Duna.Libs.Core.IdProviders Class
UniqueIdGenerator Duna.Libs.Core.IdProviders Class (static)
LongIdGenerator Duna.Libs.Core.IdProviders Class
SnowflakeIdGenerator Duna.Libs.Core.IdProviders Class
LongTreeIdExtensions Duna.Libs.Core.IdProviders Class (static)
StringTreeIdExtensions Duna.Libs.Core.IdProviders Class (static)
DatabaseProvider Duna.Libs.Core.Enums Enum
AccessLevel Duna.Libs.Core.Enums Enum
DatabaseExtensions Duna.Libs.Core Class (static)
DatabaseProviderDetector Duna.Libs.Core Class (static)
SchemaHelper Duna.Libs.Core Class (static)
SqlTypeHelper Duna.Libs.Core Class (static)
RingLoadbalancer<TObject> Duna.Libs.Core Class
Coder Duna.Libs.Core Class
Converter Duna.Libs.Core Class (static)
TaskExtensions Duna.Libs.Core Class (static)
ExpressionsExtensions Duna.Libs.Core Class (static)
ITreeExtensions Duna.Libs.Core Class (static)
SortExpression Duna.Libs.Core.Sort Class
SortExpressionElement Duna.Libs.Core.Sort Class
SortExpressionElementType Duna.Libs.Core.Sort Enum
SortService Duna.Libs.Core.Sort Class (static)
DbContextEventBusBase Duna.Libs.Core.EventBus Class
EventBusAdaptor Duna.Libs.Core.EventBus Class
EventBusMessageService Duna.Libs.Core.EventBus Class
EventBusConfigs Duna.Libs.Core.EventBus Class
EventBusConnectionConfigs Duna.Libs.Core.EventBus Class
EventBusQueueConfigs Duna.Libs.Core.EventBus Class
EventBusMessage Duna.Libs.Core.EventBus Class
EventBusMessagePublish Duna.Libs.Core.EventBus Class
EventBusMessageConsumed Duna.Libs.Core.EventBus Class
EventBusMessageRequest Duna.Libs.Core.EventBus Class
EventBusMessageMapper Duna.Libs.Core.EventBus Class
EventBusMessageStatus Duna.Libs.Core.EventBus Enum
IEventBusMessage Duna.Libs.Core.EventBus Interface
DequeueHelper Duna.Libs.Core.EventBus Class (static)
DbMigrationHelper Duna.Libs.Core.EventBus Class (static)
ConnectionStatus Duna.Libs.Core.EventBus Enum
ExceptionBase Duna.Libs.Core.Exceptions Class (abstract)
ErrorCode Duna.Libs.Core.Exceptions Class (static)
IPermission<TAccessId> Duna.Libs.Core.Security Interface
IPermission<TAccessId, TAccessLevel> Duna.Libs.Core.Security Interface
PermissionEncoder Duna.Libs.Core.Security Class (static)
Cryptography Duna.Libs.Core.Security Class (static)
CaptchaCreator Duna.Libs.Core.Security Class (static)
Copier Duna.Libs.Core.Auxf Class (static)
EnumExtensions Duna.Libs.Core.Auxf Class (static)
ChecksumGenerator Duna.Libs.Core.Auxf Class (static)
ImageGenerator Duna.Libs.Core.Graphics Class
BitmapHelper Duna.Libs.Core.Graphics Class
HierarchyHelper Duna.Libs.Core.Tree Class (static)
Product 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (2)

Showing the top 2 NuGet packages that depend on Duna.Libs.Core:

Package Downloads
Duna.Libs.Web

Dunasoft Libraries Web Utilities

Duna.Libs.Utils

Dunasoft Libraries Utilities

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.8 134 5/26/2026
1.0.7 105 5/25/2026
1.0.6 111 5/25/2026
1.0.5 106 5/25/2026
1.0.4 103 5/25/2026
1.0.3 126 5/22/2026
1.0.2 129 5/18/2026
1.0.1 136 5/15/2026
1.0.0 125 5/12/2026
0.1.6 93 5/12/2026
0.1.5 118 5/11/2026
0.1.4 140 5/4/2026
0.1.3 123 5/4/2026
0.1.2 119 5/4/2026
0.1.1 122 4/26/2026
0.1.0 109 4/26/2026
0.0.59 122 3/27/2026
0.0.58 207 2/23/2026
0.0.57 144 2/23/2026
0.0.56 161 2/22/2026
Loading failed