private static DbContextScope <T> CreateDbContextScope <T>(DbContextOption.Mode mode, IsolationLevel?isolationLevel, DbTransaction dbTransaction, DbConnection connection) where T : DbContext, IAmbientDbContext, new()
        {
            var dbContextScope = new DbContextScope <T>(mode, isolationLevel, dbTransaction, connection);

            dbContextScope.Initialize();
            return(dbContextScope);
        }
Beispiel #2
0
        internal static ContextData CreateContextData <T>(DbContextOption.Mode mode, IsolationLevel?isolationLevel, DbTransaction transaction, DbConnection sqlConnection) where T : DbContext, IAmbientDbContext, new()
        {
            Debug.WriteLine("Trying to create context data");
            var contextData = new ContextData();

            contextData.CreateNewDbContextIfNotExists <T>(mode, isolationLevel, transaction, sqlConnection);
            return(contextData);
        }
 internal DbContextScope(DbContextOption.Mode mode, IsolationLevel?isolationLevel, DbTransaction dbTransaction, DbConnection sqlConnection)
 {
     _mode           = mode;
     _dbTransaction  = dbTransaction;
     _sqlConnection  = sqlConnection;
     _isolationLevel = isolationLevel;
     ContextKey      = new ContextKey();
 }
        public DbContextScope <T> CreateNonAmbientDbContextScope <T>(DbContextOption.Mode mode,
                                                                     IsolationLevel?isolationLevel) where T : DbContext, IAmbientDbContext, new()
        {
            var dbContextScope = new NonAmbientDbContextScope <T>(mode, isolationLevel, null, null, new AmbientDbContextHouseKeeper());

            dbContextScope.Initialize();
            return(dbContextScope);
        }
Beispiel #5
0
 internal NonAmbientDbContextScope(DbContextOption.Mode mode,
                                   IsolationLevel?isolationLevel,
                                   DbTransaction dbTransaction,
                                   DbConnection sqlConnection,
                                   AmbientDbContextHouseKeeper ambientDbContextHouseKeeper)
     : base(mode, isolationLevel, dbTransaction, sqlConnection)
 {
     _ambientDbContextHouseKeeper = ambientDbContextHouseKeeper;
 }
Beispiel #6
0
        /// <summary>
        /// Responsible for creating a new dbContext with given <see cref="DbContextOption.Mode"/>
        /// </summary>
        /// <typeparam name="T">dbContext of type {T} to be created.</typeparam>
        /// <param name="mode"><see cref="DbContextOption.Mode"/> to create dbContext with.</param>
        /// <param name="isolationLevel"><see cref="IsolationLevel"/> to create dbContext with.</param>
        /// <param name="dbTransaction">create a dbContext with external transaction</param>
        /// <param name="sqlConnection">create a dbContext with existing sql connection</param>
        /// <returns>true if new dbContext created else false.</returns>
        internal bool CreateNewDbContextIfNotExists <T>(DbContextOption.Mode mode, IsolationLevel?isolationLevel, DbTransaction dbTransaction, DbConnection sqlConnection) where T : DbContext, IAmbientDbContext, new()
        {
            if (DbContextCollection.GetDbContextByType <T>() != null)
            {
                return(false);
            }
            //Creating a new DbContext Type
            T currentDbContext;

            if (dbTransaction != null && sqlConnection != null)
            {
                currentDbContext = Activator.CreateInstance(typeof(T), sqlConnection, false) as T;
            }
            else
            {
                currentDbContext = Activator.CreateInstance(typeof(T)) as T;
            }

            if (currentDbContext != null)
            {
                currentDbContext.Mode = mode;

                if (mode == DbContextOption.Mode.Read)
                {
                    currentDbContext.Configuration.AutoDetectChangesEnabled = false;
                }
                if (dbTransaction != null)
                {
                    currentDbContext.Database.UseTransaction(dbTransaction);
                    DbContextCollection.Add(currentDbContext, null);
                }
                else
                {
                    if (isolationLevel.HasValue)
                    {
                        IsolationLevel = isolationLevel.Value;
                        var transaction = currentDbContext.Database.BeginTransaction(isolationLevel.Value);
                        DbContextCollection.Add(currentDbContext, transaction);
                    }
                    else
                    {
                        var transaction = currentDbContext.Database.BeginTransaction();
                        DbContextCollection.Add(currentDbContext, transaction);
                    }
                }
            }
            return(true);
        }
Beispiel #7
0
 internal static ContextData CreateContextData <T>(DbContextOption.Mode mode, IsolationLevel isolationLevel) where T : DbContext, IAmbientDbContext, new()
 {
     return(CreateContextData <T>(mode, isolationLevel, null, null));
 }
 private static DbContextScope <T> CreateDbContextScope <T>(DbContextOption.Mode mode, IsolationLevel?isolationLevel) where T : DbContext, IAmbientDbContext, new()
 {
     return(CreateDbContextScope <T>(mode, isolationLevel, null, null));
 }