public virtual IDbConnection CreateDbConnection(string connectionString, IDbConnectionResolver connectionResolver, string connectionProviderName) { IDbConnection dbConnection = null; var activeTransaction = this.GetActiveTransactionInfo(connectionString); if (activeTransaction == null) { dbConnection = connectionResolver.Resolve(connectionString, this.Options, connectionProviderName); var dbTransaction = dbConnection.BeginTransaction( (Options.IsolationLevel ?? System.Transactions.IsolationLevel.ReadUncommitted).ToSystemDataIsolationLevel() ); activeTransaction = new ActiveTransactionInfo(dbTransaction, dbConnection); ActiveTransactions[connectionString] = activeTransaction; } return(dbConnection); }
public virtual DbContext CreateDbContext(string connectionString, IDbContextResolver dbContextResolver, string dbContextProviderName) { DbContext dbContext; var activeTransaction = ActiveTransactions.GetOrDefault(connectionString); if (activeTransaction == null) { dbContext = dbContextResolver.Resolve(connectionString, null, this.Options, dbContextProviderName); // 缓存模型 _contextModelStorage.AddOrUpdate(connectionString, dbContext.Model); var dbtransaction = dbContext.Database.BeginTransaction((Options.IsolationLevel ?? IsolationLevel.ReadUncommitted).ToSystemDataIsolationLevel()); activeTransaction = new ActiveTransactionInfo(dbtransaction, dbContext); ActiveTransactions[connectionString] = activeTransaction; } else { dbContext = dbContextResolver.Resolve( connectionString, activeTransaction.DbContextTransaction.GetDbTransaction().Connection, this.Options, dbContextProviderName ); if (dbContext.HasRelationalTransactionManager()) { dbContext.Database.UseTransaction(activeTransaction.DbContextTransaction.GetDbTransaction()); } else { dbContext.Database.BeginTransaction(); } activeTransaction.AttendedDbContexts.Add(dbContext); } return(dbContext); }