Beispiel #1
0
 public YmtSystemDbContext(string storingContextName, string dbFileName = "db.config")
     : base(
         DbConnectionFactory.Builder(storingContextName, dbFileName),
         DbConfigure.GetConfigure(storingContextName, dbFileName).ContextOwnsConnection)
 {
     //Database.SetInitializer<YmtSystemDbContext>(null);
     //YmatouLoggingService.Debug("YmtSystemDbContext create ok...thread id {0},contextName {1}", System.Threading.Thread.CurrentThread.ManagedThreadId, storingContextName);
 }
 public static void Start(string contextName)
 {
     if (string.IsNullOrEmpty(contextName))
     {
         return;
     }
     if (DbConfigure.GetConfigure(contextName).MonitorSqlCommond)
     {
         DbInterception.Add(new SqlCommandInterceptor(contextName));
     }
 }
        public YmtSystemDbConfiguration(string contextName)
        {
            //自动恢复连接失败时的事务
            var cfg = DbConfigure.GetConfigure(contextName);

            if (cfg.TransactionFailRetry)
            {
                SetTransactionHandler(SqlProviderServices.ProviderInvariantName, () => new CommitFailureHandler());
            }
            //由于网络因素可能造成连接异常,采用的重试策略。
            //1.DefaultExecutionStrategy:默认策略,除了SQL数据库,其他数据库不执行任何重试操作
            //2.SqlAzureExecutionStrategy:这个执行策略继承至 DbExecutionStrategy,它会在 Sql Azure 遇到短暂错误时进行重试操作
            //3.DbExecutionStrategy:这个类是一个比较适合用来实现自定义执行策略的基类,它实现了一个指数重试的策略,即,第一次尝试连接时等待为零,后续等待时间以指数级进行增长,直到达到最大尝试次数才终止。这个类有一个抽象方法 ShouldRetryOn ,子类在实现它时,自己决定哪些个异常需要进行重试操作
            //4.DefaultSqlExecutionStrategy:这是一个内部默认使用的执行策略,这个策略也不会进行任何的重试操作,但是,它会将这些连接错误的异常包裹起来,并通知用户可能需要开启韧性连接。
            //http://msdn.microsoft.com/en-us/library/dn456835.aspx
            if (cfg.ConnectionFailRetry)
            {
                SetExecutionStrategy(SqlProviderServices.ProviderInvariantName, () => new SqlAzureExecutionStrategy(2, TimeSpan.FromSeconds(30)));
            }
        }
 public SqlCommandInterceptor(string contextName)
 {
     watch = new Stopwatch();
     cfg   = DbConfigure.GetConfigure(contextName);
 }