PocketBaseClient 0.3.0
See the version list below for details.
dotnet add package PocketBaseClient --version 0.3.0
NuGet\Install-Package PocketBaseClient -Version 0.3.0
<PackageReference Include="PocketBaseClient" Version="0.3.0" />
paket add PocketBaseClient --version 0.3.0
#r "nuget: PocketBaseClient, 0.3.0"
// Install PocketBaseClient as a Cake Addin #addin nuget:?package=PocketBaseClient&version=0.3.0 // Install PocketBaseClient as a Cake Tool #tool nuget:?package=PocketBaseClient&version=0.3.0
Warning: This project is in active development. Things described bellow could change.
PocketBaseClient-csharp
PocketBaseClient-csharp is a Client library in C# for interacting with a particular PocketBase application: It maps all the PocketBase Collections and Registries to Objects and structures to work in c#
Set up an ORM to access your PocketBase application data in less than 1 minute with pbcodegen, the PocketBaseClient CodeGenerator
Installation
The only thing that you need is pbcodegen. Download the latest version from the Releases section, and follow the process.
In less than 1 minute, you will have a customized ORM in c# for your PocketBase application, your own PocketBaseClient.
More information in pbcodegen
Overview
Code Generator
pbcodegen generates your PocketBaseClient, the ORM for your PocketBase application in less than 1 munute:
It connects to your PocketBase (with admin rights) and generates a c# project for you, with all the logic for the management of comunications with server and persistence of objects. Exposes custom classes and structures that maps to your Collections and Registries.
In your .NET projects, you will only need a reference to this generated project to access your PocketBase application.
See more information in pbcodegen
What PocketBaseClient can do
PocketBaseClient uses the classes generated to map data and operate with a particular PocketBase application:
Creating enums for fields of type "Select".
Assigning validation rules for all fields with restrictions.
Mapping related registry Ids to relations between objects.
Managing the comunication with PocketBase server.
Caching objects in memory to minimize the api calls.
Getting unknown object data from server when needed (lazy load).
Registering changed objects that are in memory and not updated to server.
Registering new objects in memory that will map to a new registry in the server.
Exposing a simple fluent Filter adapted to the objects
CRUD options with objects
...
Is a real ORM for a concrete PocketBase application.
Ok, it sounds good, but, how really works?
How it works
The magic happens at the junction of PocketBaseClient library and the code generated with PocketBaseClient.CodeGenerator:
Every Collection has its own class with internal cache for its Registries
Registries have their own class, mapping fields to properties
Each Registry field is mapped to the correct type, enum or class
Collections and Model Registries
Each collection has its own class, and internally mantains a cache for its objects. Every object in a Collection is (or will be) a Registry in the mapped PocketBase Collection.
Every registry belongs to a Collection. This is translated as every Modeled object belongs to a Collection: also new ones (that are only in memory, without a Registry in the server yet).
When is created a new object that would become a Registry in PocketBase, it is registered automatically to the correct Collection.
Every change in an object that maps to a registry, marks the object as "modified".
The changes in memory of the objects can be discarded or saved.
There is only a function Save
to save objects to server, it does not matter if the Registry is to be created or updated.
Cache
Every time a Registry is downloaded from PocketBase, it will be cached for the containing Collection.
Every time is created a new object of the collection, is cached: The new elements are also cached and marked as they are new
When an element is requested, by default it will try to serve it from memory and if is not cached, from server. This behavior can be modified at every call.
Methods and Properties
Of any Collection
Information about the Collection (properties
Id
,Name
andSystem
)Get all elements of the collection (property
Items
and methodGetItems
)Get an element by Id (methods
GetById
andGetByIdAsync
)Save elements (create or update) to server (methods
Save
andSaveAsync
)Discard changes not saved to server (method
DiscardChanges
)Delete elements (methods
Delete
,DeleteAsync
,DeleteById
andDeleteByIdAsync
)Query elements (property
Filter
). This will be explained below
Of any Model
Each field has its own Property of the correct type
Validate object data (methods
Validate
andIsValid
)Reload object with data in server (methods
Reload
andReloadAsync
)Discard local changes of the object (method
DiscardChanges
)Save element to server (create or update) (methods
Save
andSaveAsync
)Delete the element (methods
Delete
andDeleteAsync
)
And other advanced:
Information about collection (properties
Collection
,CollectionId
andCollectionName
)Information about object status (property
Metadata_
)Check if two objects references the same registry (method
IsSame
)Update the object with data of other (method
UpdateWith
)
Querying
(Documentation incomplete)
Usage
(Documentation incomplete)
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. 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. |
-
net6.0
- pocketbase-csharp-sdk (>= 1.0.0-prerelease)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.