41 lines
1.3 KiB
C#
41 lines
1.3 KiB
C#
using AyCode.Core.Consts;
|
|
using AyCode.Core.Helpers;
|
|
using AyCode.Core.Logger;
|
|
using AyCode.Database.DbContexts;
|
|
using AyCode.Interfaces.Entities;
|
|
|
|
namespace AyCode.Database.Extensions;
|
|
|
|
public static class AcDbSessionExtension
|
|
{
|
|
public static Task<TResultType> SessionAsync<TDbContext, TResultType>(this TDbContext ctx, Func<TDbContext, TResultType> callback) where TDbContext : AcDbContextBase
|
|
=> TaskHelper.ToThreadPoolTask(() => ctx.Session(callback));
|
|
|
|
public static TResultType Session<TDbContext, TResultType>(this TDbContext ctx, Func<TDbContext, TResultType> callback) where TDbContext : AcDbContextBase
|
|
{
|
|
TResultType result;
|
|
|
|
try
|
|
{
|
|
result = callback(ctx);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
var errorText = $"Session({ctx}) callback error...{AcEnv.NL}";
|
|
Logger.Error($"{errorText}", ex);
|
|
|
|
throw new Exception($"{errorText}{ex}");
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
|
|
public static IEnumerable<TEntity> Session<TDbContext, TEntity>(this TDbContext ctx, Func<TDbContext, IQueryable<TEntity>> callback)
|
|
where TEntity : IEntity
|
|
where TDbContext : AcDbContextBase
|
|
{
|
|
foreach (var entity in callback(ctx))
|
|
yield return entity;
|
|
}
|
|
} |