public override void ConfigureServices(ServiceConfigurationContext context)
        {
            context.Services.AddAbpDbContext <AbpBaseDataContext>();

            string connectString = default;

            Configure <AbpDbConnectionOptions>(options =>
            {
                connectString = WholeShared.SqlConnectString;
                options.ConnectionStrings.Default = connectString;
            });


            FreeSql.DataType dataType = default;

            Configure <AbpDbContextOptions>(options =>
            {
                switch (WholeShared.DataType)
                {
                case AbpBaseDataType.Sqlite:
                    options.UseSqlite <AbpBaseDataContext>(); dataType = FreeSql.DataType.Sqlite; break;

                case AbpBaseDataType.Mysql:
                    options.UseMySQL <AbpBaseDataContext>(); dataType = FreeSql.DataType.MySql; break;

                case AbpBaseDataType.Sqlserver:
                    options.UseSqlServer <AbpBaseDataContext>(); dataType = FreeSql.DataType.SqlServer; break;
                }
            });


            FreesqlContext.Init(connectString, dataType);
            context.Services.AddSingleton(typeof(IFreeSql), FreesqlContext.FreeselInstance);
            context.Services.AddTransient(typeof(FreesqlContext), typeof(FreesqlContext));
        }
        private IFreeSql CreateDb(FreeSql.DataType dbType, DbInfo currentDbOption)
        {
            var master = currentDbOption.ConnectionStrings?.FirstOrDefault(e => e.UseType == DbUseType.Master);

            if (master == null)
            {
                throw new ArgumentNullException($"请设置租户 {Tenant.Code} 的主库连接字符串");
            }
            var slaveConnectionStrings = currentDbOption.ConnectionStrings?.Where(e => e.UseType == DbUseType.Slave).Select(e => e.ConnectionString).ToArray();
            var freeSqlBuilder         = new FreeSql.FreeSqlBuilder()
                                         .UseConnectionString(dbType, master.ConnectionString);

            if (slaveConnectionStrings?.Length > 0)
            {
                freeSqlBuilder = freeSqlBuilder.UseSlave(slaveConnectionStrings);
            }

            if (_env.IsDevelopment())
            {
                freeSqlBuilder = freeSqlBuilder.UseAutoSyncStructure(true); //自动同步实体结构【开发环境必备】
            }

            var fsql = freeSqlBuilder.Build();


            fsql.Aop.ConfigEntityProperty += ConfigEntityProperty;
            fsql.Aop.CurdBefore           += CurdBefore;
            fsql.Aop.AuditValue           += AuditValue;
            //fsql.Aop.SyncStructureAfter += SyncStructureAfter;

            DataFilterAsync(fsql);

            return(fsql);
        }
示例#3
0
 private static string GetConnectionConfig(FreeSql.DataType type, string name)
 {
     if (!configDic.ContainsKey(name))
     {
         string connstr = System.Configuration.ConfigurationManager.ConnectionStrings[name].ConnectionString;
         configDic.Add(name, connstr);
     }
     return(configDic[name]);
 }
示例#4
0
        public static void Init(string connectStr, FreeSql.DataType dataType = FreeSql.DataType.Sqlite)
        {
            Freesql_Instance = new FreeSql.FreeSqlBuilder()
                               .UseNameConvert(NameConvertType.PascalCaseToUnderscore)
                               .UseConnectionString(dataType, connectStr)

                               //.UseAutoSyncStructure(true) // 自动同步实体结构到数据库,生产环境禁止使用!

                               .Build();
            OnModelCreating(Freesql_Instance);
        }
示例#5
0
文件: G.cs 项目: yiki2/FreeSql.Tools
        public static string GetConnectionString(FreeSql.DataType dataType, string uid, string pwd,
                                                 string host, string dataName, string port, int valid = 0)
        {
            var connString = keyValues[valid == 0 ? dataType.ToString() : dataType.ToString() + "1"];

            if (host.Length == 1 && host == ".")
            {
                host = "127.0.0.1";
            }
            connString = string.Format(connString, uid, pwd, host, dataType == FreeSql.DataType.SqlServer ?
                                       port == "1433"?"":$",{port}": port, dataName);
            return(connString);
        }
示例#6
0
文件: G.cs 项目: yiki2/FreeSql.Tools
 public static void AddFreeSql(object key, string connectionString, FreeSql.DataType dataType)
 {
     if (!DataBase.ContainsKey(key))
     {
         Lazy <IFreeSql> fsql = new Lazy <IFreeSql>(() =>
         {
             return(new FreeSql.FreeSqlBuilder()
                    .UseConnectionString(dataType, connectionString)
                    .UseLazyLoading(true)                        //开启延时加载功能
                                                                 //.UseAutoSyncStructure(true) //自动同步实体结构到数据库
                    .UseMonitorCommand(
                        cmd => Trace.WriteLine(cmd.CommandText), //监听SQL命令对象,在执行前
                        (cmd, traceLog) => Console.WriteLine(traceLog))
                    .UseLazyLoading(true)
                    .Build());
         });
         DataBase.Add(key, fsql);
     }
 }
示例#7
0
 public static IFreeSql GetFreeSqlClient(FreeSql.DataType DbType, string name = "default")
 {
     if (!DbCache.ContainsKey(name))
     {
         fsql = new FreeSql.FreeSqlBuilder()
                .UseConnectionString(DbType, GetConnectionConfig(DbType, name))
                .UseAutoSyncStructure(true)    //自动同步实体结构到数据库
                .UseSyncStructureToUpper(true) //转大小写同步(oracle表都是大写,需要开启大小同步,否则会创建一个名称小写的新表)
                .UseMonitorCommand(cmd => Trace.WriteLine(cmd.CommandText))
                //跟踪SQL执行语句
                .Build();
         //          fsql = new FreeSql.FreeSqlBuilder()
         //.UseConnectionString(FreeSql.DataType.Sqlite,GetConnectionConfig(DbType, name))
         //.UseAutoSyncStructure(true) //自动同步实体结构到数据库
         //.Build();
         DbCache.Add(name, fsql);
     }
     return(DbCache[name]);
 }
