Example #1
0
        public PagerList <TEntity> QueryPagerList <TEntity>(object predicate = null, IList <ISort> sort = null, int page = 1, int resultsPerPage = 10, IDbContextTransaction transaction = null, int?commandTimeout = null) where TEntity : class
        {
            var items      = DbConnection.GetPage <TEntity>(predicate, sort, page, resultsPerPage, transaction?.GetDbTransaction(), commandTimeout);
            var totalCount = DbConnection.Count <TEntity>(predicate, transaction?.GetDbTransaction(), commandTimeout);

            return(new PagerList <TEntity>(page, resultsPerPage, totalCount, items.ToList()));
        }
        public IAppDbContext Create(IDbContextTransaction dbContextTransaction = null)
        {
            var          transaction = dbContextTransaction?.GetDbTransaction();
            DbConnection connection;

            if (transaction != null)
            {
                connection = transaction.Connection;
            }
            else
            {
                var connectionString = _configuration.GetConnectionString("AppDatabase");
                connection = new SqlConnection(connectionString);
            }

            var options = new DbContextOptionsBuilder <AppDbContext>()
                          .UseSqlServer(
                connection,
                sqlOptions =>
            {
                sqlOptions.EnableRetryOnFailure();
            })
                          .Options;

            var db = new AppDbContext(options);

            if (transaction != null)
            {
                db.Database.UseTransaction(transaction);
            }

            return(db);
        }
        /// <summary>
        /// 获取当前事务
        /// </summary>
        /// <returns>事务</returns>
        public DbTransaction GetCurrentTransaction()
        {
            IDbContextTransaction dbContextTransaction = this._dbContext.Database.CurrentTransaction;
            DbTransaction         dbTransaction        = dbContextTransaction?.GetDbTransaction();

            return(dbTransaction);
        }
Example #4
0
 public void Rollback()
 {
     if (_transaction?.GetDbTransaction() != null)
     {
         _transaction.Rollback();
     }
 }
Example #5
0
        public Task <IEnumerable <TEntity> > QueryAsync <TEntity>(string sql, object param = null, IDbContextTransaction trans = null) where TEntity : class
        {
            var conn   = GetConnection();
            var result = conn.QueryAsync <TEntity>(sql, param, trans?.GetDbTransaction());

            return(result);
        }
Example #6
0
        /// <summary>
        /// QueryPageListAsync
        /// </summary>
        /// <typeparam name="TEntity"></typeparam>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <param name="sql"></param>
        /// <param name="param"></param>
        /// <returns></returns>
        public Task <PageResult <TEntity> > QueryPageListAsync <TEntity>(int pageIndex, int pageSize, string sql, object param = null, IDbContextTransaction trans = null) where TEntity : class
        {
            var connection = GetConnection();

            pageSize  = pageSize > 0 ? pageSize : 1;
            pageIndex = pageIndex > 0 ? pageIndex : 1;

            if (!PagingHelper.SplitSql(sql, out SqlParts parts))
            {
                throw new Exception("Unable to parse SQL statement for paged query");
            }
            long skip         = (pageIndex - 1) * pageSize;
            long take         = pageSize;
            var  databaseType = DatabaseType.MySql;

            if (_context.Database.IsMySql())
            {
                databaseType = DatabaseType.MySql;
            }
            else if (_context.Database.IsSqlServer())
            {
                databaseType = DatabaseType.SqlServer2012;
            }


            var sqlPage  = PagingHelper.GetSqlPage(skip, take, parts, databaseType);
            var sqlCount = parts.SqlCount;
            var result   = new PageResult <TEntity>
            {
                PageIndex = pageIndex,
                PageSize  = pageSize,
                Total     = connection.ExecuteScalar <long>(sqlCount)
            };

            if (result.Total == 0)
            {
                return(Task.FromResult(result));
            }
            result.PageCount = result.Total / pageSize;

            if ((result.Total % pageSize) != 0)
            {
                result.PageCount++;
            }

            result.Items = connection.Query <TEntity>(sqlPage, param, trans?.GetDbTransaction())?.ToList();
            return(Task.FromResult(result));
        }
 protected override void UseTransaction(DatabaseFacade facade, IDbContextTransaction transaction)
 => facade.UseTransaction(transaction.GetDbTransaction());
Example #8
0
        public async Task <int> ExecuteAsync(string sql, object param = null, IDbContextTransaction transaction = null, int?commandTimeout = null)
        {
            var tran = (transaction?.GetDbTransaction()) ?? DbTransaction;

            return(await DbConnection.ExecuteAsync(sql, param, tran, commandTimeout));
        }
