Entity Framework Core 1.0 unit of work with Asp.Net Core middleware or Mvc filter

前端 未结 3 1508
一整个雨季
一整个雨季 2020-12-14 19:44

I am using EF Core 1.0 (previously known ad EF7) and ASP.NET Core 1.0 (previously known as ASP.NET 5) for a RESTful API.

I\'d like to have some unit of work scoped t

3条回答
  •  不知归路
    2020-12-14 19:56

    My advice, use dbContext.SaveChanges() in the controller as it is demonstrated in all examples over the web. What you want to do sounds quite fancy and could backfire as you guessed at the end of your post. And IMO, it doesn't make sense.

    Regarding your second question/task:

    ....when responding to the HTTP request either ALL the changes made to the DbContext will be saved onto the database, or none will be saved (if there was some exception, for example).

    I think you need something like 'transaction-per-request'. It is just an idea, haven't tested it at all. I just put the code together in this sample middleware:

    public class TransactionPerRequestMiddleware
    {
        private readonly RequestDelegate next_;
    
        public TransactionPerRequestMiddleware(RequestDelegate next)
        {
            next_ = next;
        }
    
        public async Task Invoke(HttpContext context, DbContext dbContext)
        {
            var transaction = dbContext.Database.BeginTransaction(
                System.Data.IsolationLevel.ReadCommitted);
    
            await next_.Invoke(context);
    
            if (context.Response.StatusCode == 200)
            {
                transaction.Commit();
            }
            else
            {
                transaction.Rollback();
            }
        }
    }
    

    Good luck

提交回复
热议问题