Sparcpoint.Extensions.Azure
1.6.7
See the version list below for details.
dotnet add package Sparcpoint.Extensions.Azure --version 1.6.7
NuGet\Install-Package Sparcpoint.Extensions.Azure -Version 1.6.7
<PackageReference Include="Sparcpoint.Extensions.Azure" Version="1.6.7" />
paket add Sparcpoint.Extensions.Azure --version 1.6.7
#r "nuget: Sparcpoint.Extensions.Azure, 1.6.7"
// Install Sparcpoint.Extensions.Azure as a Cake Addin #addin nuget:?package=Sparcpoint.Extensions.Azure&version=1.6.7 // Install Sparcpoint.Extensions.Azure as a Cake Tool #tool nuget:?package=Sparcpoint.Extensions.Azure&version=1.6.7
Sparcpoint.Extensions.Azure
[TODO]
Installation
Package Manager Console
Install-Package Sparcpoint.Extensions.Azure
.NET Core CLI
dotnet add package Sparcpoint.Extensions.Azure
Usage
Table Storage
The table storage extensions allow for easy saving and loading from table storage using the JsonTableEntity
. JsonTableEntity
itself is NOT an ITableEntity
but if used with the appropriate extensions included, allows for quick upserting. Additional features are included as well, utilizing attributes to define PartitionKey
/ RowKey
formats.
First, you must inherit from JsonTableEntity
and add whatever properties you would like to the entity. All basic types will use native table storage types while complex types will be serialized into JSON and stored in a string type.
Optionally, you can add a TableKeyAttribute
to specify how the PartitionKey
and RowKey
are formed. These use properties names to form the resulting keys. Otherwise, you must specify PartitionKey
and RowKey
on the object manually.
[TableKey(":subscriptions", "{SubscriptionName}")]
public class SubscriptionEntity : JsonTableEntity
{
public string SubscriptionName { get; set; }
public PaymentDetails PaymentMethod { get; set; }
public DateTime CreatedTimestamp { get; set; } = DateTime.UtcNow;
}
public class PaymentDetails
{
public string Name { get; set; }
public string CardNumber { get; set; }
public int CardExpirationYear { get; set; }
public int CardExpirationMonth { get; set; }
public string SecurityCode { get; set; }
}
In order to save this to a table you need a TableClient
. Then use the UpsertEntityAsync<T>
extension provided.
public void Main(string[] args)
{
string connectionString = "<your connection string>";
string tableName = "<your table name>";
var client = new TableClient(connectionString, tableName);
var response = await client.UpsertEntityAsync(new SubscriptionEntity
{
SubscriptionName = "Default",
PaymentMethod = new PaymentDetails
{
Name = "John Smith",
CardNumber = "1111000011110000",
CardExpirationYear = 2025,
CardExpirationMonth = 12,
SecurityCode = 100
}
});
}
And that is all that is needed to insert / update your entity. The result will be a table with the following values:
Column | Value |
---|---|
PartitionKey | ":subscriptions" |
RowKey | "Default" |
SubscriptionName | "Default" |
PaymentMethod | "{"name":"John Smith","cardNumber":"1111000011110000","cardExpirationYear":2025,"cardExpirationMonth":12,"securityCode":100}" |
CreatedTimestamp | 2024-04-23T23:10:03Z |
Timestamp | 2024-04-23T23:10:03Z |
ETag | [Generated Value] |
Extension Methods
Insert / Update an Entity
Task<Azure.Response> UpsertEntityAsync<T>(this TableClient client, T entity, TableUpdateMode updateMode = TableUpdateMode.Merge, CancellationToken cancelToken = default) where T : JsonTableEntity
Update an Entity Only (must exist)
Task<Azure.Response> UpdateEntityAsync<T>(this TableClient client, T entity, ETag etag, TableUpdateMode updateMode = TableUpdateMode.Merge, CancellationToken cancelToken = default) where T : JsonTableEntity
Insert an Entity Only (cannot exist)
Task<Azure.Response> AddEntityAsync<T>(this TableClient client, T entity, CancellationToken cancelToken = default) where T : JsonTableEntity
Query using a standard table query filter MSDN / Storage Services / Querying tables and entities
IAsyncEnumerable<T> QueryAsync<T>(this TableClient client, string filter, int? maxPerPage = null, IEnumerable<string>? select = null, [EnumeratorCancellation] CancellationToken cancelToken = default) where T : JsonTableEntity, new()
Perform a partition query based on TableKeyAttribute
The parameters
object is used to format the PartitionKey
property of the TableKeyAttribute
of T
. So if the partition key format is :groups:{GroupName}
, then the parameters
object should have a GroupName
property included.
IAsyncEnumerable<T> PartitionQueryAsync<T>(this TableClient client, object? parameters = null, int? maxPerPage = null, IEnumerable<string>? select = null, CancellationToken cancelToken = default) where T : JsonTableEntity, new()
Perform a partition query based on a string
value
IAsyncEnumerable<T> PartitionQueryAsync<T>(this TableClient client, string partitionKey, int? maxPerPage = null, IEnumerable<string>? select = null, CancellationToken cancelToken = default) where T : JsonTableEntity, new()
Retrieve an entity, if it exists, based on TableKeyAttribute
The parameters
object is used to format the PartitionKey
property and the RowKey
property of the TableKeyAttribute
of T
. So if the partition key format is :subscriptions:{SubscriptionName}
and the row key format is :users:{UserName}
then the parameters
object should have both a SubscriptionName
property and UserName
property.
Task<T?> GetEntityIfExistsAsync<T>(this TableClient client, object? parameters = null, IEnumerable<string>? select = null, CancellationToken cancelToken = default) where T : JsonTableEntity, new()
Retrieve an entity, if it exists, based on string
values
Task<T?> GetEntityIfExistsAsync<T>(this TableClient client, string partitionKey, string rowKey, IEnumerable<string>? select = null, CancellationToken cancelToken = default) where T : JsonTableEntity, new()
Retrieve an entity, based on TableKeyAttribute
The parameters
object is used to format the PartitionKey
property and the RowKey
property of the TableKeyAttribute
of T
. So if the partition key format is :subscriptions:{SubscriptionName}
and the row key format is :users:{UserName}
then the parameters
object should have both a SubscriptionName
property and UserName
property.
Task<T> GetEntityAsync<T>(this TableClient client, object? parameters = null, IEnumerable<string>? select = null, CancellationToken cancelToken = default) where T : JsonTableEntity, new()
Retrieve an entity, based on string
values
Task<T> GetEntityAsync<T>(this TableClient client, string partitionKey, string rowKey, IEnumerable<string>? select = null, CancellationToken cancelToken = default) where T : JsonTableEntity, new()
Bulk add entities
Task BulkAddAsync<T>(this TableClient client, IEnumerable<T> items, int chunkSize = 25, CancellationToken cancelToken = default) where T : JsonTableEntity
Bulk Insert / Update Entities (Replace)
Task BulkUpsertReplaceAsync<T>(this TableClient client, IEnumerable<T> items, int chunkSize = 25, CancellationToken cancelToken = default) where T : JsonTableEntity
Bulk Insert / Update Entities (Merge Properties)
Task BulkUpsertMergeAsync<T>(this TableClient client, IEnumerable<T> items, int chunkSize = 25, CancellationToken cancelToken = default) where T : JsonTableEntity
Examples
[TODO]
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. |
-
net8.0
- Azure.Data.Tables (>= 12.8.3)
- Azure.Storage.Blobs (>= 12.19.1)
- SmartFormat (>= 3.3.2)
- Sparcpoint.Extensions.Objects (>= 1.6.7)
- Sparcpoint.Extensions.Permissions (>= 1.6.7)
- Sparcpoint.Extensions.Resources (>= 1.6.7)
- System.Text.Json (>= 8.0.3)
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.6.16 | 1,023 | 6/5/2024 |
1.6.15 | 112 | 5/19/2024 |
1.6.14 | 109 | 5/19/2024 |
1.6.13 | 238 | 5/17/2024 |
1.6.12 | 106 | 5/17/2024 |
1.6.11 | 111 | 5/16/2024 |
1.6.10 | 117 | 5/16/2024 |
1.6.9 | 109 | 5/16/2024 |
1.6.8 | 113 | 5/16/2024 |
1.6.7 | 111 | 5/16/2024 |
1.6.6 | 118 | 5/15/2024 |
1.6.5 | 113 | 5/12/2024 |
1.6.4 | 147 | 4/30/2024 |
1.6.3 | 124 | 4/27/2024 |
1.6.2 | 112 | 4/22/2024 |
1.6.1 | 111 | 4/22/2024 |
1.6.0 | 117 | 4/21/2024 |
1.5.3 | 126 | 4/19/2024 |
1.5.2 | 108 | 4/18/2024 |
1.5.0 | 107 | 4/17/2024 |
1.4.0 | 103 | 4/3/2024 |
Permissions