示例#8
0
        public static void Initialize(IFreeSql freeSql, FreeSql.DataType dataType)
        {
            var textType = dataType == FreeSql.DataType.SqlServer ? "nvarchar(max)" : "text";

            freeSql.CodeFirst.ConfigEntity <RequestInfo>(x => {
                x.Index("idx_info_id", nameof(RequestInfo.Id), true);
                x.Index("idx_info_service", nameof(RequestInfo.Service));
                x.Index("idx_info_instance", nameof(RequestInfo.Instance));
                x.Index("idx_info_milliseconds", nameof(RequestInfo.Milliseconds));
                x.Index("idx_info_statuscode", nameof(RequestInfo.StatusCode));
                x.Index("idx_info_createtime", nameof(RequestInfo.CreateTime));
                x.Index("idx_info_route", nameof(RequestInfo.Route));
                x.Index("idx_info_service_instance", "Service,Instance");
                x.Index("idx_info_instance_time", "Instance,CreateTime");
                x.Index("idx_info_id_route_statuscode_time", "Id,Route,StatusCode,CreateTime");
                x.Index("idx_info_service_parentservice_time", "Service,ParentService,CreateTime");
                x.Index("idx_info_service_instance_milliseconds_time", "Service,Instance,Milliseconds,CreateTime");
                x.Index("idx_info_service_instance_statuscode_time", "Service,Instance,StatusCode,CreateTime");

                x.Property(k => k.Id).IsPrimary(true);
                x.Property(k => k.Service).StringLength(50);
                x.Property(k => k.ParentService).StringLength(50);
                x.Property(k => k.Instance).StringLength(50);
                x.Property(k => k.Route).StringLength(100);
                x.Property(k => k.Url).StringLength(100);
                x.Property(k => k.RequestType).StringLength(10);
                x.Property(k => k.Method).StringLength(10);
                x.Property(k => k.RemoteIP).StringLength(50);
                x.Property(k => k.LoginUser).StringLength(50);
            });

            freeSql.CodeFirst.ConfigEntity <RequestDetail>(x => {
                x.Index("idx_detail_id", nameof(RequestDetail.Id), true);
                x.Index("idx_detail_request_id", nameof(RequestDetail.RequestId));

                x.Property(k => k.Id).IsPrimary(true);
                x.Property(k => k.Scheme).StringLength(10);
                x.Property(k => k.QueryString).DbType(textType);
                x.Property(k => k.Header).DbType(textType);
                x.Property(k => k.Cookie).DbType(textType);
                x.Property(k => k.RequestBody).DbType(textType);
                x.Property(k => k.ResponseBody).DbType(textType);
                x.Property(k => k.ErrorMessage).DbType(textType);
                x.Property(k => k.ErrorStack).DbType(textType);
            });

            freeSql.CodeFirst.ConfigEntity <Performance>(x => {
                x.Index("idx_performance_id", nameof(Performance.Id), true);
                x.Index("idx_per_service", nameof(Performance.Service));
                x.Index("idx_per_instance", nameof(Performance.Instance));
                x.Index("idx_per_service_instance", "Service,Instance");

                x.Property(k => k.Id).IsPrimary(true);
                x.Property(k => k.Service).StringLength(50);
                x.Property(k => k.Instance).StringLength(50);
            });

            freeSql.CodeFirst.ConfigEntity <MonitorJob>(x => {
                x.Index("idx_job_id", nameof(MonitorJob.Id), true);
                x.Property(k => k.Id).IsPrimary(true);
                x.Property(k => k.Title).StringLength(255);
                x.Property(k => k.Description).StringLength(255);
                x.Property(k => k.CronLike).StringLength(50);
                x.Property(k => k.WebHook).StringLength(255);
                x.Property(k => k.Emails).StringLength(255);
                x.Property(k => k.Mobiles).StringLength(50);
                x.Property(k => k.Payload).DbType(textType);
                x.Property(k => k.Service).StringLength(50);
                x.Property(k => k.Instance).StringLength(50);
                x.Property(k => k.StartTime).StringLength(50);
                x.Property(k => k.EndTime).StringLength(50);
            });

            freeSql.CodeFirst.ConfigEntity <MonitorAlarm>(x => {
                x.Index("idx_alarm_id", nameof(MonitorAlarm.Id), true);
                x.Property(k => k.Id).IsPrimary(true);
                x.Property(k => k.JobId).StringLength(50);
                x.Property(k => k.Body).StringLength(1000);
            });

            freeSql.CodeFirst.ConfigEntity <SysUser>(x => {
                x.Index("idx_user_id", nameof(SysUser.Id), true);
                x.Property(k => k.Id).IsPrimary(true);
                x.Property(k => k.UserName).StringLength(50);
                x.Property(k => k.Password).StringLength(50);
            });

            freeSql.CodeFirst.ConfigEntity <SysConfig>(x => {
                x.Index("idx_config_id", nameof(SysConfig.Id), true);
                x.Property(k => k.Id).IsPrimary(true);
                x.Property(k => k.Key).StringLength(50);
                x.Property(k => k.Value).StringLength(255);
            });
        }