1. ホーム
  2. Web プログラミング
  3. ASP.NET

ASP.NET CoreでCAPの取引詳細を自動で有効にする

2022-01-14 20:03:40

この記事の目的は、CAPトランザクションを有効にする方法を説明することです。 {ASP.NET Core ASP.NET Core なぜなら、私たちの例では、カプセル化せずに、より直感的な方法を直接示しており、初心者の学生の中には、カプセル化の方法がわからず、どうすればいいのかと私を見つけてくる人もいるからです。

この例では Entity Framework もし、これと似たような他のOrmの原理を使っているのであれば、それを参考にすることができます。

I. パブリッシュサイドトランザクション

にあるものがほとんどなので Web が使われています。 ASP.NET Core フィルタを使っても、もちろんミドルウェアを通しても、原理は同じです。

1. を作成します。 TypeFilter という名前の

CapTransactionFilterAttribute
public class CapTransactionFilterAttribute : TypeFilterAttribute
{
    public CapTransactionFilterAttribute() : base(typeof(TransactionActionFilter))
    {

    }

    public class TransactionActionFilter : IActionFilter
    {
        private IDbContextTransaction _transaction;

        public void OnActionExecuting(ActionExecutingContext context)
        {
            var dbContext = context.HttpContext.RequestServices.GetRequiredService<AppDbContext>();
            var capPublisher = context.HttpContext.RequestServices.GetService<ICapPublisher>();
            _transaction = dbContext.Database.BeginTransaction(capPublisher);
        }

        public void OnActionExecuted(ActionExecutedContext context)
        {
            if (context.Exception == null)
            {
                _transaction.Commit();
            }
            else
            {
                _transaction.Rollback();
            }

            _transaction?.Dispose();
        }
    }
}


Action 

2. 方法の使用は、トランザクション制御の必要性で TypeFilter(typeof(CapTransactionFilterAttribute を追加します。 [Route("~/ef/trans-filter")] [TypeFilter(typeof(CapTransactionFilterAttribute))] public IActionResult EntityFrameworkWithTransactionFilter( [FromServices] AppDbContext dbContext) { dbContext.Persons.Add(new Person() { Name = "ef.transaction" }); _capBus.Publish("sample.rabbitmq.mysql", DateTime.Now); dbContext.SaveChanges(); return Ok(); } ))]で有効になります。

CAP 

第二に、消費者側トランザクション

消費者側の自動取引では、主に CAP それを可能にするために用意されたフィルターには public class MyCapFilter : SubscribeFilter private private readonly AppDbContext _dbContext; private IDbContextTransaction _transaction; public MyCapFilter(AppDbContext dbContext) { _dbContext = dbContext; } public override void OnSubscribeExecuting(ExecutingContext context) { _transaction = _dbContext.Database.BeginTransaction(); } public override void OnSubscribeExecuted(ExecutedContext context) { _transaction.Commit(); } public override void OnSubscribeException(DotNetCore.CAP.Filter.ExceptionContext context) { _transaction.Rollback(); } } のバージョンが5.1.0以上であることを確認します。

1. CAPフィルタの作成

services.AddCap(opt =>
{
    // ***
}.AddSubscribeFilter<MyCapFilter>();

2. フィルタを設定する

 ASP.NET Core 

上記はコンシューマー側の簡単な例です。

この時点でこの記事で CAP を自動的に有効にする ASP.NET Core トランザクションの詳細に関する記事は以上ですが、さらに詳しく の詳細はこちら ASP.NET Core Code ASP.NET Core /code}でCAPトランザクションを自動的に有効にする方法については、Scripting Houseの過去記事を検索するか、以下の関連記事を引き続きご覧ください。