Vorn.Entities.Interface
9.1.2
dotnet add package Vorn.Entities.Interface --version 9.1.2
NuGet\Install-Package Vorn.Entities.Interface -Version 9.1.2
<PackageReference Include="Vorn.Entities.Interface" Version="9.1.2" />
<PackageVersion Include="Vorn.Entities.Interface" Version="9.1.2" />
<PackageReference Include="Vorn.Entities.Interface" />
paket add Vorn.Entities.Interface --version 9.1.2
#r "nuget: Vorn.Entities.Interface, 9.1.2"
#:package Vorn.Entities.Interface@9.1.2
#addin nuget:?package=Vorn.Entities.Interface&version=9.1.2
#tool nuget:?package=Vorn.Entities.Interface&version=9.1.2
Vorn.Entities.Interface
Vorn.Entities.Interface delivers reusable Blazor component bases that understand the entity client contract. The components encapsulate SignalR lifecycle management, paging/search, dialogs, and localization so feature teams can build rich CRUD UIs with minimal boilerplate.
Prerequisites
Add the package to your Blazor project together with the client library and UI dependencies:
dotnet add package Vorn.Entities.Interface
dotnet add package Vorn.Entities.Client
dotnet add package MudBlazor
The components rely on abstractions from Vorn.Entities.Client.SignalR and confirmation dialogs in Vorn.Common.Interface (for the built-in ConfirmDialog/StrictConfirmDialog).
Component catalog
| Component | Purpose |
|---|---|
EntityClientComponentBase<TClient, TDto, TDescriptorDto> |
Core base class that handles hub connections, busy/error state, notification listening, and helper methods (AddAsync, UpdateAsync, RemoveByIdAsync, etc.). |
EntityGridBase<TClient, TDto, TDescriptorDto> |
Extends the base with MudBlazor grid integration, paging/search, and debounced filtering for list views. |
EntityEditorBase<TClient, TDto, TDescriptorDto, TFormModel> |
Adds form orchestration, dialog prompts, and create/update/delete flows for modal editors or detail panes. |
All components expect DTOs/descriptors derived from the common package (EntityDto, EntityDescriptorDto) and a typed client inheriting from EntityClient<TDto, TDescriptorDto>.
Building a list view
Derive from EntityGridBase to get paging, search, and SignalR-driven refresh out of the box:
@inherits DocumentGridBase
<MudDataGrid Items="Items" ServerData="OnGridServerData" Loading="IsBusy">
<Columns>
<PropertyColumn Property="@nameof(DocumentDto.Title)" Title="Title" />
<TemplateColumn>
<MudButton Variant="Variant.Text" OnClick="() => RowClicked.InvokeAsync(context)">
Open
</MudButton>
</TemplateColumn>
</Columns>
</MudDataGrid>
@code {
public sealed class DocumentGridBase
: EntityGridBase<DocumentClient, DocumentDto, DocumentDescriptorDto>
{
protected override void ApplyGridStateToDescriptor(GridState<DocumentDto> state)
=> Descriptor.Search = state.SearchTerms;
}
}
The base class keeps Descriptor.Skip/Take synchronized with MudBlazor’s paging events and refreshes automatically when EntityNotification events arrive from the server.
Implementing an editor dialog
Use EntityEditorBase to integrate validation, localization, and confirmation dialogs:
public sealed class DocumentEditorBase
: EntityEditorBase<DocumentClient, DocumentDto, DocumentDescriptorDto, DocumentFormModel>
{
protected override DocumentFormModel CreateEmptyFormModel() => new();
protected override DocumentFormModel MapToFormModel(DocumentDto entity)
=> new() { Title = entity.Title };
protected override DocumentDto MapToDto(DocumentFormModel form)
=> Value is null ? new() { Title = form.Title } : Value with { Title = form.Title };
protected override string GetDisplayName(DocumentDto entity) => entity.Title;
}
SaveAsync and DeleteAsync are already wired to the underlying client, and the component surfaces IsBusy/ErrorMessage so your Razor markup can provide feedback.
Handling notifications manually
Override OnNotificationAsync on the base component if you need to react to change events directly:
protected override Task OnNotificationAsync(EntityNotification notification)
{
Snackbar.Add($"{notification.Args.EntityName} {notification.Args.Operation}");
return RefreshAsync();
}
EntityClientComponentBase automatically subscribes/unsubscribes to notifications as the component is initialized or disposed, and it exposes StopClientOnDispose when you need to control SignalR lifetime.
Tips
- Inject
EntityInterceptionConfigto scope user/time metadata across a batch of operations without touching every call site. - Call
SafeRunAsyncfrom derived classes when performing read operations that should toggleIsBusyand capture errors. - Pair grids and editors within the same page by sharing the descriptor instance—filters applied in the grid automatically flow to editor refreshes.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. 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. |
-
net8.0
- Vorn.Entities.Client (>= 9.1.2)
- Vorn.Interface (>= 9.1.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 9.1.2 | 222 | 11/16/2025 |
| 9.1.1 | 165 | 11/15/2025 |
| 9.0.2 | 236 | 11/10/2025 |
| 9.0.1 | 101 | 11/9/2025 |
| 8.8.0 | 192 | 11/2/2025 |
| 8.7.1 | 154 | 10/29/2025 |
| 8.7.0 | 179 | 10/27/2025 |
| 8.6.2 | 147 | 10/27/2025 |
| 8.6.1 | 141 | 10/25/2025 |
| 8.6.0 | 135 | 10/25/2025 |
| 8.6.0-rc4 | 134 | 10/25/2025 |
| 8.6.0-rc3 | 158 | 10/24/2025 |
| 8.6.0-rc2 | 178 | 10/23/2025 |
| 8.6.0-rc1 | 173 | 10/20/2025 |
| 8.5.1 | 113 | 10/18/2025 |
| 8.5.0 | 126 | 10/18/2025 |
| 8.4.2 | 167 | 10/16/2025 |
| 8.4.1 | 171 | 10/16/2025 |
| 8.4.0 | 184 | 10/16/2025 |
| 8.3.5 | 172 | 10/15/2025 |
| 8.3.4 | 173 | 10/15/2025 |
| 8.3.3 | 185 | 10/15/2025 |
| 8.3.1 | 178 | 10/14/2025 |
| 8.3.0 | 180 | 10/14/2025 |
| 8.3.0-rc4 | 170 | 10/14/2025 |
| 8.3.0-rc3 | 177 | 10/13/2025 |
| 8.3.0-rc2 | 169 | 10/13/2025 |
| 8.3.0-rc1 | 178 | 10/13/2025 |
| 8.2.0-rc9 | 175 | 10/13/2025 |
| 8.2.0-rc8 | 191 | 10/13/2025 |
| 8.2.0-rc7 | 165 | 10/12/2025 |
| 8.2.0-rc3 | 157 | 10/12/2025 |
| 8.2.0-rc10 | 170 | 10/13/2025 |
| 5.0.1-preview.0.1 | 131 | 10/8/2025 |