AzureEntityServices.Blobs.Extensions.DependencyInjection
1.0.3
See the version list below for details.
dotnet add package AzureEntityServices.Blobs.Extensions.DependencyInjection --version 1.0.3
NuGet\Install-Package AzureEntityServices.Blobs.Extensions.DependencyInjection -Version 1.0.3
<PackageReference Include="AzureEntityServices.Blobs.Extensions.DependencyInjection" Version="1.0.3" />
paket add AzureEntityServices.Blobs.Extensions.DependencyInjection --version 1.0.3
#r "nuget: AzureEntityServices.Blobs.Extensions.DependencyInjection, 1.0.3"
// Install AzureEntityServices.Blobs.Extensions.DependencyInjection as a Cake Addin #addin nuget:?package=AzureEntityServices.Blobs.Extensions.DependencyInjection&version=1.0.3 // Install AzureEntityServices.Blobs.Extensions.DependencyInjection as a Cake Tool #tool nuget:?package=AzureEntityServices.Blobs.Extensions.DependencyInjection&version=1.0.3
Azure Entity Services
Manage your entities in Azure Storage without tears !
What is Azure Entity Services?
Azure Entity Services is an abstraction layer library which help you to store, query, update any entities classes in Azure Storage Table and Blob
This library was written in C# Core and based on official Azure SDK
Focused on performance and productity
The library was designed to offer optimized performance and memory consumption to allow batched reading and writing operations on large entities store
Moreover, abstraction layers for Table and Blob will simplify implementation of your applications and provide simple and fast integration
This will allow you to focus on you application business logic
What the meaning of Entity ?
An entity class is essentially an object wrapper for a database table.
Attributes of an entity are mapped automatically into storage table or metadata of a blob Managing your entities by using various basic and advanced operations such as: read, insert, modify, remove, paginate, bulk read and bulk add/update
With this Library you can map any data entities (C# class) into a table or a blob item
EntityTableClient features
based on Azure.Data.Tables sdk library
- You can manage any generic C# entities without Azure SDK dependencies: no needs to inehrit from ITableEntity or TableEntity neither
- You can extend entity properties with dynamic properties (to simplify search and indexing nested objects)
- You can tag any entity or dynamic properties to be indexed for faster search for tables with large amount of items
- Handle more primitive types that are not supported by default in azure table storage
- Lightweight and extensible query expression builder, used to build advanced filter expressions and indexed tags
- Observe entity changes, subscribe and apply any side effects like CQRS patterns
- It Could be injected and configured with Microsoft Azure extensions: AzureClientFactoryBuilder
How it works?
EntityTableClient bind any classes (C# entities) to Entity table storage (IEntityTableClient)
This binding allows to have more control when entity was stored of readed from the table storage
Internally, it use Azure storage ETG feature (entity transaction group) to keep indexed tag synchronized with the main entity.
EntityTableClient configuration example
//==============Entity options and configuratin section====================================================
//set here for your technical stuff: table name, connection, parallelization
var entityClient = EntityTableClient.Create<PersonEntity>(
options =>
{
options.ConnectionString = TestEnvironment.ConnectionString;
options.TableName = $"{nameof(PersonEntity)}";
options.CreateTableIfNotExists = true;
}
//set here your entity behavior dynamic fields, tags, observers
, config =>
{
config
.SetPartitionKey(p => p.TenantId)
.SetPrimaryKeyProp(p => p.PersonId)
.IgnoreProp(p => p.OtherAddress)
//add tag to generate indexed and sorted entities through rowKey
.AddTag(p => p.Created)
.AddTag(p => p.LastName)
.AddTag(p => p.Distance)
.AddTag(p => p.Enabled)
//add computed props to store and compute dynamically additional fields of the entity
.AddComputedProp("_IsInFrance", p => p.Address?.State == "France")
.AddComputedProp("_MoreThanOneAddress", p => p.OtherAddress?.Count > 1)
.AddComputedProp("_CreatedNext6Month", p => p.Created > DateTimeOffset.UtcNow.AddMonths(-6))
.AddComputedProp("_FirstLastName3Chars", p => p.LastName?.ToLower()[..3])
//computed props could also be tagged
.AddTag("_FirstLastName3Chars")
//add an entity oberver to track entity changes and apply any action (projection, logging, etc.)
.AddObserver("EntityLoggerObserver", new EntityLoggerObserver<PersonEntity>());
});
//===============================================================================================
Sample projects
Performance tests Sample console based on a table with 1.5 million of entities and 5 partitions (standard storageV2)
EntityBlobClient package features
Based on Azure.Data.Blobs sdk library
- Like EntityTableClient, you can manage any generic C# entities without Azure SDK dependencies
- Entities properties was mapped and stored directly into Blob metadata, no need to maintain a relation with blob and any additional tables
- You can tag any entity or dynamic properties to be indexed natively by Azure Blob Storage service
- It use also same query expression builder of EntityTableClient to query Blobs inside a container
- It could be injected and configured with Microsoft Azure extensions: AzureClientFactoryBuilder
- Abstract and simplify Blob reference path by using dynamic path delegate based on your entity properties (SetBlobPath and SetBlobName)
EntityTableClient configuration example
var options = new EntityBlobClientOptions($"{nameof(DocumentEntity)}Container".ToLower());
//Configure entity binding in the table storage
var client = EntityBlobClient.Create<DocumentEntity>(TestEnvironment.ConnectionString)
.Configure(options, config =>
config
.SetBlobContentProp(p => p.Content)
.SetBlobPath(p => $"{p.Created:yyyy/MM/dd}")
.SetBlobName(p => $"{p.Name}-{p.Reference}.{p.Extension}")
.AddTag(p => p.Reference)
.AddTag(p => p.Name));
Upcoming:
- Expand test coverage
- Add more validation rules according to azure storage limitations
- Gradually improvement of EntityBlobClient
- More description of the internal implementation of this library
- Entity migration services, usefull for data or structural migration
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. 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. |
.NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.1 is compatible. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.1
- AzureEntityServices.Blobs (>= 1.0.3)
- Microsoft.Extensions.Azure (>= 1.6.0)
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 |
---|---|---|
1.1.3 | 112 | 4/17/2024 |
1.1.2 | 249 | 11/21/2023 |
1.1.2-preview.0.3 | 68 | 11/20/2023 |
1.1.2-preview.0.1 | 59 | 9/21/2023 |
1.1.1 | 153 | 7/31/2023 |
1.1.1-preview.0.13 | 90 | 7/28/2023 |
1.1.1-preview.0.12 | 92 | 7/26/2023 |
1.1.0 | 166 | 7/19/2023 |
1.0.52-preview.0.1 | 85 | 5/26/2023 |
1.0.51 | 161 | 5/22/2023 |
1.0.6-preview.0.1 | 81 | 5/22/2023 |
1.0.5 | 149 | 5/2/2023 |
1.0.5-preview.0.2 | 94 | 4/20/2023 |
1.0.5-preview.0.1 | 85 | 4/19/2023 |
1.0.4 | 183 | 4/13/2023 |
1.0.4-preview.0.3 | 90 | 4/13/2023 |
1.0.4-preview.0.2 | 86 | 4/6/2023 |
1.0.4-preview.0.1 | 96 | 3/29/2023 |
1.0.3 | 205 | 3/28/2023 |
1.0.3-preview.0.3 | 101 | 3/16/2023 |
1.0.2 | 250 | 2/20/2023 |
1.0.2-preview.0.4 | 130 | 2/10/2023 |
1.0.2-preview.0.2 | 111 | 2/9/2023 |
1.0.2-preview.0.1 | 105 | 2/9/2023 |
1.0.1 | 271 | 2/8/2023 |
1.0.1-preview.0.13 | 98 | 2/7/2023 |
1.0.1-preview.0.12 | 96 | 2/6/2023 |
1.0.1-preview.0.11 | 103 | 2/6/2023 |
1.0.0-preview.0.5 | 84 | 7/19/2023 |
1.0.0-preview.0.4 | 81 | 6/6/2023 |
1.0.0-preview.0.3 | 81 | 6/6/2023 |