mirror of
https://github.com/azaion/annotations.git
synced 2026-04-22 22:56:29 +00:00
49 lines
1.3 KiB
C#
49 lines
1.3 KiB
C#
using System.Diagnostics;
|
|
using LinqToDB;
|
|
|
|
namespace Azaion.Repository;
|
|
|
|
public interface IDbFactory
|
|
{
|
|
Task<T> Run<T>(Func<AzaionDbSql, Task<T>> func);
|
|
Task Run(Func<AzaionDbSql, Task> func);
|
|
|
|
T Run<T>(Func<AzaionDbSql, T> func);
|
|
}
|
|
|
|
public class DbFactory : IDbFactory
|
|
{
|
|
private readonly DataOptions _dataOptions;
|
|
|
|
public DbFactory(string connectionString, bool useTracing = true)
|
|
{
|
|
if (string.IsNullOrEmpty(connectionString))
|
|
throw new ArgumentException("Empty connectionString", nameof(connectionString));
|
|
|
|
_dataOptions = new DataOptions()
|
|
.UseMySqlConnector(connectionString)
|
|
.UseMappingSchema(AzaionDbSqlSchemaHolder.MappingSchema);
|
|
|
|
if (useTracing)
|
|
_ = _dataOptions.UseTracing(TraceLevel.Info, t => Console.WriteLine(t.SqlText));
|
|
}
|
|
|
|
public async Task<T> Run<T>(Func<AzaionDbSql, Task<T>> func)
|
|
{
|
|
await using var db = new AzaionDbSql(_dataOptions);
|
|
return await func(db);
|
|
}
|
|
|
|
public async Task Run(Func<AzaionDbSql, Task> func)
|
|
{
|
|
await using var db = new AzaionDbSql(_dataOptions);
|
|
await func(db);
|
|
}
|
|
|
|
public T Run<T>(Func<AzaionDbSql, T> func)
|
|
{
|
|
using var db = new AzaionDbSql(_dataOptions);
|
|
return func(db);
|
|
}
|
|
}
|