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) => { }); }
public ClusterAdapter(RedisClient cli, ConnectionStringBuilder[] clusterConnectionStrings) { UseType = UseType.Cluster; _cli = cli; _ib = new IdleBus <RedisClientPool>(); _ib.Notice += new EventHandler <IdleBus <string, RedisClientPool> .NoticeEventArgs>((_, e) => { }); }
/// <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); } }
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); } }
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(); }
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(); }
/// <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); } }
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 }
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>(); }
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); }
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(); }
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(); }
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; }
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(); }
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(); }
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)); } } }
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)); } } }
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; }
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()); } }
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); }); }
/// <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 <>)); }
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(); }
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(); }
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(); }
public MyUnitOfWorkManager(IdleBus <IFreeSql> ib, IServiceProvider serviceProvider) : base(ib.GetFreeSql(serviceProvider)) { }
public MyUnitOfWorkManager(IdleBus <IFreeSql> ib, IUser user) : base(ib.Get(user.TenantId.Value)) { }
public static IdleBus <IFreeSql> ChangeTenant(this IdleBus <IFreeSql> ib, string tenantId) { AsyncLocalTenantId.Value = tenantId; return(ib); }
public static IFreeSql Get(this IdleBus <IFreeSql> ib) => ib.Get(AsyncLocalTenantId.Value ?? "default");
public static IBaseRepository <T> GetRepository <T>(this IdleBus <IFreeSql> ib) where T : class => ib.Get().GetRepository <T>();
public YourDefaultRepository(IdleBus <IFreeSql> ib) : base(ib.Get(), null, null) { }