Elephant.Database
0.9.0
See the version list below for details.
dotnet add package Elephant.Database --version 0.9.0
NuGet\Install-Package Elephant.Database -Version 0.9.0
<PackageReference Include="Elephant.Database" Version="0.9.0" />
<PackageVersion Include="Elephant.Database" Version="0.9.0" />
<PackageReference Include="Elephant.Database" />
paket add Elephant.Database --version 0.9.0
#r "nuget: Elephant.Database, 0.9.0"
#:package Elephant.Database@0.9.0
#addin nuget:?package=Elephant.Database&version=0.9.0
#tool nuget:?package=Elephant.Database&version=0.9.0
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<IResult<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<IResult<int>> InsertAndSave(TEntity obj, CancellationToken cancellationToken);
virtual Task<int> Save(CancellationToken cancellationToken);
virtual void Update(TEntity obj);
virtual void Update(ICollection<TEntity> objects);
virtual Task<IResult<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
// 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);
virtual Task<int> NextId(int sourceId, bool cycle, CancellationToken cancellationToken);
virtual Task<int> PreviousId(int sourceId, bool cycle, 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);
}
0.8.1 → 0.9.0
Files have been moved into a different folder and namespace. Update your usings.
Some files have been moved into a different project. You may also need the NuGet Elephant.Database.Abstractions and also the NuGets Elephant.Types.Results and Elephant.Types.Results.Abstractions.
The ResponseWrappers are no longer used.
| 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. |
-
net6.0
- Elephant.Database.Abstractions (>= 0.9.0)
- Elephant.Types (>= 4.0.3)
- Elephant.Types.Interfaces (>= 3.0.2)
- Elephant.Types.Results (>= 1.0.1)
- Elephant.Types.Results.Abstractions (>= 1.0.1)
- Microsoft.AspNetCore.Http (>= 2.2.2)
- Microsoft.EntityFrameworkCore (>= 6.0.0)
-
net7.0
- Elephant.Database.Abstractions (>= 0.9.0)
- Elephant.Types (>= 4.0.3)
- Elephant.Types.Interfaces (>= 3.0.2)
- Elephant.Types.Results (>= 1.0.1)
- Elephant.Types.Results.Abstractions (>= 1.0.1)
- Microsoft.AspNetCore.Http (>= 2.2.2)
- Microsoft.EntityFrameworkCore (>= 7.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Split project and move files.