예제 #1
0
        /// <summary>Initializes a new instance of the <see cref="T:System.Object" /> class.</summary>

        public static IServiceCollection AddHorizonORM(this IServiceCollection services, IConfiguration configuration, ServiceLifetime contextLifetime = ServiceLifetime.Scoped, string section = "DbConfig")
        {
            MutiDbOperate connectOptions = new MutiDbOperate();

            configuration.GetSection(section).Bind(connectOptions);

            //var connectOptions = configuration.GetSection(section).Get<List<MutiDbOperate>>();
            if (connectOptions != null)
            {
                //new HorizonDataClient(connectOptions);

                if (contextLifetime == ServiceLifetime.Scoped)
                {
                    services.AddScoped(s => new HorizonDataClient(connectOptions));
                }
                if (contextLifetime == ServiceLifetime.Singleton)
                {
                    services.AddSingleton(s => new HorizonDataClient(connectOptions));
                }
                if (contextLifetime == ServiceLifetime.Transient)
                {
                    services.AddTransient(s => new HorizonDataClient(connectOptions));
                }
            }

            return(services);
        }
예제 #2
0
        public HorizonDataClient(MutiDbOperate config)
        {
            Console.WriteLine("horizonDataclinet is start......");

            Func <List <SlaveConnectionConfig> > action = () =>
            {
                var list = new List <SlaveConnectionConfig>();
                if (config.SlaveConnections.Count() < 1)
                {
                    throw new Exception("db config file is error!");
                }

                foreach (var item in config.SlaveConnections)
                {
                    list.Add(new SlaveConnectionConfig()
                    {
                        HitRate          = item.HitRate,
                        ConnectionString = item.ConnectionString
                    });
                }

                return(list);
            };


            SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
            {
                ConnectionString       = config.ConnectionString, //Master Connection
                DbType                 = (DbType)config.DbType,
                InitKeyType            = InitKeyType.Attribute,
                IsAutoCloseConnection  = true, //是否自动关闭连接
                IsShardSameThread      = true, //共享线程
                SlaveConnectionConfigs = action()
            });

            db.Aop.OnLogExecuted = (s, p) =>
            {
                Log.Information(db.Ado.Connection.ConnectionString);
                Log.Information("sql: " + s);
                Log.Information(string.Join(",", p?.Select(it => it.ParameterName + ":" + it.Value)));
            };
        }