コード例 #1
0
 public ClusterAdapter(RedisClient topOwner, ConnectionStringBuilder[] clusterConnectionStrings)
 {
     UseType     = UseType.Cluster;
     TopOwner    = topOwner;
     _ib         = new IdleBus <RedisClientPool>(TimeSpan.FromMinutes(10));
     _ib.Notice += new EventHandler <IdleBus <string, RedisClientPool> .NoticeEventArgs>((_, e) => { });
 }
コード例 #2
0
ファイル: ClusterAdapter.cs プロジェクト: CuiYuXi/FreeRedis
 public ClusterAdapter(RedisClient cli, ConnectionStringBuilder[] clusterConnectionStrings)
 {
     UseType     = UseType.Cluster;
     _cli        = cli;
     _ib         = new IdleBus <RedisClientPool>();
     _ib.Notice += new EventHandler <IdleBus <string, RedisClientPool> .NoticeEventArgs>((_, e) => { });
 }
コード例 #3
0
        /// <summary>
        /// 接收通知
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Notice(object sender, IdleBus <TKey, IFreeSql> .NoticeEventArgs e)
        {
            switch (e.NoticeType)
            {
            case IdleBus <TKey, IFreeSql> .NoticeType.Register:
                break;

            case IdleBus <TKey, IFreeSql> .NoticeType.Remove:
                break;

            case IdleBus <TKey, IFreeSql> .NoticeType.AutoCreate:
                break;

            case IdleBus <TKey, IFreeSql> .NoticeType.AutoRelease:
                break;

            case IdleBus <TKey, IFreeSql> .NoticeType.Get:
                break;

            default:
                break;
            }

            try
            {
                Options.Notice?.Invoke(e);
            }
            catch (Exception ex)
            {
                throw new FreeSqlException("执行配置的通知处理方法时发生错误", ex);
            }
        }
コード例 #4
0
        public Scheduler(ITaskHandler taskHandler)
        {
            if (taskHandler == null)
            {
                throw new ArgumentNullException("taskHandler 参数不能为  null");
            }
            _taskHandler = taskHandler;

            _ib = new IdleBus();
            _ib.ScanOptions.Interval          = TimeSpan.FromMilliseconds(200);
            _ib.ScanOptions.BatchQuantity     = 100000;
            _ib.ScanOptions.BatchQuantityWait = TimeSpan.FromMilliseconds(100);
            _ib.ScanOptions.QuitWaitSeconds   = 20;
            _ib.Notice += new EventHandler <IdleBus <IDisposable> .NoticeEventArgs>((s, e) =>
            {
            });
            _wq = new WorkQueue(30);

            var tasks = _taskHandler.LoadAll();

            foreach (var task in tasks)
            {
                AddTaskPriv(task, false);
            }
        }
コード例 #5
0
ファイル: Program.cs プロジェクト: zeroyou/IdleBus
        static void Main(string[] args)
        {
            var ib = new IdleBus(TimeSpan.FromSeconds(10));

            ib.Notice += (_, e2) =>
            {
                if (e2.NoticeType == IdleBus <IDisposable> .NoticeType.AutoCreate ||
                    e2.NoticeType == IdleBus <IDisposable> .NoticeType.AutoRelease)
                {
                    var log = $"[{DateTime.Now.ToString("HH:mm:ss")}] 线程{Thread.CurrentThread.ManagedThreadId}:{e2.Log}";
                    //Trace.WriteLine(log);
                    Console.WriteLine(log);
                }
            };

            var testkey1 = ib.Exists("key1");

            ib
            .Register("key1", () => new ManualResetEvent(false))
            .Register("key2", () => new AutoResetEvent(false));

            var testkey2 = ib.Exists("key1");

            for (var a = 3; a < 2000; a++)
            {
                ib.Register("key" + a, () => new System.Data.SqlClient.SqlConnection());
            }

            for (var a = 1; a < 2000; a++)
            {
                ib.Get("key" + a);
            }

            var now     = DateTime.Now;
            int counter = 100 * 1000;

            for (var k = 0; k < 100; k++)
            {
                new Thread(() =>
                {
                    var rnd = new Random();

                    for (var a = 0; a < 1000; a++)
                    {
                        for (var l = 0; l < 10; l++)
                        {
                            ib.Get("key" + rnd.Next(1, 2000));
                        }

                        if (Interlocked.Decrement(ref counter) <= 0)
                        {
                            Console.WriteLine($"测试完成,100线程并发 ib.Get() 获取100万次,耗时:{DateTime.Now.Subtract(now).TotalMilliseconds}ms");
                        }
                    }
                }).Start();
            }

            Console.ReadKey();
            ib.Dispose();
        }
