Files
annotations/Web/Azaion.Web/Azaion.Repository/DbFactory.cs
T
2024-07-16 14:18:55 +03:00

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);
}
}