101 lines
3.0 KiB
C#
101 lines
3.0 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.EntityFrameworkCore.Storage;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using SystemX.Core.Config.Model;
|
|
|
|
namespace SystemX.Core.DB
|
|
{
|
|
public static class DBTransaction
|
|
{
|
|
public static IEnumerable<TEntity>? GetEntity<TEntity>(this DbContext dbContext) where TEntity : class
|
|
{
|
|
IEnumerable<TEntity>? entity = default;
|
|
|
|
var type = dbContext.GetType();
|
|
try
|
|
{
|
|
foreach (var prop in type.GetProperties())
|
|
{
|
|
string propertyFullName = $"{prop.PropertyType.FullName}";
|
|
if (propertyFullName.ToLower().Contains(typeof(TEntity).Name.ToLower()))
|
|
{
|
|
entity = prop.GetValue(dbContext) as IEnumerable<TEntity>;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log4net.WriteLine(ex);
|
|
}
|
|
|
|
return entity;
|
|
}
|
|
|
|
#region Transaction
|
|
public static IDbContextTransaction CreateTransaction(this DbContext dbContext)
|
|
{
|
|
return dbContext.Database.BeginTransaction();
|
|
}
|
|
|
|
public static bool CloseTransaction(this DbContext dbContext, IDbContextTransaction transaction)
|
|
{
|
|
bool result = false;
|
|
try
|
|
{
|
|
dbContext.SaveChanges();
|
|
transaction.Commit();
|
|
result = true;
|
|
|
|
Log4net.WriteLine("Transaction Commit", LogType.Debug);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
transaction.Rollback();
|
|
Log4net.WriteLine("Transaction Rollback", LogType.Error);
|
|
Log4net.WriteLine(ex);
|
|
}
|
|
transaction.Dispose();
|
|
|
|
return result;
|
|
}
|
|
#endregion
|
|
|
|
#region Transaction Async
|
|
public static async Task<IDbContextTransaction> CreateTransactionAsync(this DbContext dbContext, IsolationLevel isolationLevel = IsolationLevel.ReadCommitted)
|
|
{
|
|
return await dbContext.Database.BeginTransactionAsync(isolationLevel);
|
|
}
|
|
|
|
public static async Task<bool> CloseTransactionAsync(this DbContext dbContext, IDbContextTransaction transaction)
|
|
{
|
|
bool result = false;
|
|
try
|
|
{
|
|
await dbContext.SaveChangesAsync();
|
|
await transaction.CommitAsync();
|
|
result = true;
|
|
|
|
Log4net.WriteLine("Transaction Commit", LogType.Debug);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
await transaction.RollbackAsync();
|
|
Log4net.WriteLine("Transaction Rollback", LogType.Error);
|
|
Log4net.WriteLine(ex);
|
|
}
|
|
await transaction.DisposeAsync();
|
|
|
|
return result;
|
|
}
|
|
#endregion
|
|
}
|
|
|
|
|
|
}
|