コード例 #6
0
ファイル: IdleBus`1.Test.cs プロジェクト: zeroyou/IdleBus
    public static void Test()
    {
        //超过1分钟没有使用,连续检测2次都这样,就销毁【实例】
        var ib = new IdleBus <string, IDisposable>(TimeSpan.FromMinutes(1));

        ib.Notice += (_, e) =>
        {
            var log = $"[{DateTime.Now.ToString("HH:mm:ss")}] 线程{Thread.CurrentThread.ManagedThreadId}:{e.Log}";
            //Trace.WriteLine(log);
            Console.WriteLine(log);
        };

        ib.Register("key1", () => new ManualResetEvent(false));
        ib.Register("key2", () => new AutoResetEvent(false));

        var item = ib.Get("key2") as AutoResetEvent;

        //获得 key2 对象,创建

        item = ib.Get("key2") as AutoResetEvent;
        //获得 key2 对象,已创建

        int num1 = ib.UsageQuantity;

        //【实例】有效数量(即已经创建了的),后台定时清理不活跃的【实例】,此值就会减少

        ib.Dispose();
    }
コード例 #7
0
        /// <summary>
        /// 获得FreeSql实例
        /// </summary>
        /// <param name="ib"></param>
        /// <param name="serviceProvider"></param>
        /// <returns></returns>
        public static IFreeSql GetFreeSql(this IdleBus <IFreeSql> ib, IServiceProvider serviceProvider)
        {
            var user      = serviceProvider.GetRequiredService <IUser>();
            var appConfig = serviceProvider.GetRequiredService <AppConfig>();

            if (appConfig.Tenant && user.DataIsolationType == DataIsolationType.OwnDb && user.TenantId.HasValue)
            {
                var tenantName = "tenant_" + user.TenantId.ToString();
                var exists     = ib.Exists(tenantName);
                if (!exists)
                {
                    var dbConfig = serviceProvider.GetRequiredService <DbConfig>();
                    //查询租户数据库信息
                    var freeSql          = serviceProvider.GetRequiredService <IFreeSql>();
                    var tenantRepository = freeSql.GetRepository <TenantEntity>();
                    var tenant           = tenantRepository.Select.DisableGlobalFilter("Tenant").WhereDynamic(user.TenantId).ToOne <CreateFreeSqlTenantDto>();

                    var timeSpan = tenant.IdleTime.HasValue && tenant.IdleTime.Value > 0 ? TimeSpan.FromMinutes(tenant.IdleTime.Value) : TimeSpan.MaxValue;
                    ib.TryRegister(tenantName, () => CreateFreeSql(user, appConfig, dbConfig, tenant), timeSpan);
                }

                return(ib.Get(tenantName));
            }
            else
            {
                var freeSql = serviceProvider.GetRequiredService <IFreeSql>();
                return(freeSql);
            }
        }
コード例 #8
0
            public SentinelAdapter(RedisClient topOwner, ConnectionStringBuilder sentinelConnectionString, string[] sentinels, bool rw_splitting)
            {
                UseType           = UseType.Sentinel;
                TopOwner          = topOwner;
                _connectionString = sentinelConnectionString;
                _sentinels        = new LinkedList <ConnectionStringBuilder>(sentinels?.Select(a =>
                {
                    var csb  = ConnectionStringBuilder.Parse(a);
                    csb.Host = csb.Host.ToLower();
                    return(csb);
                }).GroupBy(a => a.Host, a => a).Select(a => a.First()) ?? new ConnectionStringBuilder[0]);
                _rw_splitting = rw_splitting;

                _is_single = !_rw_splitting && sentinelConnectionString.MaxPoolSize == 1;
                if (_sentinels.Any() == false)
                {
                    throw new ArgumentNullException(nameof(sentinels));
                }

                _ib = new IdleBus <RedisClientPool>(TimeSpan.FromMinutes(10));
                ResetSentinel();

#if isasync
                _asyncManager = new AsyncRedisSocket.Manager(this);
#endif
            }
コード例 #9
0
ファイル: HomeController.cs プロジェクト: zjx632/FreeSql
        static void test()
        {
            IdleBus <IFreeSql> ib = null;                   //单例注入

            var fsql = ib.Get();                            //获取当前租户对应的 IFreeSql

            var fsql00102 = ib.ChangeTenant("00102").Get(); //切换租户,后面的操作都是针对 00102

            var songRepository   = ib.GetRepository <Song>();
            var detailRepository = ib.GetRepository <Detail>();
        }
コード例 #10
0
        public static IFreeSql Get(this IdleBus <IFreeSql> ib, long tenantId, AppConfig appConfig)
        {
            var tenantName = AdminConsts.TenantName;

            if (appConfig.TenantType == TenantType.Own)
            {
                tenantName = "tenant_" + tenantId.ToString();
            }
            var freeSql = ib.Get(tenantName);

            return(freeSql);
        }
コード例 #11
0
ファイル: ClusterAdapter.cs プロジェクト: zqlovejyc/FreeRedis
            public ClusterAdapter(RedisClient topOwner, ConnectionStringBuilder[] clusterConnectionStrings)
            {
                UseType  = UseType.Cluster;
                TopOwner = topOwner;

                if (clusterConnectionStrings.Any() != true)
                {
                    throw new ArgumentNullException(nameof(clusterConnectionStrings));
                }

                _clusterConnectionStrings = clusterConnectionStrings.ToArray();
                _ib = new IdleBus <RedisClientPool>(TimeSpan.FromMinutes(10));
                RefershClusterNodes();
            }
コード例 #12
0
            public SentinelAdapter(RedisClient cli, ConnectionStringBuilder sentinelConnectionString, string[] sentinels, bool rw_splitting)
            {
                UseType           = UseType.Sentinel;
                _cli              = cli;
                _connectionString = sentinelConnectionString;
                _sentinels        = new LinkedList <string>(sentinels?.Select(a => a.ToLower()).Distinct() ?? new string[0]);
                _rw_splitting     = rw_splitting;
                if (_sentinels.Any() == false)
                {
                    throw new ArgumentNullException(nameof(sentinels));
                }

                _ib         = new IdleBus <RedisClientPool>();
                _ib.Notice += new EventHandler <IdleBus <string, RedisClientPool> .NoticeEventArgs>((_, e) => { });
                ResetSentinel();
            }
コード例 #13
0
 public MultiTenantDbFactory(
     IHttpContextAccessor accessor,
     IdleBus <IFreeSql> ib,
     IAuthUser authUser,
     IOptionsMonitor <SystemConfig> systemConfig,
     IWebHostEnvironment env,
     ICache cache
     )
 {
     _accessor     = accessor;
     _ib           = ib;
     _authUser     = authUser;
     _systemConfig = systemConfig;
     _env          = env;
     _cache        = cache;
 }
コード例 #14
0
            public SentinelAdapter(RedisClient topOwner, ConnectionStringBuilder sentinelConnectionString, string[] sentinels, bool rw_splitting)
            {
                UseType           = UseType.Sentinel;
                TopOwner          = topOwner;
                _connectionString = sentinelConnectionString;
                _sentinels        = new LinkedList <string>(sentinels?.Select(a => a.ToLower()).Distinct() ?? new string[0]);
                _rw_splitting     = rw_splitting;
                _is_single        = !_rw_splitting && sentinelConnectionString.MaxPoolSize == 1;
                if (_sentinels.Any() == false)
                {
                    throw new ArgumentNullException(nameof(sentinels));
                }

                _ib         = new IdleBus <RedisClientPool>(TimeSpan.FromMinutes(10));
                _ib.Notice += new EventHandler <IdleBus <string, RedisClientPool> .NoticeEventArgs>((_, e) => { });
                ResetSentinel();
            }
コード例 #15
0
        public FreeSqlMultipleGenerator(FreeSqlMultipleGenOptions <TKey> options)
        {
            Options = options ?? new FreeSqlMultipleGenOptions <TKey>();

            if (Options.UseIdleBus)
            {
                IdleBus         = new IdleBus <TKey, IFreeSql>(Options.Idle);
                IdleBus.Notice += Notice;
            }
            else
            {
                Dic      = new Dictionary <TKey, IFreeSql>();
                getTimes = new Dictionary <TKey, long>();
            }

            //Register();
        }
コード例 #16
0
            public PoolingAdapter(RedisClient topOwner, ConnectionStringBuilder connectionString, params ConnectionStringBuilder[] slaveConnectionStrings)
            {
                UseType       = UseType.Pooling;
                TopOwner      = topOwner;
                _masterHost   = connectionString.Host;
                _rw_splitting = slaveConnectionStrings?.Any() == true;
                _is_single    = !_rw_splitting && connectionString.MaxPoolSize == 1;

                _ib = new IdleBus <RedisClientPool>(TimeSpan.FromMinutes(10));
                _ib.Register(_masterHost, () => new RedisClientPool(connectionString, null, TopOwner));

                if (_rw_splitting)
                {
                    foreach (var slave in slaveConnectionStrings)
                    {
                        _ib.TryRegister($"slave_{slave.Host}", () => new RedisClientPool(slave, null, TopOwner));
                    }
                }
            }
コード例 #17
0
            public PoolingAdapter(RedisClient cli, ConnectionStringBuilder connectionString, params ConnectionStringBuilder[] slaveConnectionStrings)
            {
                UseType      = UseType.Pooling;
                _cli         = cli;
                _masterHost  = connectionString.Host;
                _rw_plitting = slaveConnectionStrings?.Any() == true;

                _ib         = new IdleBus <RedisClientPool>();
                _ib.Notice += new EventHandler <IdleBus <string, RedisClientPool> .NoticeEventArgs>((_, e) => { });
                _ib.Register(_masterHost, () => new RedisClientPool(connectionString, null, _cli.Serialize, _cli.Deserialize));

                if (_rw_plitting)
                {
                    foreach (var slave in slaveConnectionStrings)
                    {
                        _ib.TryRegister($"slave_{slave.Host}", () => new RedisClientPool(slave, null, _cli.Serialize, _cli.Deserialize));
                    }
                }
            }
コード例 #18
0
            public NormanAdapter(RedisClient topOwner, ConnectionStringBuilder[] connectionStrings, Func <string, string> redirectRule)
            {
                UseType  = UseType.Cluster;
                TopOwner = topOwner;

                if (connectionStrings.Any() != true)
                {
                    throw new ArgumentNullException(nameof(connectionStrings));
                }

                _connectionStrings = connectionStrings.ToArray();
                _ib = new IdleBus <RedisClientPool>(TimeSpan.FromMinutes(10));
                foreach (var connectionString in _connectionStrings)
                {
                    RegisterClusterNode(connectionString);
                }

                _redirectRule = redirectRule;
            }
コード例 #19
0
        private void button4_Click(object sender, EventArgs e)
        {
            ib?.Dispose();
            ib         = new IdleBus(TimeSpan.FromSeconds(10));
            ib.Notice += (_, e2) =>
            {
                var log = $"[{DateTime.Now.ToString("HH:mm:ss")}] 线程{Thread.CurrentThread.ManagedThreadId}:{e2.Log}";
                //Trace.WriteLine(log);
                Console.WriteLine(log);
            };

            ib
            .Register("key1", () => new ManualResetEvent(false))
            .Register("key2", () => new AutoResetEvent(false));

            for (var a = 3; a < 2000; a++)
            {
                ib.Register("key" + a, () => new System.Data.SqlClient.SqlConnection());
            }
        }
コード例 #20
0
        public static void AddFreeSql(this IServiceCollection services, Action <FreeSqlOptions> action = null)
        {
            FreeSqlOptions freeSqlOptions = new FreeSqlOptions();

            action?.Invoke(freeSqlOptions);
            services.AddSingleton(freeSqlOptions);
            IdleBus <IFreeSql> ib = new IdleBus <IFreeSql>(freeSqlOptions.TimeSpan);

            //Dictionary<string, IFreeSql> dic = new Dictionary<string, IFreeSql>();
            foreach (var item in freeSqlOptions.FreeSqlDbs)
            {
                var isRegisterSucess = ib.TryRegister(item.Name, () =>
                {
                    var freesql = new FreeSqlBuilder()
                                  .UseConnectionString(item.DataType, item.ConnectString)
                                  .UseAutoSyncStructure(item.IsAutoSyncStructure) //自动同步实体结构到数据库
                                  .UseNoneCommandParameter(item.IsNoneCommandParameter)
                                  .UseLazyLoading(item.IsLazyLoading)
                                  .UseNameConvert(item.NameConvertType)
                                  .UseMonitorCommand(item.Executing, item.Executed).Build();
                    freesql.UseJsonMap();
                    return(freesql);
                });
                if (!isRegisterSucess)
                {
                    throw new Exception($"{item.Name}数据库注入失败");
                }
            }

            services.AddSingleton <IFreeSqlTransPortService, FreeSqlTransPortService>();
            services.AddSingleton(ib);
            TransPortServiceDependencyInjection.AddFunc((serviceProvider, name) =>
            {
                if (name.Equals(FreeSqlConstant.FREESQLNAME, StringComparison.OrdinalIgnoreCase))
                {
                    return(serviceProvider.GetService <IFreeSqlTransPortService>());
                }
                return(null);
            });
        }
コード例 #21
0
        /// <summary>
        /// 公共服务
        /// </summary>
        /// <param name="services"></param>
        /// <returns></returns>
        public static void AddService(this IServiceCollection services)
        {
            //HttpContextAccessor
            services.AddHttpContextAccessor();

            //注册编码
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

            //nlog配置文件
            NLog.LogManager.LoadConfiguration("nlog.config");

            //IdleBus
            services.AddSingleton(sp =>
            {
                var ib      = new IdleBus <IFreeSql>(TimeSpan.FromMinutes(10));
                var section = sp.GetService <IConfiguration>().GetSection("DataSource");
                foreach (var item in section.GetChildren())
                {
                    //数据库类型
                    var dbType = section[$"{item.Key}:Type"] != null ? Enum.Parse <DataType>(section[$"{item.Key}:Type"], true) : DataType.SqlServer;
                    //连接字符串
                    var connStr = item.Value ?? section[$"{item.Key}:Value"];
                    ib.Register(item.Key, () => new FreeSqlBuilder().UseConnectionString(dbType, connStr).Build());
                }
                return(ib);
            });

            //freeredis
            services.AddSingleton(sp =>
            {
                var redisConfig      = sp.GetService <IConfiguration>().GetSection("Redis").Get <RedisConfig>();
                var connectionString = string.Format("{0},defaultDatabase={2},poolsize=50,preheat=true,ssl=false,writeBuffer=10240,tryit=0,name={1},prefix={1}",
                                                     redisConfig.ConnectionString, redisConfig.InstanceName, redisConfig.Db ?? 0);
                var cli = new RedisClient(connectionString);
                return(cli);
            });

            //BaseRepository
            services.AddScoped(typeof(ISimpleRepository <>), typeof(SimpleRepository <>));
        }
コード例 #22
0
ファイル: Program.cs プロジェクト: zeroyou/IdleBus
        static void Main(string[] args)
        {
            //超过20秒没有使用,就销毁【实例】
            var ib = new IdleBus(TimeSpan.FromSeconds(20));

            ib.Notice += (_, e) =>
            {
                Console.WriteLine("    " + e.Log);

                if (e.NoticeType == IdleBus <IDisposable> .NoticeType.AutoRelease)
                {
                    Console.WriteLine($"    [{DateTime.Now.ToString("g")}] {e.Key} 空闲被回收");
                }
            };

            while (true)
            {
                Console.WriteLine("输入 > ");
                var line = Console.ReadLine().Trim();
                if (string.IsNullOrEmpty(line))
                {
                    break;
                }

                // 注册
                ib.TryRegister(line, () => new TestInfo());

                // 第一次:创建
                TestInfo item = ib.Get(line) as TestInfo;

                // 第二次:直接获取,长驻内存直到空闲销毁
                item = ib.Get(line) as TestInfo;
            }

            ib.Dispose();
        }
コード例 #23
0
ファイル: UnitTest3.cs プロジェクト: lucifer8900/FreeSql
        public void Test03()
        {
            var sqlxx = g.pgsql.InsertOrUpdate <userinfo>().SetSource(new userinfo {
                userid = 10
            }).UpdateColumns(a => new { a.birthday, a.CardNo }).ToSql();

            var aff1 = g.sqlite.GetRepository <Edi, long>().Delete(10086);
            var aff2 = g.sqlite.Delete <Edi>(10086).ExecuteAffrows();

            Assert.Equal(aff1, aff2);


            var testStringFormat = g.sqlite.Select <Edi>().First(a => new {
                str  = $"x{a.Id}_{DateTime.Now.ToString("yyyyMM")}z",
                str2 = string.Format("{0}x{0}_{1}z", a.Id, DateTime.Now.ToString("yyyyMM"))
            });



            var sql123 = g.sqlserver.Select <Edi>()

                         .WithSql(
                g.sqlserver.Select <Edi>().ToSql(a => new { a.Id }, FieldAliasOptions.AsProperty) +
                " UNION ALL " +
                g.sqlserver.Select <Edi>().ToSql(a => new { a.Id }, FieldAliasOptions.AsProperty))

                         .Page(1, 10).ToSql("Id");

            var sqlextMax1 = g.mysql.Select <EdiItem>()
                             .GroupBy(a => a.Id)
                             .ToSql(a => new
            {
                Id = a.Key, EdiId = SqlExt.Max(a.Key).Over().ToValue()
            });

            var sqlextGroupConcat = g.mysql.Select <Edi, EdiItem>()
                                    .InnerJoin((a, b) => b.Id == a.Id)
                                    .ToSql((a, b) => new
            {
                Id    = a.Id,
                EdiId = b.Id,
                case1 = SqlExt.Case()
                        .When(a.Id == 1, 10)
                        .When(a.Id == 2, 11)
                        .When(a.Id == 3, 12)
                        .When(a.Id == 4, 13)
                        .When(a.Id == 5, SqlExt.Case().When(b.Id == 1, 10000).Else(999).End())
                        .End(),
                groupct1 = SqlExt.GroupConcat(a.Id).Distinct().OrderBy(b.EdiId).Separator("_").ToValue()
            });
            var sqlextGroupConcatToList = g.mysql.Select <Edi, EdiItem>()
                                          .InnerJoin((a, b) => b.Id == a.Id)
                                          .ToList((a, b) => new
            {
                Id    = a.Id,
                EdiId = b.Id,
                case1 = SqlExt.Case()
                        .When(a.Id == 1, 10)
                        .When(a.Id == 2, 11)
                        .When(a.Id == 3, 12)
                        .When(a.Id == 4, 13)
                        .When(a.Id == 5, SqlExt.Case().When(b.Id == 1, 10000).Else(999).End())
                        .End(),
                groupct1 = SqlExt.GroupConcat(a.Id).Distinct().OrderBy(b.EdiId).Separator("_").ToValue()
            });

            var sqlextCase = g.sqlserver.Select <Edi, EdiItem>()
                             .InnerJoin((a, b) => b.Id == a.Id)
                             .ToSql((a, b) => new
            {
                Id    = a.Id,
                EdiId = b.Id,
                case1 = SqlExt.Case()
                        .When(a.Id == 1, 10)
                        .When(a.Id == 2, 11)
                        .When(a.Id == 3, 12)
                        .When(a.Id == 4, 13)
                        .When(a.Id == 5, SqlExt.Case().When(b.Id == 1, 10000).Else(999).End())
                        .End(),
                over1 = SqlExt.Rank().Over().OrderBy(a.Id).OrderByDescending(b.EdiId).ToValue(),
            });
            var sqlextCaseToList = g.sqlserver.Select <Edi, EdiItem>()
                                   .InnerJoin((a, b) => b.Id == a.Id)
                                   .ToList((a, b) => new
            {
                Id    = a.Id,
                EdiId = b.Id,
                case1 = SqlExt.Case()
                        .When(a.Id == 1, 10)
                        .When(a.Id == 2, 11)
                        .When(a.Id == 3, 12)
                        .When(a.Id == 4, 13)
                        .When(a.Id == 5, SqlExt.Case().When(b.Id == 1, 10000).Else(999).End())
                        .End(),
                over1 = SqlExt.Rank().Over().OrderBy(a.Id).OrderByDescending(b.EdiId).ToValue(),
            });


            var sqlextOver = g.sqlserver.Select <Edi, EdiItem>()
                             .InnerJoin((a, b) => b.Id == a.Id)
                             .ToSql((a, b) => new
            {
                Id    = a.Id,
                EdiId = b.Id,
                over1 = SqlExt.Rank().Over().OrderBy(a.Id).OrderByDescending(b.EdiId).ToValue()
            });
            var sqlextOverToList = g.sqlserver.Select <Edi, EdiItem>()
                                   .InnerJoin((a, b) => b.Id == a.Id)
                                   .ToList((a, b) => new
            {
                Id    = a.Id,
                EdiId = b.Id,
                over1 = SqlExt.Rank().Over().OrderBy(a.Id).OrderByDescending(b.EdiId).ToValue()
            });

            var tttrule = 8;
            var tttid   = new long[] { 18, 19, 4017 };

            g.sqlserver.Update <Author123>().Set(it => it.SongId == (short)(it.SongId & ~tttrule)).Where(it => (it.SongId & tttrule) == tttrule && !tttid.Contains(it.Id)).ExecuteAffrows();

            g.sqlite.Delete <Song123>().Where("1=1").ExecuteAffrows();
            g.sqlite.Delete <Author123>().Where("1=1").ExecuteAffrows();
            g.sqlite.Insert(new Song123(1)).ExecuteAffrows();
            g.sqlite.Insert(new Author123(11, 1)).ExecuteAffrows();
            var song = g.sqlite.Select <Song123>()
                       .From <Author123>((a, b) => a.InnerJoin(a1 => a1.Id == b.SongId))
                       .First((a, b) => a); // throw error

            Console.WriteLine(song == null);

            g.sqlite.Select <Edi>().ToList();

            var itemId2 = 2;
            var itemId  = 1;
            var edi     = g.sqlite.Select <Edi>()
                          .Where(a => a.Id == itemId2 && g.sqlite.Select <EdiItem>().Where(b => b.Id == itemId).Any())
                          .First(a => a); //#231

            var lksdjkg1 = g.sqlite.Select <Edi>()
                           .AsQueryable().Where(a => a.Id > 0).Where(a => a.Id == 1).ToList();

            var lksdjkg11 = g.sqlite.Select <Edi>()
                            .AsQueryable().Where(a => a.Id > 0).Where(a => a.Id == 1).Any();

            var lksdjkg2 = g.sqlite.Select <Edi>()
                           .AsQueryable().Where(a => a.Id > 0).First();

            var lksdjkg3 = g.sqlite.Select <Edi>()
                           .AsQueryable().Where(a => a.Id > 0).FirstOrDefault();


            var sql222efe = g.sqlite.Select <Edi, EdiItem>()
                            .InnerJoin((a, b) => b.Id == g.sqlite.Select <EdiItem>().As("c").Where(c => c.EdiId == a.Id).OrderBy(c => c.Id).ToOne(c => c.Id))
                            .ToSql((a, b) => new
            {
                Id    = a.Id,
                EdiId = b.Id
            });

            var subSyetemId = "xxx";
            var list        = g.sqlite.Select <Menu, SubSystem>()
                              .LeftJoin((a, b) => a.SubNameID == b.Id)
                              .WhereIf(!string.IsNullOrEmpty(subSyetemId), (a, s) => a.SubNameID == subSyetemId)
                              .ToList((a, s) => new Menu
            {
                ID           = a.ID,
                SystemName   = s.Name,
                SubNameID    = s.Id,
                CreateTime   = a.CreateTime,
                Description  = a.Description,
                EnName       = a.EnName,
                Name         = a.Name,
                OperationIds = a.OperationIds,
                Parent       = a.Parent,
                ParentID     = a.ParentID,
                Url          = a.Url,
                UserID       = a.UserID
            });



            var context = new TestDbContext(g.sqlite);

            var sql = context.Songs
                      .Where(a =>
                             context.Authors
                             //.Select  //加上这句就不报错,不加上报 variable 'a' of type 'Song' referenced from scope '', but it is not defined
                             .Where(b => b.SongId == a.Id)
                             .Any())
                      .ToSql(a => a.Name);

            sql = context.Songs
                  .Where(a =>
                         context.Authors
                         .Select //加上这句就不报错,不加上报 variable 'a' of type 'Song' referenced from scope '', but it is not defined
                         .Where(b => b.SongId == a.Id)
                         .Any())
                  .ToSql(a => a.Name);

            //using (var conn = new SqlConnection("Data Source=.;Integrated Security=True;Initial Catalog=webchat-abc;Pooling=true;Max Pool Size=13"))
            //{
            //    conn.Open();
            //    conn.Close();
            //}

            //using (var fsql = new FreeSql.FreeSqlBuilder()
            //    .UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=webchat-abc;Pooling=true;Max Pool Size=13")
            //    .UseAutoSyncStructure(true)
            //    //.UseGenerateCommandParameterWithLambda(true)
            //    .UseMonitorCommand(
            //        cmd => Trace.WriteLine("\r\n线程" + Thread.CurrentThread.ManagedThreadId + ": " + cmd.CommandText) //监听SQL命令对象,在执行前
            //        //, (cmd, traceLog) => Console.WriteLine(traceLog)
            //        )
            //    .UseLazyLoading(true)
            //    .Build())
            //{
            //    fsql.Select<ut3_t1>().ToList();
            //}

            //var testByte = new TestByte { pic = File.ReadAllBytes(@"C:\Users\28810\Desktop\71500003-0ad69400-289e-11ea-85cb-36a54f52ebc0.png") };
            //var sql = g.sqlserver.Insert(testByte).NoneParameter().ToSql();
            //g.sqlserver.Insert(testByte).NoneParameter().ExecuteAffrows();

            //var getTestByte = g.sqlserver.Select<TestByte>(testByte).First();

            //File.WriteAllBytes(@"C:\Users\28810\Desktop\71500003-0ad69400-289e-11ea-85cb-36a54f52ebc0_write.png", getTestByte.pic);

            var ib = new IdleBus <IFreeSql>(TimeSpan.FromMinutes(10));

            ib.Notice += (_, e2) => Trace.WriteLine($"[{DateTime.Now.ToString("HH:mm:ss")}] 线程{Thread.CurrentThread.ManagedThreadId}:{e2.Log}");

            ib.Register("db1", () => new FreeSql.FreeSqlBuilder()
                        .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=3")
                        .UseAutoSyncStructure(true)
                        .UseGenerateCommandParameterWithLambda(true)
                        .UseMonitorCommand(cmd => Trace.WriteLine("\r\n线程" + Thread.CurrentThread.ManagedThreadId + ": " + cmd.CommandText))
                        .UseLazyLoading(true)
                        .Build());
            ib.Register("db2", () => new FreeSql.FreeSqlBuilder()
                        .UseConnectionString(FreeSql.DataType.Oracle, "user id=user1;password=123456;data source=//127.0.0.1:1521/XE;Pooling=true;Max Pool Size=3")
                        .UseAutoSyncStructure(true)
                        .UseGenerateCommandParameterWithLambda(true)
                        .UseLazyLoading(true)
                        .UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper)
                        .UseMonitorCommand(cmd => Trace.WriteLine("\r\n线程" + Thread.CurrentThread.ManagedThreadId + ": " + cmd.CommandText))
                        .Build());
            ib.Register("db3", () => new FreeSql.FreeSqlBuilder()
                        .UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=|DataDirectory|\document.db;Attachs=xxxtb.db;Pooling=true;Max Pool Size=3")
                        .UseAutoSyncStructure(true)
                        .UseGenerateCommandParameterWithLambda(true)
                        .UseLazyLoading(true)
                        .UseMonitorCommand(cmd => Trace.WriteLine("\r\n线程" + Thread.CurrentThread.ManagedThreadId + ": " + cmd.CommandText))
                        .Build());
            //...注入很多个

            var fsql       = ib.Get("db1"); //使用的时候用 Get 方法,不要存其引用关系
            var sqlparamId = 100;

            fsql.Select <ut3_t1>().Limit(10).Where(a => a.id == sqlparamId).ToList();

            fsql = ib.Get("db2");
            fsql.Select <ut3_t1>().Limit(10).Where(a => a.id == sqlparamId).ToList();

            fsql = ib.Get("db3");
            fsql.Select <ut3_t1>().Limit(10).Where(a => a.id == sqlparamId).ToList();

            fsql = g.sqlserver;
            fsql.Insert <OrderMain>(new OrderMain {
                OrderNo = "1001", OrderTime = new DateTime(2019, 12, 01)
            }).ExecuteAffrows();
            fsql.Insert <OrderDetail>(new OrderDetail {
                OrderNo = "1001", ItemNo = "I001", Qty = 1
            }).ExecuteAffrows();
            fsql.Insert <OrderDetail>(new OrderDetail {
                OrderNo = "1001", ItemNo = "I002", Qty = 1
            }).ExecuteAffrows();
            fsql.Insert <OrderDetail>(new OrderDetail {
                OrderNo = "1001", ItemNo = "I003", Qty = 1
            }).ExecuteAffrows();
            fsql.Insert <OrderMain>(new OrderMain {
                OrderNo = "1002", OrderTime = new DateTime(2019, 12, 02)
            }).ExecuteAffrows();
            fsql.Insert <OrderDetail>(new OrderDetail {
                OrderNo = "1002", ItemNo = "I011", Qty = 1
            }).ExecuteAffrows();
            fsql.Insert <OrderDetail>(new OrderDetail {
                OrderNo = "1002", ItemNo = "I012", Qty = 1
            }).ExecuteAffrows();
            fsql.Insert <OrderDetail>(new OrderDetail {
                OrderNo = "1002", ItemNo = "I013", Qty = 1
            }).ExecuteAffrows();
            fsql.Ado.Query <object>("select * from orderdetail left join ordermain on orderdetail.orderno=ordermain.orderno where ordermain.orderno='1001'");


            g.oracle.Delete <SendInfo>().Where("1=1").ExecuteAffrows();
            g.oracle.Insert(new[]
            {
                new SendInfo {
                    Code = "001", Binary = Encoding.UTF8.GetBytes("我是中国人")
                },
                new SendInfo {
                    Code = "002", Binary = Encoding.UTF8.GetBytes("我是地球人")
                },
                new SendInfo {
                    Code = "003", Binary = Encoding.UTF8.GetBytes("我是.net")
                },
                new SendInfo {
                    Code = "004", Binary = Encoding.UTF8.GetBytes("我是freesql")
                },
                new SendInfo {
                    Code = "005", Binary = Encoding.UTF8.GetBytes("我是freesql233")
                },
            })
            .NoneParameter()
            .BatchOptions(3, 200)
            .BatchProgress(a => Trace.WriteLine($"{a.Current}/{a.Total}"))
            .ExecuteAffrows();

            var slslsl = g.oracle.Select <SendInfo>().ToList();

            var slsls1Ids = slslsl.Select(a => a.ID).ToArray();
            var slslss2   = g.oracle.Select <SendInfo>().Where(a => slsls1Ids.Contains(a.ID)).ToList();

            var mt_codeId = Guid.Parse("2f48c5ca-7257-43c8-9ee2-0e16fa990253");

            Assert.Equal(1, g.oracle.Insert(new SendInfo {
                ID = mt_codeId, Code = "mt_code", Binary = Encoding.UTF8.GetBytes("我是mt_code")
            })
                         .ExecuteAffrows());
            var mt_code = g.oracle.Select <SendInfo>().Where(a => a.ID == mt_codeId).First();

            Assert.NotNull(mt_code);
            Assert.Equal(mt_codeId, mt_code.ID);
            Assert.Equal("mt_code", mt_code.Code);

            mt_code = g.oracle.Select <SendInfo>().Where(a => a.ID == Guid.Parse("2f48c5ca725743c89ee20e16fa990253".ToUpper())).First();
            Assert.NotNull(mt_code);
            Assert.Equal(mt_codeId, mt_code.ID);
            Assert.Equal("mt_code", mt_code.Code);

            mt_codeId = Guid.Parse("2f48c5ca-7257-43c8-9ee2-0e16fa990251");
            Assert.Equal(1, g.oracle.Insert(new SendInfo {
                ID = mt_codeId, Code = "mt_code2", Binary = Encoding.UTF8.GetBytes("我是mt_code2")
            })
                         .NoneParameter()
                         .ExecuteAffrows());
            mt_code = g.oracle.Select <SendInfo>().Where(a => a.ID == mt_codeId).First();
            Assert.NotNull(mt_code);
            Assert.Equal(mt_codeId, mt_code.ID);
            Assert.Equal("mt_code2", mt_code.Code);

            mt_code = g.oracle.Select <SendInfo>().Where(a => a.ID == Guid.Parse("2f48c5ca725743c89ee20e16fa990251".ToUpper())).First();
            Assert.NotNull(mt_code);
            Assert.Equal(mt_codeId, mt_code.ID);
            Assert.Equal("mt_code2", mt_code.Code);

            var id = g.oracle.Insert(new TestORC12()).ExecuteIdentity();
        }
コード例 #24
0
ファイル: UnitTest3.cs プロジェクト: zsqingqingqing/FreeSql
        public void Test03()
        {
            g.sqlite.Select <Edi>().ToList();

            var itemId2 = 2;
            var itemId  = 1;
            var edi     = g.sqlite.Select <Edi>()
                          .Where(a => a.Id == itemId2 && g.sqlite.Select <EdiItem>().Where(b => b.Id == itemId).Any())
                          .First(a => a); //#231

            var lksdjkg1 = g.sqlite.Select <Edi>()
                           .AsQueryable().Where(a => a.Id > 0).ToList();

            var lksdjkg2 = g.sqlite.Select <Edi>()
                           .AsQueryable().Where(a => a.Id > 0).First();

            var lksdjkg3 = g.sqlite.Select <Edi>()
                           .AsQueryable().Where(a => a.Id > 0).FirstOrDefault();


            var sql222efe = g.sqlite.Select <Edi, EdiItem>()
                            .InnerJoin((a, b) => b.Id == g.sqlite.Select <EdiItem>().As("c").Where(c => c.EdiId == a.Id).OrderBy(c => c.Id).ToOne(c => c.Id))
                            .ToSql((a, b) => new
            {
                Id    = a.Id,
                EdiId = b.Id
            });

            var subSyetemId = "xxx";
            var list        = g.sqlite.Select <Menu, SubSystem>()
                              .LeftJoin((a, b) => a.SubNameID == b.Id)
                              .WhereIf(!string.IsNullOrEmpty(subSyetemId), (a, s) => a.SubNameID == subSyetemId)
                              .ToList((a, s) => new Menu
            {
                ID           = a.ID,
                SystemName   = s.Name,
                SubNameID    = s.Id,
                CreateTime   = a.CreateTime,
                Description  = a.Description,
                EnName       = a.EnName,
                Name         = a.Name,
                OperationIds = a.OperationIds,
                Parent       = a.Parent,
                ParentID     = a.ParentID,
                Url          = a.Url,
                UserID       = a.UserID
            });



            var context = new TestDbContext(g.sqlite);

            var sql = context.Songs
                      .Where(a =>
                             context.Authors
                             //.Select  //加上这句就不报错,不加上报 variable 'a' of type 'Song' referenced from scope '', but it is not defined
                             .Where(b => b.SongId == a.Id)
                             .Any())
                      .ToSql(a => a.Name);

            sql = context.Songs
                  .Where(a =>
                         context.Authors
                         .Select //加上这句就不报错,不加上报 variable 'a' of type 'Song' referenced from scope '', but it is not defined
                         .Where(b => b.SongId == a.Id)
                         .Any())
                  .ToSql(a => a.Name);

            //using (var conn = new SqlConnection("Data Source=.;Integrated Security=True;Initial Catalog=webchat-abc;Pooling=true;Max Pool Size=13"))
            //{
            //    conn.Open();
            //    conn.Close();
            //}

            //using (var fsql = new FreeSql.FreeSqlBuilder()
            //    .UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=webchat-abc;Pooling=true;Max Pool Size=13")
            //    .UseAutoSyncStructure(true)
            //    //.UseGenerateCommandParameterWithLambda(true)
            //    .UseMonitorCommand(
            //        cmd => Trace.WriteLine("\r\n线程" + Thread.CurrentThread.ManagedThreadId + ": " + cmd.CommandText) //监听SQL命令对象,在执行前
            //        //, (cmd, traceLog) => Console.WriteLine(traceLog)
            //        )
            //    .UseLazyLoading(true)
            //    .Build())
            //{
            //    fsql.Select<ut3_t1>().ToList();
            //}

            //var testByte = new TestByte { pic = File.ReadAllBytes(@"C:\Users\28810\Desktop\71500003-0ad69400-289e-11ea-85cb-36a54f52ebc0.png") };
            //var sql = g.sqlserver.Insert(testByte).NoneParameter().ToSql();
            //g.sqlserver.Insert(testByte).NoneParameter().ExecuteAffrows();

            //var getTestByte = g.sqlserver.Select<TestByte>(testByte).First();

            //File.WriteAllBytes(@"C:\Users\28810\Desktop\71500003-0ad69400-289e-11ea-85cb-36a54f52ebc0_write.png", getTestByte.pic);

            var ib = new IdleBus <IFreeSql>(TimeSpan.FromMinutes(10), 2);

            ib.Notice += (_, e2) => Trace.WriteLine($"[{DateTime.Now.ToString("HH:mm:ss")}] 线程{Thread.CurrentThread.ManagedThreadId}:{e2.Log}");

            ib.Register("db1", () => new FreeSql.FreeSqlBuilder()
                        .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=3")
                        .UseAutoSyncStructure(true)
                        .UseGenerateCommandParameterWithLambda(true)
                        .UseMonitorCommand(cmd => Trace.WriteLine("\r\n线程" + Thread.CurrentThread.ManagedThreadId + ": " + cmd.CommandText))
                        .UseLazyLoading(true)
                        .Build());
            ib.Register("db2", () => new FreeSql.FreeSqlBuilder()
                        .UseConnectionString(FreeSql.DataType.Oracle, "user id=user1;password=123456;data source=//127.0.0.1:1521/XE;Pooling=true;Max Pool Size=3")
                        .UseAutoSyncStructure(true)
                        .UseGenerateCommandParameterWithLambda(true)
                        .UseLazyLoading(true)
                        .UseSyncStructureToUpper(true)
                        .UseMonitorCommand(cmd => Trace.WriteLine("\r\n线程" + Thread.CurrentThread.ManagedThreadId + ": " + cmd.CommandText))
                        .Build());
            ib.Register("db3", () => new FreeSql.FreeSqlBuilder()
                        .UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=|DataDirectory|\document.db;Attachs=xxxtb.db;Pooling=true;Max Pool Size=3")
                        .UseAutoSyncStructure(true)
                        .UseGenerateCommandParameterWithLambda(true)
                        .UseLazyLoading(true)
                        .UseMonitorCommand(cmd => Trace.WriteLine("\r\n线程" + Thread.CurrentThread.ManagedThreadId + ": " + cmd.CommandText))
                        .Build());
            //...注入很多个

            var fsql       = ib.Get("db1"); //使用的时候用 Get 方法,不要存其引用关系
            var sqlparamId = 100;

            fsql.Select <ut3_t1>().Limit(10).Where(a => a.id == sqlparamId).ToList();

            fsql = ib.Get("db2");
            fsql.Select <ut3_t1>().Limit(10).Where(a => a.id == sqlparamId).ToList();

            fsql = ib.Get("db3");
            fsql.Select <ut3_t1>().Limit(10).Where(a => a.id == sqlparamId).ToList();

            fsql = g.sqlserver;
            fsql.Insert <OrderMain>(new OrderMain {
                OrderNo = "1001", OrderTime = new DateTime(2019, 12, 01)
            }).ExecuteAffrows();
            fsql.Insert <OrderDetail>(new OrderDetail {
                OrderNo = "1001", ItemNo = "I001", Qty = 1
            }).ExecuteAffrows();
            fsql.Insert <OrderDetail>(new OrderDetail {
                OrderNo = "1001", ItemNo = "I002", Qty = 1
            }).ExecuteAffrows();
            fsql.Insert <OrderDetail>(new OrderDetail {
                OrderNo = "1001", ItemNo = "I003", Qty = 1
            }).ExecuteAffrows();
            fsql.Insert <OrderMain>(new OrderMain {
                OrderNo = "1002", OrderTime = new DateTime(2019, 12, 02)
            }).ExecuteAffrows();
            fsql.Insert <OrderDetail>(new OrderDetail {
                OrderNo = "1002", ItemNo = "I011", Qty = 1
            }).ExecuteAffrows();
            fsql.Insert <OrderDetail>(new OrderDetail {
                OrderNo = "1002", ItemNo = "I012", Qty = 1
            }).ExecuteAffrows();
            fsql.Insert <OrderDetail>(new OrderDetail {
                OrderNo = "1002", ItemNo = "I013", Qty = 1
            }).ExecuteAffrows();
            fsql.Ado.Query <object>("select * from orderdetail left join ordermain on orderdetail.orderno=ordermain.orderno where ordermain.orderno='1001'");


            g.oracle.Delete <SendInfo>().Where("1=1").ExecuteAffrows();
            g.oracle.Insert(new[]
            {
                new SendInfo {
                    Code = "001", Binary = Encoding.UTF8.GetBytes("我是中国人")
                },
                new SendInfo {
                    Code = "002", Binary = Encoding.UTF8.GetBytes("我是地球人")
                },
                new SendInfo {
                    Code = "003", Binary = Encoding.UTF8.GetBytes("我是.net")
                },
                new SendInfo {
                    Code = "004", Binary = Encoding.UTF8.GetBytes("我是freesql")
                },
            })
            .NoneParameter().ExecuteAffrows();

            var slslsl = g.oracle.Select <SendInfo>().ToList();

            var slsls1Ids = slslsl.Select(a => a.ID).ToArray();
            var slslss2   = g.oracle.Select <SendInfo>().Where(a => slsls1Ids.Contains(a.ID)).ToList();

            var mt_codeId = Guid.Parse("2f48c5ca-7257-43c8-9ee2-0e16fa990253");

            Assert.Equal(1, g.oracle.Insert(new SendInfo {
                ID = mt_codeId, Code = "mt_code", Binary = Encoding.UTF8.GetBytes("我是mt_code")
            })
                         .ExecuteAffrows());
            var mt_code = g.oracle.Select <SendInfo>().Where(a => a.ID == mt_codeId).First();

            Assert.NotNull(mt_code);
            Assert.Equal(mt_codeId, mt_code.ID);
            Assert.Equal("mt_code", mt_code.Code);

            mt_code = g.oracle.Select <SendInfo>().Where(a => a.ID == Guid.Parse("2f48c5ca725743c89ee20e16fa990253".ToUpper())).First();
            Assert.NotNull(mt_code);
            Assert.Equal(mt_codeId, mt_code.ID);
            Assert.Equal("mt_code", mt_code.Code);

            mt_codeId = Guid.Parse("2f48c5ca-7257-43c8-9ee2-0e16fa990251");
            Assert.Equal(1, g.oracle.Insert(new SendInfo {
                ID = mt_codeId, Code = "mt_code2", Binary = Encoding.UTF8.GetBytes("我是mt_code2")
            })
                         .NoneParameter()
                         .ExecuteAffrows());
            mt_code = g.oracle.Select <SendInfo>().Where(a => a.ID == mt_codeId).First();
            Assert.NotNull(mt_code);
            Assert.Equal(mt_codeId, mt_code.ID);
            Assert.Equal("mt_code2", mt_code.Code);

            mt_code = g.oracle.Select <SendInfo>().Where(a => a.ID == Guid.Parse("2f48c5ca725743c89ee20e16fa990251".ToUpper())).First();
            Assert.NotNull(mt_code);
            Assert.Equal(mt_codeId, mt_code.ID);
            Assert.Equal("mt_code2", mt_code.Code);

            var id = g.oracle.Insert(new TestORC12()).ExecuteIdentity();
        }
コード例 #25
0
 public MyUnitOfWorkManager(IdleBus <IFreeSql> ib, IServiceProvider serviceProvider) : base(ib.GetFreeSql(serviceProvider))
 {
 }
コード例 #26
0
 public MyUnitOfWorkManager(IdleBus <IFreeSql> ib, IUser user) : base(ib.Get(user.TenantId.Value))
 {
 }
コード例 #27
0
ファイル: HomeController.cs プロジェクト: zjx632/FreeSql
 public static IdleBus <IFreeSql> ChangeTenant(this IdleBus <IFreeSql> ib, string tenantId)
 {
     AsyncLocalTenantId.Value = tenantId;
     return(ib);
 }
コード例 #28
0
ファイル: HomeController.cs プロジェクト: zjx632/FreeSql
 public static IFreeSql Get(this IdleBus <IFreeSql> ib) => ib.Get(AsyncLocalTenantId.Value ?? "default");
コード例 #29
0
ファイル: HomeController.cs プロジェクト: zjx632/FreeSql
 public static IBaseRepository <T> GetRepository <T>(this IdleBus <IFreeSql> ib) where T : class => ib.Get().GetRepository <T>();
コード例 #30
0
ファイル: HomeController.cs プロジェクト: zjx632/FreeSql
 public YourDefaultRepository(IdleBus <IFreeSql> ib) : base(ib.Get(), null, null)
 {
 }