Skip to content

CreatioVitae/ORMIntegrator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

80 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ORMIntegrator
ORMIntegrator.Extensions.DependencyInjection

Getting Started(.NET 6 / ASP.NET Core)

Create DBContext.Partial Object

using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Database.Kashilog.DbContexts;

public partial class KashilogContext : DbContext {

    readonly string _connectionString;

    readonly bool _consoleLogIsRequired;

    public KashilogContext(string connectionString, bool consoleLogIsRequired = false) =>
        (_connectionString, _consoleLogIsRequired) = (connectionString, consoleLogIsRequired);

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {
        optionsBuilder.UseSqlServer(_connectionString);

        if (_consoleLogIsRequired) {
            optionsBuilder
                .LogTo(Console.WriteLine)
                .EnableSensitiveDataLogging();
        }
    }
}

DI Settings(ServiceDescriptor Configuration)

using Database.Kashilog.DbContexts;
using Microsoft.Extensions.DependencyInjection;

namespace Database.Kashilog;

public static class StartupExtensionLibrary {
    public static IServiceCollection AddSqlManagerFromKashilogDatabase(this IServiceCollection services, string connectionString, IDefaultEnvironmentAccessor defaultEnvironment) =>
        services.AddSqlManager(
            (connectionString, isDevelopment) => new TravelContext(connectionString, isDevelopment),
            connectionString,
            defaultEnvironment
        );
}

Constructor Injection

using MicroORMWrapper;
using Service.Extensions.DependencyInjection.Markers;
using System.Collections.Generic;
using System.Threading.Tasks;
using WebApi.Kashilog.DomainObjects.Kashi;
using WebApi.Kashilog.Repositories.DatabaseConnections;
using WebApi.Kashilog.Repositories.Kashi.Products.Sqls;

namespace Repository.Kashilog.Kashi.Products {
    public class ProductRepository : IRepository {

        SqlManager<KashilogContext> KashilogSqlManager { get; }

        public ProductRepository(SqlManager<KashilogContext> kashilogSqlManager) {
            KashilogSqlManager = kashilogSqlManager;
        }

        // ...
    }
}

Use TransactionBuilder

using Database.Kashilog.DbContexts;
using DomainObject.Kashilog.Configurations;
using Microsoft.Extensions.Options;
using Repository.Kashilog.Kashi.Products;

namespace Service.Kashilog.Kashi.Products;

public class DummyService : IService {
    ProductRepository ProductRepository { get; }

    ScopedTransactionBuilder<KashilogContext> TransactionBuilder { get; }

    RequestContext RequestContext { get; }

    public DummyService(ProductRepository productRepository, ScopedTransactionBuilder<KashilogContext> transactionBuilder, RequestContext requestContext) =>
       (ProductRepository, TransactionBuilder, RequestContext) = (productRepository, transactionBuilder, requestContext);

    public async ValueTask UpdateDummyAsync() {
        await using var scopedTransaction = await TransactionBuilder.BeginScopedTransactionAsync();

        // Execute Commands Use Repositories and SqlManager<TDbContext>...

        // Savechanges Trigger...Available without injection of SQLManager...
        await BbsScopedTransactionBuilder.ExecutePooledCommandsAsync();

        //Complete Mark...a.k.a. Commitable Mark...
        scopedTransaction.Complete();
    }
}