Elephant.Database
0.7.0
There is a newer version of this package available.
See the version list below for details.
See the version list below for details.
dotnet add package Elephant.Database --version 0.7.0
NuGet\Install-Package Elephant.Database -Version 0.7.0
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="Elephant.Database" Version="0.7.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Elephant.Database" Version="0.7.0" />
<PackageReference Include="Elephant.Database" />
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 Elephant.Database --version 0.7.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Elephant.Database, 0.7.0"
#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 Elephant.Database@0.7.0
#: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=Elephant.Database&version=0.7.0
#tool nuget:?package=Elephant.Database&version=0.7.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
About
Contains various EF Core related database helpers.
DbSetExtensions
Clear(): Remove all entities from that DbSet.
GenericCrudRepository
virtual Task<List<TEntity>> All(CancellationToken cancellationToken);
// Example usage: await myRepository.All(1, QueryTrackingBehavior.NoTracking, CancellationToken.None, x => x.CustomersCrossOrders, x => x.CustomersCrossAddresses);
virtual Task<List<TEntity>> All(QueryTrackingBehavior queryTrackingBehavior = QueryTrackingBehavior.TrackAll, CancellationToken cancellationToken = default, params Expression<Func<TEntity, object>>[] includes);
virtual Task<TEntity?> ById(object id, CancellationToken cancellationToken);
virtual Task<int> Count(CancellationToken cancellationToken);
virtual Task<int> Count(Expression<Func<TEntity, bool>> predicate, CancellationToken cancellationToken);
virtual void Delete(object id);
virtual Task<ResponseWrapper<int>> DeleteAndSave(object id, CancellationToken cancellationToken);
virtual Task<bool> HasAny(CancellationToken cancellationToken);
virtual Task<bool> HasAny(Expression<Func<TEntity, bool>> predicate, CancellationToken cancellationToken);
virtual Task Insert(TEntity obj, CancellationToken cancellationToken);
virtual Task Insert(ICollection<TEntity> objects, CancellationToken cancellationToken);
virtual Task<ResponseWrapper<int>> InsertAndSave(TEntity obj, CancellationToken cancellationToken);
virtual Task<ResponseWrapper<int>> Save(CancellationToken cancellationToken);
virtual void Update(TEntity obj);
virtual void Update(ICollection<TEntity> objects);
virtual Task<ResponseWrapper<int>> UpdateAndSave(TEntity obj, CancellationToken cancellationToken);
virtual Task DeleteAllAndResetAutoIncrement(CancellationToken cancellationToken = default, string schema = "dbo");
// Transactions:
virtual Task<IDbContextTransaction> BeginTransactionAsync(CancellationToken cancellationToken);
virtual Task CommitTransactionAsyncAndDispose(IDbContextTransaction? transaction, CancellationToken cancellationToken);
virtual Task RollbackTransactionAsyncAndDispose(IDbContextTransaction? transaction, CancellationToken cancellationToken);
Example IContext transaction implementation
// Usings
using Elephant.Database;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Storage;
// Inside your DbContext or IdentityDbContext class:
/// <inheritdoc/>
public async Task<IDbContextTransaction> BeginTransaction(CancellationToken cancellationToken)
{
return await Database.BeginTransactionAsync(cancellationToken);
}
/// <inheritdoc/>
public async Task CommitTransactionAndDispose(IDbContextTransaction? transaction, CancellationToken cancellationToken)
{
if (transaction == null)
return;
await Database.CommitTransactionAsync(cancellationToken);
await transaction.DisposeAsync();
}
/// <inheritdoc/>
public async Task RollbackTransactionAndDispose(IDbContextTransaction? transaction, CancellationToken cancellationToken)
{
if (transaction == null)
return;
await Database.RollbackTransactionAsync(cancellationToken);
await transaction.DisposeAsync();
}
Example transaction in your service
using (IDbContextTransaction transaction = await _customerRepository.BeginTransaction(cancellationToken))
{
try
{
// Your code here.
}
catch (Exception exception)
{
_logger.LogError($"An error occurred. Rolling back changes. Exception: {exception}".);
await _customerRepository.RollbackTransactionAndDispose(transaction, cancellationToken);
return;
}
// Perform CRUD actions or whatever.
await _customerRepository.Save(cancellationToken);
await _customerRepository.CommitTransactionAndDispose(transaction, cancellationToken);
}
GenericCrudIdRepository
All methods as listed in GenericCrudRepository plus:
virtual Task<T?> ById(int id, QueryTrackingBehavior queryTrackingBehavior = QueryTrackingBehavior.TrackAll, CancellationToken cancellationToken = default, params Expression<Func<T, object>>[] includes);
virtual Task<bool> HasId(int id, CancellationToken cancellationToken);
virtual Task<int> HighestId(CancellationToken cancellationToken);
virtual Task<int> LowestId(CancellationToken cancellationToken);
QueryableExtensions
IQueryable<T> AsTracking<T>(this IQueryable<T> source, bool isTracked) { .. }
IQueryable<T> OrderByColumn<T>(this IQueryable<T> source, string columnName, ListSortDirection sortDirection = ListSortDirection.Ascending) { .. }
IQueryable<T> OrderByColumn<T>(this IQueryable<T> source, string columnName, bool isAscending = true) { .. }
Upgrade instructions
0.6.3 → 0.7.0
Implement ExecuteSqlAsync(..) in your DbContext. Example implementation in your DbContext that inherits from IContext:
/// <inheritdoc/>
public async Task<int> ExecuteSqlAsync(FormattableString sql, CancellationToken cancellationToken = default)
{
return await Database.ExecuteSqlAsync(sql, cancellationToken);
}
| 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 is compatible. 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. 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. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net6.0
- Elephant.Types (>= 4.0.2)
- Elephant.Types.Interfaces (>= 3.0.0)
- Microsoft.AspNetCore.Http (>= 2.2.2)
- Microsoft.EntityFrameworkCore (>= 7.0.1)
-
net7.0
- Elephant.Types (>= 4.0.2)
- Elephant.Types.Interfaces (>= 3.0.0)
- Microsoft.AspNetCore.Http (>= 2.2.2)
- Microsoft.EntityFrameworkCore (>= 7.0.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Add IContext.ExecuteSqlAsync(..).