/// <summary> /// Creates a transaction. /// </summary> /// <typeparam name="TStepId">The type of the step id.</typeparam> /// <typeparam name="TData">The type of the transaction data.</typeparam> /// <param name="options">The action to set options.</param> /// <returns>The transaction.</returns> public ITransaction <TStepId, TData> Create <TStepId, TData>(Action <ICreateTransactionContext <TStepId, TData> > options) { if (options == null) { throw new ArgumentNullException(nameof(options)); } ICreateTransactionContext <TStepId, TData> context = new CreateTransactionContext <TStepId, TData>(); options(context); ILogger logger = this.CreateLogger <TStepId, TData>(context); ITransactionCreateInfo <TStepId> info = this.CreateTransactionInfo <TStepId, TData>(context); CreatePartContext <TStepId, TData> partContext = new CreatePartContext <TStepId, TData>() { Context = context, Logger = logger, Info = info }; ITransactionDefinition <TStepId, TData> definition = this.CreateDefinition <TStepId, TData>(partContext); ITransactionStorage <TData> stateStorage = this.CreateStateStorage <TStepId, TData>(partContext); TransactionContext <TStepId, TData> transactionContext = new TransactionContext <TStepId, TData>() { Logger = logger, Info = info, Definition = definition, SessionStorage = stateStorage }; return(new Transaction <TStepId, TData>(transactionContext)); }
public async Task <ITransactionObject> GetTransactionObjectAsync(CreateTransactionContext context, CancellationToken cancellationToken = default) { var dbContext = CheckContextAndGetDbContext(context); var dbContextTransaction = await dbContext.Database.BeginTransactionAsync(cancellationToken); return(new EFCoreTransactionObject(dbContextTransaction)); }
public ITransactionObject GetTransactionObject(CreateTransactionContext context) { var dbContext = CheckContextAndGetDbContext(context); var dbContextTransaction = dbContext.Database.BeginTransaction(); return(new EFCoreTransactionObject(dbContextTransaction)); }
private DbContext CheckContextAndGetDbContext(CreateTransactionContext context) { CheckValue.NotNull(context.CurrentUnitOfWork, nameof(context.CurrentUnitOfWork)); CheckValue.NotNull(context.CurrentDbExecutor, nameof(context.CurrentDbExecutor)); var efDbExecutor = context.CurrentDbExecutor as IEFCoreDbExecutor ?? throw new ArgumentException($"Current DbExecutor can not assignable from {nameof(IEFCoreDbExecutor)}"); CheckValue.NotNull(efDbExecutor.EFCoreDbContext, nameof(efDbExecutor.EFCoreDbContext)); return(efDbExecutor.EFCoreDbContext); }
public Task <ITransactionObject> GetTransactionObjectAsync(CreateTransactionContext context, CancellationToken cancellationToken = default) { return(Task.FromResult((ITransactionObject) new TestDemoTransactionObject(2020))); }
public ITransactionObject GetTransactionObject(CreateTransactionContext context) { return(new TestDemoTransactionObject(2020)); }
public Task <ITransactionObject> GetTransactionObjectAsync(CreateTransactionContext context, CancellationToken cancellationToken = default) { ITransactionObject result = new TestScopeTransactionObject(new System.Transactions.TransactionScope()); return(Task.FromResult(result)); }
public ITransactionObject GetTransactionObject(CreateTransactionContext context) { return(new TestScopeTransactionObject(new System.Transactions.TransactionScope())); }