Example #9
0
        public int Execute(string sql, object param = null, IDbContextTransaction transaction = null, int?commandTimeout = null)
        {
            var tran = (transaction?.GetDbTransaction()) ?? DbTransaction;

            return(DbConnection.Execute(sql, param, tran, commandTimeout));
        }
Example #10
0
 /// <summary>
 /// Disables internal retries for Aborted errors for the transaction. Internal retries are enabled by default.
 /// This method may only be called for read/write Spanner transactions.
 /// </summary>
 /// <param name="dbContextTransaction">The transaction to disable internal retries for.</param>
 /// <exception cref="ArgumentException">If the transaction is not a read/write Spanner transaction</exception>
 public static void DisableInternalRetries([NotNull] this IDbContextTransaction dbContextTransaction)
 {
     GaxPreconditions.CheckArgument(dbContextTransaction.GetDbTransaction() is SpannerRetriableTransaction, nameof(dbContextTransaction), "Must be a read/write Spanner transaction");
     ((SpannerRetriableTransaction)dbContextTransaction.GetDbTransaction()).EnableInternalRetries = false;
 }
Example #11
0
        public async Task <int> ExecuteAsync(string sql, object param, IDbContextTransaction trans = null)
        {
            var conn = GetConnection();

            return(await conn.ExecuteAsync(sql, param, trans?.GetDbTransaction()));
        }
Example #12
0
 public async Task <IEnumerable <TEntity> > QueryAsync <TEntity>(string sql, object param = null, IDbContextTransaction transaction = null, int?commandTimeout = null) where TEntity : class
 {
     return(await DbConnection.QueryAsync <TEntity>(sql, param, transaction?.GetDbTransaction()));
 }
        static void Main(string[] args)
        {
            using (var db = new Northwind())
            {
                using (IDbContextTransaction t = db.Database.BeginTransaction())
                {
                    WriteLine($"Transaction started with this isolation level: {t.GetDbTransaction().IsolationLevel}");

                    var loggerFactory = db.GetService <ILoggerFactory>();
                    loggerFactory.AddProvider(new ConsoleLogProvider());

                    WriteLine("List of categories and the number of products:");

                    IQueryable <Category> cats;
                    // = db.Categories.Include(c => c.Products);

                    Write("Enable eager loading? (Y/N): ");
                    bool eagerloading    = (ReadKey().Key == ConsoleKey.Y);
                    bool explicitloading = false;
                    WriteLine();
                    if (eagerloading)
                    {
                        cats = db.Categories.Include(c => c.Products);
                    }
                    else
                    {
                        cats = db.Categories;
                        Write("Enable explicit loading? (Y/N): ");
                        explicitloading = (ReadKey().Key == ConsoleKey.Y);
                        WriteLine();
                    }

                    foreach (Category c in cats)
                    {
                        if (explicitloading)
                        {
                            Write($"Explicitly load products for {c.CategoryName}? (Y/N): ");
                            if (ReadKey().Key == ConsoleKey.Y)
                            {
                                var products = db.Entry(c).Collection(c2 => c2.Products);
                                if (!products.IsLoaded)
                                {
                                    products.Load();
                                }
                            }
                            WriteLine();
                        }

                        WriteLine(
                            $"{c.CategoryName} has {c.Products.Count} products.");
                    }

                    WriteLine("List of products that cost more than a given price with most expensive first.");

                    string  input;
                    decimal price;
                    do
                    {
                        Write("Enter a product price: ");
                        input = ReadLine();
                    } while (!decimal.TryParse(input, out price));

                    IQueryable <Product> prods = db.Products
                                                 .Where(product => product.UnitPrice > price)
                                                 .OrderByDescending(product => product.UnitPrice);

                    foreach (Product item in prods)
                    {
                        WriteLine($"{item.ProductID}: {item.ProductName} costs {item.UnitPrice:$#,##0.00}");
                    }

                    var newProduct = new Product
                    {
                        CategoryID  = 6, // Meat & Poultry
                        ProductName = "Bob's Burger",
                        UnitPrice   = 500M
                    };
                    // mark product as added in change tracking
                    db.Products.Add(newProduct);
                    // save tracked changes to database
                    db.SaveChanges();
                    foreach (var item in db.Products)
                    {
                        WriteLine($"{item.ProductID}: {item.ProductName} costs {item.UnitPrice:$#,##0.00}");
                    }

                    Product updateProduct = db.Products.First(p => p.ProductName.StartsWith("Bob"));
                    updateProduct.UnitPrice += 20M;
                    db.SaveChanges();
                    foreach (var item in db.Products)
                    {
                        WriteLine($"{item.ProductID}: {item.ProductName} costs {item.UnitPrice:$#,##0.00}");
                    }

                    Product deleteProduct = db.Products.First(p => p.ProductName.StartsWith("Bob"));
                    db.Products.Remove(deleteProduct);
                    db.SaveChanges();
                    foreach (var item in db.Products)
                    {
                        WriteLine($"{item.ProductID}: {item.ProductName} costs {item.UnitPrice:$#,##0.00}");
                    }

                    t.Commit();
                }
            }
        }
Example #14
0
 /// <summary>
 /// To traction wrapper
 /// </summary>
 /// <param name="transaction"></param>
 /// <param name="operator"></param>
 /// <returns></returns>
 public static ITransactionWrapper ToTransactionWrapper(this IDbContextTransaction transaction, TransactionAppendOperator @operator)
 {
     transaction.CheckNull(nameof(transaction));
     return(TransactionWrapper.CreateFromTransaction(transaction.GetDbTransaction(), @operator));
 }
Example #15
0
 /// <summary>
 /// To traction wrapper
 /// </summary>
 /// <param name="transaction"></param>
 /// <returns></returns>
 public static ITransactionWrapper ToTransactionWrapper(this IDbContextTransaction transaction)
 {
     transaction.CheckNull(nameof(transaction));
     return(TransactionWrapper.CreateFromTransaction(transaction.GetDbTransaction()));
 }
Example #16
0
 public void BeginTransaction(DbIsolationLevel isolationLevel = DbIsolationLevel.Unspecified)
 {
     _transaction.GetDbTransaction();
 }
 public IDbTransaction GetTransaction()
 {
     return(_dbContextTransaction.GetDbTransaction());
 }
Example #18
0
 /// <summary>
 /// The commit timestamp of the transaction. This property is only valid for read/write Spanner transactions that have committed.
 /// </summary>
 /// <param name="dbContextTransaction"></param>
 /// <returns>The commit timestamp of the transaction</returns>
 /// <exception cref="ArgumentException">If the transaction is not a read/write Spanner transaction</exception>
 /// <exception cref="InvalidOperationException">If the Spanner transaction has not committed</exception>
 public static DateTime GetCommitTimestamp([NotNull] this IDbContextTransaction dbContextTransaction)
 {
     GaxPreconditions.CheckArgument(dbContextTransaction.GetDbTransaction() is SpannerRetriableTransaction, nameof(dbContextTransaction), "Must be a read/write Spanner transaction");
     return(((SpannerRetriableTransaction)dbContextTransaction.GetDbTransaction()).CommitTimestamp);
 }
Example #19
0
 public TEntity QueryFirstOrDefault <TEntity>(string sql, object param = null, IDbContextTransaction transaction = null, int?commandTimeout = null, CommandType?commandType = null)
 {
     return(DbConnection.QueryFirstOrDefault <TEntity>(sql, param, transaction?.GetDbTransaction(), commandTimeout, commandType));
 }
Example #20
0
 /// <summary>
 /// レコードリストを取得
 /// </summary>
 /// <typeparam name="TValue">レコードタイプ</typeparam>
 /// <param name="dbContext">DBコンテキスト</param>
 /// <param name="sql">SQL文</param>
 /// <param name="param">パラメーター</param>
 /// <param name="transaction">DBトランザクション</param>
 /// <returns>取得結果</returns>
 public static List <TValue> GetDatas <TValue>(this IAmwDBContext dbContext, string sql, object param = null, IDbContextTransaction transaction = null)
 {
     return(DBAccessBase.ToList <TValue>(sql, param, dbContext.Database.GetDbConnection(), transaction?.GetDbTransaction()));
 }
Example #21
0
        /// <summary>
        /// QueryAsync
        /// </summary>
        /// <typeparam name="TEntity"></typeparam>
        /// <param name="sql"></param>
        /// <param name="param"></param>
        /// <param name="trans"></param>
        /// <param name="commandTimeout"></param>
        /// <param name="commandType"></param>
        /// <returns></returns>
        public Task <IEnumerable <TEntity> > QueryAsync <TEntity>(string sql, object param = null, IDbContextTransaction trans = null, int?commandTimeout = null, CommandType?commandType = null) where TEntity : class
        {
            var conn = GetConnection();

            return(conn.QueryAsync <TEntity>(sql, param, trans?.GetDbTransaction(), commandTimeout, commandType));
        }
 public DbTransaction GetDbTransaction()
 {
     return(_transaction.GetDbTransaction());
 }