mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 17:20:49 +08:00 
			
		
		
		
	✨ support provider、Extensions Exceptions 多语言
This commit is contained in:
		@@ -24,7 +24,7 @@ namespace FreeSql
 | 
				
			|||||||
        static Func<IFreeSql> _resoleOrm;
 | 
					        static Func<IFreeSql> _resoleOrm;
 | 
				
			||||||
        internal static Func<IUnitOfWork> _resolveUow;
 | 
					        internal static Func<IUnitOfWork> _resolveUow;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public static IFreeSql Orm => _resoleOrm?.Invoke() ?? throw new Exception("BaseEntity.Initialization 初始化错误,获取到 IFreeSql 是 null");
 | 
					        public static IFreeSql Orm => _resoleOrm?.Invoke() ?? throw new Exception(CoreStrings.S_BaseEntity_Initialization_Error);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public static void Initialization(IFreeSql fsql, Func<IUnitOfWork> resolveUow) => Initialization(() => fsql, resolveUow);
 | 
					        public static void Initialization(IFreeSql fsql, Func<IUnitOfWork> resolveUow) => Initialization(() => fsql, resolveUow);
 | 
				
			||||||
        public static void Initialization(Func<IFreeSql> resoleOrm, Func<IUnitOfWork> resolveUow)
 | 
					        public static void Initialization(Func<IFreeSql> resoleOrm, Func<IUnitOfWork> resolveUow)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,7 +33,7 @@ public static class FreeSqlExtensionsLinqSql
 | 
				
			|||||||
    /// <returns></returns>
 | 
					    /// <returns></returns>
 | 
				
			||||||
    public static ISelect<T1> RestoreToSelect<T1>(this IQueryable<T1> that) where T1 : class
 | 
					    public static ISelect<T1> RestoreToSelect<T1>(this IQueryable<T1> that) where T1 : class
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        var queryable = that as QueryableProvider<T1, T1> ?? throw new Exception($"无法将 IQueryable<{typeof(T1).Name}> 转换为 ISelect<{typeof(T1).Name}>,因为他的实现不是 FreeSql.Extensions.Linq.QueryableProvider");
 | 
					        var queryable = that as QueryableProvider<T1, T1> ?? throw new Exception(CoreStrings.S_CannotBeConverted_To_ISelect(typeof(T1).Name));
 | 
				
			||||||
        return queryable._select;
 | 
					        return queryable._select;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -121,7 +121,7 @@ namespace FreeSql.Extensions.Linq
 | 
				
			|||||||
                    case "Average": return tplMaxMinAvgSum("Avg");
 | 
					                    case "Average": return tplMaxMinAvgSum("Avg");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    case "Concat":
 | 
					                    case "Concat":
 | 
				
			||||||
                        return throwCallExp(" 不支持");
 | 
					                        return throwCallExp(CoreStrings.Not_Support);
 | 
				
			||||||
                    case "Contains":
 | 
					                    case "Contains":
 | 
				
			||||||
                        if (callExp.Arguments.Count == 2)
 | 
					                        if (callExp.Arguments.Count == 2)
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
@@ -141,7 +141,7 @@ namespace FreeSql.Extensions.Linq
 | 
				
			|||||||
                            _select.Distinct();
 | 
					                            _select.Distinct();
 | 
				
			||||||
                            break;
 | 
					                            break;
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        return throwCallExp(" 不支持");
 | 
					                        return throwCallExp(CoreStrings.Not_Support);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    case "ElementAt":
 | 
					                    case "ElementAt":
 | 
				
			||||||
                    case "ElementAtOrDefault":
 | 
					                    case "ElementAtOrDefault":
 | 
				
			||||||
@@ -178,7 +178,7 @@ namespace FreeSql.Extensions.Linq
 | 
				
			|||||||
                            _select.InternalWhere(whereParam);
 | 
					                            _select.InternalWhere(whereParam);
 | 
				
			||||||
                            break;
 | 
					                            break;
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        return throwCallExp(" 不支持");
 | 
					                        return throwCallExp(CoreStrings.Not_Support);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    case "Skip":
 | 
					                    case "Skip":
 | 
				
			||||||
                        _select.Offset((int)callExp.Arguments[1].GetConstExprValue());
 | 
					                        _select.Offset((int)callExp.Arguments[1].GetConstExprValue());
 | 
				
			||||||
@@ -190,7 +190,7 @@ namespace FreeSql.Extensions.Linq
 | 
				
			|||||||
                    case "ToList":
 | 
					                    case "ToList":
 | 
				
			||||||
                        if (callExp.Arguments.Count == 1)
 | 
					                        if (callExp.Arguments.Count == 1)
 | 
				
			||||||
                            return _select.ToList();
 | 
					                            return _select.ToList();
 | 
				
			||||||
                        return throwCallExp(" 不支持");
 | 
					                        return throwCallExp(CoreStrings.Not_Support);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    case "Select":
 | 
					                    case "Select":
 | 
				
			||||||
                        var selectParam = (callExp.Arguments[1] as UnaryExpression)?.Operand as LambdaExpression;
 | 
					                        var selectParam = (callExp.Arguments[1] as UnaryExpression)?.Operand as LambdaExpression;
 | 
				
			||||||
@@ -199,7 +199,7 @@ namespace FreeSql.Extensions.Linq
 | 
				
			|||||||
                            _select._selectExpression = selectParam;
 | 
					                            _select._selectExpression = selectParam;
 | 
				
			||||||
                            break;
 | 
					                            break;
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        return throwCallExp(" 不支持");
 | 
					                        return throwCallExp(CoreStrings.Not_Support);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    case "Join":
 | 
					                    case "Join":
 | 
				
			||||||
                        if (callExp.Arguments.Count == 5)
 | 
					                        if (callExp.Arguments.Count == 5)
 | 
				
			||||||
@@ -241,13 +241,13 @@ namespace FreeSql.Extensions.Linq
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                    case "Last":
 | 
					                    case "Last":
 | 
				
			||||||
                    case "LastOrDefault":
 | 
					                    case "LastOrDefault":
 | 
				
			||||||
                        return throwCallExp(" 不支持");
 | 
					                        return throwCallExp(CoreStrings.Not_Support);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    case "GroupBy":
 | 
					                    case "GroupBy":
 | 
				
			||||||
                        return throwCallExp(" 不支持");
 | 
					                        return throwCallExp(CoreStrings.Not_Support);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    default:
 | 
					                    default:
 | 
				
			||||||
                        return throwCallExp(" 不支持");
 | 
					                        return throwCallExp(CoreStrings.Not_Support);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (tresult == null) return null;
 | 
					            if (tresult == null) return null;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -159,7 +159,7 @@ new Colorful.Formatter("推荐在实体类目录创建 gen.bat,双击它重新
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                    case "-nameoptions":
 | 
					                    case "-nameoptions":
 | 
				
			||||||
                        ArgsNameOptions = args[a + 1].Split(',').Select(opt => opt == "1").ToArray();
 | 
					                        ArgsNameOptions = args[a + 1].Split(',').Select(opt => opt == "1").ToArray();
 | 
				
			||||||
                        if (ArgsNameOptions.Length != 4) throw new ArgumentException("-NameOptions 参数错误,格式为:0,0,0,0");
 | 
					                        if (ArgsNameOptions.Length != 4) throw new ArgumentException(CoreStrings.S_NameOptions_Incorrect);
 | 
				
			||||||
                        a++;
 | 
					                        a++;
 | 
				
			||||||
                        break;
 | 
					                        break;
 | 
				
			||||||
                    case "-namespace":
 | 
					                    case "-namespace":
 | 
				
			||||||
@@ -168,7 +168,8 @@ new Colorful.Formatter("推荐在实体类目录创建 gen.bat,双击它重新
 | 
				
			|||||||
                        break;
 | 
					                        break;
 | 
				
			||||||
                    case "-db":
 | 
					                    case "-db":
 | 
				
			||||||
                        var dbargs = args[a + 1].Split(',', 2);
 | 
					                        var dbargs = args[a + 1].Split(',', 2);
 | 
				
			||||||
                        if (dbargs.Length != 2) throw new ArgumentException("-DB 参数错误,格式为:MySql,ConnectionString");
 | 
					                        if (dbargs.Length != 2) throw new ArgumentException(CoreStrings.S_DB_ParameterError);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        switch (dbargs[0].Trim().ToLower())
 | 
					                        switch (dbargs[0].Trim().ToLower())
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            case "mysql": ArgsDbType = DataType.MySql; break;
 | 
					                            case "mysql": ArgsDbType = DataType.MySql; break;
 | 
				
			||||||
@@ -181,7 +182,7 @@ new Colorful.Formatter("推荐在实体类目录创建 gen.bat,双击它重新
 | 
				
			|||||||
                            case "kingbasees": ArgsDbType = DataType.KingbaseES; break;
 | 
					                            case "kingbasees": ArgsDbType = DataType.KingbaseES; break;
 | 
				
			||||||
                            case "shentong": ArgsDbType = DataType.ShenTong; break;
 | 
					                            case "shentong": ArgsDbType = DataType.ShenTong; break;
 | 
				
			||||||
                            case "clickhouse": ArgsDbType = DataType.ClickHouse; break;
 | 
					                            case "clickhouse": ArgsDbType = DataType.ClickHouse; break;
 | 
				
			||||||
                            default: throw new ArgumentException($"-DB 参数错误,不支持的类型:\"{dbargs[0]}\"");
 | 
					                            default: throw new ArgumentException(CoreStrings.S_DB_ParameterError_UnsupportedType(dbargs[0]));
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        ArgsConnectionString = dbargs[1].Trim();
 | 
					                        ArgsConnectionString = dbargs[1].Trim();
 | 
				
			||||||
                        a++;
 | 
					                        a++;
 | 
				
			||||||
@@ -208,11 +209,11 @@ new Colorful.Formatter("推荐在实体类目录创建 gen.bat,双击它重新
 | 
				
			|||||||
                        a++;
 | 
					                        a++;
 | 
				
			||||||
                        break;
 | 
					                        break;
 | 
				
			||||||
                    default:
 | 
					                    default:
 | 
				
			||||||
                        throw new ArgumentException($"错误的参数设置:{args[a]}");
 | 
					                        throw new ArgumentException(CoreStrings.S_WrongParameter(args[a]));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (string.IsNullOrEmpty(ArgsConnectionString)) throw new ArgumentException($"-DB 参数错误,未提供 ConnectionString");
 | 
					            if (string.IsNullOrEmpty(ArgsConnectionString)) throw new ArgumentException(CoreStrings.S_DB_Parameter_Error_NoConnectionString);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            RazorEngine.Engine.Razor = RazorEngineService.Create(new RazorEngine.Configuration.TemplateServiceConfiguration
 | 
					            RazorEngine.Engine.Razor = RazorEngineService.Create(new RazorEngine.Configuration.TemplateServiceConfiguration
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -795,14 +795,5 @@
 | 
				
			|||||||
            <param name="that"></param>
 | 
					            <param name="that"></param>
 | 
				
			||||||
            <returns></returns>
 | 
					            <returns></returns>
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
        <member name="M:Microsoft.Extensions.DependencyInjection.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{FreeSql.FluentDataFilter},System.Reflection.Assembly[])">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            批量注入 Repository,可以参考代码自行调整
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
            <param name="services"></param>
 | 
					 | 
				
			||||||
            <param name="globalDataFilter"></param>
 | 
					 | 
				
			||||||
            <param name="assemblies"></param>
 | 
					 | 
				
			||||||
            <returns></returns>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
    </members>
 | 
					    </members>
 | 
				
			||||||
</doc>
 | 
					</doc>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -53,6 +53,7 @@
 | 
				
			|||||||
    value   : The object must be serialized with 
 | 
					    value   : The object must be serialized with 
 | 
				
			||||||
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
 | 
					            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
 | 
				
			||||||
            : and then encoded with base64 encoding.
 | 
					            : and then encoded with base64 encoding.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    mimetype: application/x-microsoft.net.object.bytearray.base64
 | 
					    mimetype: application/x-microsoft.net.object.bytearray.base64
 | 
				
			||||||
    value   : The object must be serialized into a byte array 
 | 
					    value   : The object must be serialized into a byte array 
 | 
				
			||||||
            : using a System.ComponentModel.TypeConverter
 | 
					            : using a System.ComponentModel.TypeConverter
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,99 @@
 | 
				
			|||||||
 | 
					using System.Threading;
 | 
				
			||||||
 | 
					using Xunit;
 | 
				
			||||||
 | 
					using Xunit.Abstractions;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace FreeSql.Tests.Properties
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public class ProviderExtensionsTests
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        private readonly ITestOutputHelper output;
 | 
				
			||||||
 | 
					        public ProviderExtensionsTests(ITestOutputHelper output)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            this.output = output;
 | 
				
			||||||
 | 
					            //Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("zh-Hans"); 
 | 
				
			||||||
 | 
					            //Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-Hans");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); 
 | 
				
			||||||
 | 
					            //Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //CoreStrings.Culture= new System.Globalization.CultureInfo("zh-CN"); 
 | 
				
			||||||
 | 
					            CoreStrings.Culture = new System.Globalization.CultureInfo("en-US"); 
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void AsTable_PropertyName_NotDateTimeTest()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            var x = CoreStrings.S_Access_InsertOnlyOneAtTime;
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					            x = CoreStrings.S_BaseEntity_Initialization_Error;
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					            x = CoreStrings.S_BlockAccess_WaitForRecovery(1, 2);
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					            x = CoreStrings.S_CannotBeConverted_To_ISelect(1);
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					            x = CoreStrings.S_ConnectionStringError;
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					            x = CoreStrings.S_ConnectionStringError_Check(1);
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					            x = CoreStrings.S_ConnectionStringError_CheckProject;
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					            x = CoreStrings.S_ConnectionStringError_CheckProjectConnection(1);
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					            x = CoreStrings.S_CustomAdapter_Cannot_Use_CreateCommand;
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					            x = CoreStrings.S_CustomAdapter_OnlySuppport_UseConnectionFactory;
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					            x = CoreStrings.S_Dameng_NotSupport_TablespaceSchemas(1);
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					            x = CoreStrings.S_DB_ParameterError;
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					            x = CoreStrings.S_DB_ParameterError_UnsupportedType(1);
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					            x = CoreStrings.S_DB_Parameter_Error_NoConnectionString;
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					            x = CoreStrings.S_Features_Unique(1, 2);
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					            x = CoreStrings.S_InsertOrUpdate_Unable_UpdateColumns;
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					            x = CoreStrings.S_MasterDatabase;
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					            x = CoreStrings.S_MygisGeometry_NotImplement(1);
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					            x = CoreStrings.S_NameOptions_Incorrect;
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					            x = CoreStrings.S_NotFound_Name("x");
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					            x = CoreStrings.S_NotImplementSkipOffset("oRACLE");
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					            x = CoreStrings.S_Not_Implemented_Feature;
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					            x = CoreStrings.S_Not_Implemented_FeedBack;
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					            x = CoreStrings.S_ObjectPool;
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					            x = CoreStrings.S_OldTableExists("old", "new");
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					            x = CoreStrings.S_OnConflictDoUpdate_MustIsPrimary;
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					            x = CoreStrings.S_Oracle_NotSupport_TablespaceSchemas(1);
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					            x = CoreStrings.S_ParsingFailed_UseRestoreToSelect(1, 2);
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					            x = CoreStrings.S_RequiresEntityPrimaryKey(1, 2);
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					            x = CoreStrings.S_SelectManayErrorType(1);
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					            x = CoreStrings.S_SlaveDatabase;
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					            x = CoreStrings.S_TypeMappingNotImplemented(1);
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					            x = CoreStrings.S_Type_IsNot_Migrable(1);
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					            x = CoreStrings.S_Type_IsNot_Migrable_0Attributes(1);
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					            x = CoreStrings.S_WrongParameter(1);
 | 
				
			||||||
 | 
					            output.WriteLine(x);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -5259,6 +5259,181 @@
 | 
				
			|||||||
            运行时错误,反射获取 IncludeMany 方法失败
 | 
					            运行时错误,反射获取 IncludeMany 方法失败
 | 
				
			||||||
            </summary>
 | 
					            </summary>
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:FreeSql.CoreStrings.S_Access_InsertOnlyOneAtTime">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            蛋疼的 Access 插入只能一条一条执行,不支持 values(..),(..) 也不支持 select .. UNION ALL select ..
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:FreeSql.CoreStrings.S_BaseEntity_Initialization_Error">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            BaseEntity.Initialization 初始化错误,获取到 IFreeSql 是 null
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.CoreStrings.S_BlockAccess_WaitForRecovery(System.Object,System.Object)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            【{thisName}】Block access and wait for recovery: {exMessage}
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.CoreStrings.S_CannotBeConverted_To_ISelect(System.Object)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            无法将 IQueryable<{typeofName}> 转换为 ISelect<{typeofName}>,因为他的实现不是 FreeSql.Extensions.Linq.QueryableProvider
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:FreeSql.CoreStrings.S_ConnectionStringError">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            连接字符串错误
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.CoreStrings.S_ConnectionStringError_Check(System.Object)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            【{thisName}】连接字符串错误,请检查。
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:FreeSql.CoreStrings.S_ConnectionStringError_CheckProject">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            连接字符串错误,或者检查项目属性 > 生成 > 目标平台:x86 | x64
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.CoreStrings.S_ConnectionStringError_CheckProjectConnection(System.Object)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            【{thisName}】连接字符串错误,请检查。或者检查项目属性 > 生成 > 目标平台:x86 | x64
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:FreeSql.CoreStrings.S_CustomAdapter_Cannot_Use_CreateCommand">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            FreeSql.Provider.CustomAdapter 无法使用 CreateCommand
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:FreeSql.CoreStrings.S_CustomAdapter_OnlySuppport_UseConnectionFactory">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            FreeSql.Provider.CustomAdapter 仅支持 UseConnectionFactory 方式构建 IFreeSql
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.CoreStrings.S_Dameng_NotSupport_TablespaceSchemas(System.Object)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            达梦 CodeFirst 不支持代码创建 tablespace 与 schemas {tbname}
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:FreeSql.CoreStrings.S_DB_Parameter_Error_NoConnectionString">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            -DB 参数错误,未提供 ConnectionString
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:FreeSql.CoreStrings.S_DB_ParameterError">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            -DB 参数错误,格式为:MySql,ConnectionString
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.CoreStrings.S_DB_ParameterError_UnsupportedType(System.Object)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            -DB 参数错误,不支持的类型:\"{dbargs}\"
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.CoreStrings.S_Features_Unique(System.Object,System.Object)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            {method} 是 FreeSql.Provider.{provider} 特有的功能
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:FreeSql.CoreStrings.S_InsertOrUpdate_Unable_UpdateColumns">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            fsql.InsertOrUpdate Sqlite 无法完成 UpdateColumns 操作
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:FreeSql.CoreStrings.S_MasterDatabase">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            主库
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.CoreStrings.S_MygisGeometry_NotImplement(System.Object)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            MygisGeometry.Parse 未实现 \"{wkt}\"
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:FreeSql.CoreStrings.S_NameOptions_Incorrect">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            -NameOptions 参数错误,格式为:0,0,0,0
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:FreeSql.CoreStrings.S_Not_Implemented_Feature">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					             未实现该功能
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:FreeSql.CoreStrings.S_Not_Implemented_FeedBack">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            未实现错误,请反馈给作者
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.CoreStrings.S_NotFound_Name(System.Object)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            找不到 {name}
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.CoreStrings.S_NotImplementSkipOffset(System.Object)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            FreeSql.Provider.{providerName} 未实现 Skip/Offset 功能,如果需要分页请使用判断上一次 id
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:FreeSql.CoreStrings.S_ObjectPool">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            对象池
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.CoreStrings.S_OldTableExists(System.Object,System.Object)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            旧表(OldName):{tboldname} 存在,数据库已存在 {tbname} 表,无法改名
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:FreeSql.CoreStrings.S_OnConflictDoUpdate_MustIsPrimary">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            OnConflictDoUpdate 功能要求实体类必须设置 IsPrimary 属性
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.CoreStrings.S_Oracle_NotSupport_TablespaceSchemas(System.Object)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            Oracle CodeFirst 不支持代码创建 tablespace 与 schemas {tbname}
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.CoreStrings.S_ParsingFailed_UseRestoreToSelect(System.Object,System.Object)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            解析失败 {callExpMethodName} {message},提示:可以使用扩展方法 IQueryable.RestoreToSelect() 还原为 ISelect 再查询
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.CoreStrings.S_RequiresEntityPrimaryKey(System.Object,System.Object)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            fsql.InsertOrUpdate + IfExistsDoNothing + {providerName}要求实体类 {tableCsName} 必须有主键
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.CoreStrings.S_SelectManayErrorType(System.Object)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            SelectMany 错误的类型:{typeFullName}
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:FreeSql.CoreStrings.S_SlaveDatabase">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            从库
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.CoreStrings.S_Type_IsNot_Migrable(System.Object)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            类型 {objentityTypeFullName} 不可迁移
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.CoreStrings.S_Type_IsNot_Migrable_0Attributes(System.Object)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            类型 {objentityTypeFullName} 不可迁移,可迁移属性0个
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.CoreStrings.S_TypeMappingNotImplemented(System.Object)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            未实现 {columnDbTypeTextFull} 类型映射
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.CoreStrings.S_WrongParameter(System.Object)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            错误的参数设置:{args}
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
        <member name="M:FreeSql.CoreStrings.Set_Column_IsNullable_False(System.Object)">
 | 
					        <member name="M:FreeSql.CoreStrings.Set_Column_IsNullable_False(System.Object)">
 | 
				
			||||||
            <summary>
 | 
					            <summary>
 | 
				
			||||||
            {qoteSql} is NULL,除非设置特性 [Column(IsNullable = false)]
 | 
					            {qoteSql} is NULL,除非设置特性 [Column(IsNullable = false)]
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										253
									
								
								FreeSql/Properties/CoreStrings.Designer.cs
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										253
									
								
								FreeSql/Properties/CoreStrings.Designer.cs
									
									
									
										generated
									
									
									
								
							@@ -1,11 +1,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// <auto-generated />
 | 
					// <auto-generated />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
using System;
 | 
					 | 
				
			||||||
using System.Reflection;
 | 
					 | 
				
			||||||
using System.Resources;
 | 
					 | 
				
			||||||
using System.Globalization;
 | 
					using System.Globalization;
 | 
				
			||||||
using System.Threading;
 | 
					using System.Resources;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace FreeSql
 | 
					namespace FreeSql
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -866,6 +863,254 @@ namespace FreeSql
 | 
				
			|||||||
        public static string RunTimeError_Reflection_IncludeMany
 | 
					        public static string RunTimeError_Reflection_IncludeMany
 | 
				
			||||||
            => GetString("RunTimeError_Reflection_IncludeMany");
 | 
					            => GetString("RunTimeError_Reflection_IncludeMany");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// 蛋疼的 Access 插入只能一条一条执行,不支持 values(..),(..) 也不支持 select .. UNION ALL select ..
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_Access_InsertOnlyOneAtTime
 | 
				
			||||||
 | 
					            => GetString("S_Access_InsertOnlyOneAtTime");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// BaseEntity.Initialization 初始化错误,获取到 IFreeSql 是 null
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_BaseEntity_Initialization_Error
 | 
				
			||||||
 | 
					            => GetString("S_BaseEntity_Initialization_Error");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// 【{thisName}】Block access and wait for recovery: {exMessage}
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_BlockAccess_WaitForRecovery(object thisName, object exMessage)
 | 
				
			||||||
 | 
					            => string.Format(
 | 
				
			||||||
 | 
					                GetString("S_BlockAccess_WaitForRecovery", nameof(thisName), nameof(exMessage)),
 | 
				
			||||||
 | 
					                thisName, exMessage);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// 无法将 IQueryable<{typeofName}> 转换为 ISelect<{typeofName}>,因为他的实现不是 FreeSql.Extensions.Linq.QueryableProvider
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_CannotBeConverted_To_ISelect(object typeofName)
 | 
				
			||||||
 | 
					            => string.Format(
 | 
				
			||||||
 | 
					                GetString("S_CannotBeConverted_To_ISelect", nameof(typeofName)),
 | 
				
			||||||
 | 
					                typeofName);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// 连接字符串错误
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_ConnectionStringError
 | 
				
			||||||
 | 
					            => GetString("S_ConnectionStringError");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// 【{thisName}】连接字符串错误,请检查。
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_ConnectionStringError_Check(object thisName)
 | 
				
			||||||
 | 
					            => string.Format(
 | 
				
			||||||
 | 
					                GetString("S_ConnectionStringError_Check", nameof(thisName)),
 | 
				
			||||||
 | 
					                thisName);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// 连接字符串错误,或者检查项目属性 > 生成 > 目标平台:x86 | x64
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_ConnectionStringError_CheckProject 
 | 
				
			||||||
 | 
					            => GetString("S_ConnectionStringError_CheckProject ");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// 【{thisName}】连接字符串错误,请检查。或者检查项目属性 > 生成 > 目标平台:x86 | x64
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_ConnectionStringError_CheckProjectConnection(object thisName)
 | 
				
			||||||
 | 
					            => string.Format(
 | 
				
			||||||
 | 
					                GetString("S_ConnectionStringError_CheckProjectConnection", nameof(thisName)),
 | 
				
			||||||
 | 
					                thisName);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// FreeSql.Provider.CustomAdapter 无法使用 CreateCommand
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_CustomAdapter_Cannot_Use_CreateCommand
 | 
				
			||||||
 | 
					            => GetString("S_CustomAdapter_Cannot_Use_CreateCommand");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// FreeSql.Provider.CustomAdapter 仅支持 UseConnectionFactory 方式构建 IFreeSql
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_CustomAdapter_OnlySuppport_UseConnectionFactory 
 | 
				
			||||||
 | 
					            => GetString("S_CustomAdapter_OnlySuppport_UseConnectionFactory ");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// 达梦 CodeFirst 不支持代码创建 tablespace 与 schemas {tbname}
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_Dameng_NotSupport_TablespaceSchemas  (object tbname)
 | 
				
			||||||
 | 
					            => string.Format(
 | 
				
			||||||
 | 
					                GetString("S_Dameng_NotSupport_TablespaceSchemas  ", nameof(tbname)),
 | 
				
			||||||
 | 
					                tbname);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// -DB 参数错误,未提供 ConnectionString
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_DB_Parameter_Error_NoConnectionString
 | 
				
			||||||
 | 
					            => GetString("S_DB_Parameter_Error_NoConnectionString");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// -DB 参数错误,格式为:MySql,ConnectionString
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_DB_ParameterError
 | 
				
			||||||
 | 
					            => GetString("S_DB_ParameterError");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// -DB 参数错误,不支持的类型:\"{dbargs}\"
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_DB_ParameterError_UnsupportedType(object dbargs)
 | 
				
			||||||
 | 
					            => string.Format(
 | 
				
			||||||
 | 
					                GetString("S_DB_ParameterError_UnsupportedType", nameof(dbargs)),
 | 
				
			||||||
 | 
					                dbargs);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// {method} 是 FreeSql.Provider.{provider} 特有的功能
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_Features_Unique(object method, object provider)
 | 
				
			||||||
 | 
					            => string.Format(
 | 
				
			||||||
 | 
					                GetString("S_Features_Unique", nameof(method), nameof(provider)),
 | 
				
			||||||
 | 
					                method, provider);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// fsql.InsertOrUpdate Sqlite 无法完成 UpdateColumns 操作
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_InsertOrUpdate_Unable_UpdateColumns
 | 
				
			||||||
 | 
					            => GetString("S_InsertOrUpdate_Unable_UpdateColumns");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// 主库
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_MasterDatabase
 | 
				
			||||||
 | 
					            => GetString("S_MasterDatabase");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// MygisGeometry.Parse 未实现 \"{wkt}\"
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_MygisGeometry_NotImplement(object wkt)
 | 
				
			||||||
 | 
					            => string.Format(
 | 
				
			||||||
 | 
					                GetString("S_MygisGeometry_NotImplement", nameof(wkt)),
 | 
				
			||||||
 | 
					                wkt);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// -NameOptions 参数错误,格式为:0,0,0,0
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_NameOptions_Incorrect
 | 
				
			||||||
 | 
					            => GetString("S_NameOptions_Incorrect");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        ///  未实现该功能
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_Not_Implemented_Feature
 | 
				
			||||||
 | 
					            => GetString("S_Not_Implemented_Feature");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// 未实现错误,请反馈给作者
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_Not_Implemented_FeedBack
 | 
				
			||||||
 | 
					            => GetString("S_Not_Implemented_FeedBack");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// 找不到 {name}
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_NotFound_Name(object name)
 | 
				
			||||||
 | 
					            => string.Format(
 | 
				
			||||||
 | 
					                GetString("S_NotFound_Name", nameof(name)),
 | 
				
			||||||
 | 
					                name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// FreeSql.Provider.{providerName} 未实现 Skip/Offset 功能,如果需要分页请使用判断上一次 id
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_NotImplementSkipOffset(object providerName)
 | 
				
			||||||
 | 
					            => string.Format(
 | 
				
			||||||
 | 
					                GetString("S_NotImplementSkipOffset", nameof(providerName)),
 | 
				
			||||||
 | 
					                providerName);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// 对象池
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_ObjectPool
 | 
				
			||||||
 | 
					            => GetString("S_ObjectPool");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// 旧表(OldName):{tboldname} 存在,数据库已存在 {tbname} 表,无法改名
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_OldTableExists(object tboldname, object tbname)
 | 
				
			||||||
 | 
					            => string.Format(
 | 
				
			||||||
 | 
					                GetString("S_OldTableExists", nameof(tboldname), nameof(tbname)),
 | 
				
			||||||
 | 
					                tboldname, tbname);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// OnConflictDoUpdate 功能要求实体类必须设置 IsPrimary 属性
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_OnConflictDoUpdate_MustIsPrimary
 | 
				
			||||||
 | 
					            => GetString("S_OnConflictDoUpdate_MustIsPrimary");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Oracle CodeFirst 不支持代码创建 tablespace 与 schemas {tbname}
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_Oracle_NotSupport_TablespaceSchemas(object tbname)
 | 
				
			||||||
 | 
					            => string.Format(
 | 
				
			||||||
 | 
					                GetString("S_Oracle_NotSupport_TablespaceSchemas", nameof(tbname)),
 | 
				
			||||||
 | 
					                tbname);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// 解析失败 {callExpMethodName} {message},提示:可以使用扩展方法 IQueryable.RestoreToSelect() 还原为 ISelect 再查询
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_ParsingFailed_UseRestoreToSelect(object callExpMethodName, object message)
 | 
				
			||||||
 | 
					            => string.Format(
 | 
				
			||||||
 | 
					                GetString("S_ParsingFailed_UseRestoreToSelect", nameof(callExpMethodName), nameof(message)),
 | 
				
			||||||
 | 
					                callExpMethodName, message);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// fsql.InsertOrUpdate + IfExistsDoNothing + {providerName}要求实体类 {tableCsName} 必须有主键
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_RequiresEntityPrimaryKey(object providerName, object tableCsName)
 | 
				
			||||||
 | 
					            => string.Format(
 | 
				
			||||||
 | 
					                GetString("S_RequiresEntityPrimaryKey", nameof(providerName), nameof(tableCsName)),
 | 
				
			||||||
 | 
					                providerName, tableCsName);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// SelectMany 错误的类型:{typeFullName}
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_SelectManayErrorType(object typeFullName)
 | 
				
			||||||
 | 
					            => string.Format(
 | 
				
			||||||
 | 
					                GetString("S_SelectManayErrorType", nameof(typeFullName)),
 | 
				
			||||||
 | 
					                typeFullName);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// 从库
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_SlaveDatabase
 | 
				
			||||||
 | 
					            => GetString("S_SlaveDatabase");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// 类型 {objentityTypeFullName} 不可迁移
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_Type_IsNot_Migrable(object objentityTypeFullName)
 | 
				
			||||||
 | 
					            => string.Format(
 | 
				
			||||||
 | 
					                GetString("S_Type_IsNot_Migrable", nameof(objentityTypeFullName)),
 | 
				
			||||||
 | 
					                objentityTypeFullName);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// 类型 {objentityTypeFullName} 不可迁移,可迁移属性0个
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_Type_IsNot_Migrable_0Attributes(object objentityTypeFullName)
 | 
				
			||||||
 | 
					            => string.Format(
 | 
				
			||||||
 | 
					                GetString("S_Type_IsNot_Migrable_0Attributes", nameof(objentityTypeFullName)),
 | 
				
			||||||
 | 
					                objentityTypeFullName);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// 未实现 {columnDbTypeTextFull} 类型映射
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_TypeMappingNotImplemented(object columnDbTypeTextFull)
 | 
				
			||||||
 | 
					            => string.Format(
 | 
				
			||||||
 | 
					                GetString("S_TypeMappingNotImplemented", nameof(columnDbTypeTextFull)),
 | 
				
			||||||
 | 
					                columnDbTypeTextFull);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// 错误的参数设置:{args}
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public static string S_WrongParameter(object args)
 | 
				
			||||||
 | 
					            => string.Format(
 | 
				
			||||||
 | 
					                GetString("S_WrongParameter", nameof(args)),
 | 
				
			||||||
 | 
					                args);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// {qoteSql} is NULL,除非设置特性 [Column(IsNullable = false)]
 | 
					        /// {qoteSql} is NULL,除非设置特性 [Column(IsNullable = false)]
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -53,6 +53,7 @@
 | 
				
			|||||||
    value   : The object must be serialized with 
 | 
					    value   : The object must be serialized with 
 | 
				
			||||||
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
 | 
					            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
 | 
				
			||||||
            : and then encoded with base64 encoding.
 | 
					            : and then encoded with base64 encoding.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    mimetype: application/x-microsoft.net.object.bytearray.base64
 | 
					    mimetype: application/x-microsoft.net.object.bytearray.base64
 | 
				
			||||||
    value   : The object must be serialized into a byte array 
 | 
					    value   : The object must be serialized into a byte array 
 | 
				
			||||||
            : using a System.ComponentModel.TypeConverter
 | 
					            : using a System.ComponentModel.TypeConverter
 | 
				
			||||||
@@ -494,4 +495,109 @@
 | 
				
			|||||||
  <data name="Use_InsertDict_Method" xml:space="preserve">
 | 
					  <data name="Use_InsertDict_Method" xml:space="preserve">
 | 
				
			||||||
    <value>FreeSql:Please use fsql. InsertDict (dict) method inserts dictionary data</value>
 | 
					    <value>FreeSql:Please use fsql. InsertDict (dict) method inserts dictionary data</value>
 | 
				
			||||||
  </data>
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_NotFound_Name" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:{name} not found</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_SlaveDatabase" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:Slave Database</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_MasterDatabase" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:Master Database</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_Access_InsertOnlyOneAtTime" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:Egg pain Accs insertion can only be performed one at a time, values (..) are not supported. (..) Select is also not supported.. UNION ALL select..</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_BaseEntity_Initialization_Error" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:BaseEntity. Initialization initialization error, get IFreeSql is null</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_BlockAccess_WaitForRecovery" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:[{thisName}] Block access and wait for recovery: {exMessage}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_CannotBeConverted_To_ISelect" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:IQueryable<{typeofName}> cannot be converted to ISelect<{typeofName}> because its implementation is not FreeSql.Extensions.Linq.QueryableProvider</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_ConnectionStringError" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:Connection string error</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_ConnectionStringError_Check" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:[{thisName}] Connection string error, please check.</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_ConnectionStringError_CheckProject " xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:Connection string error, or check project properties > Build > Target Platform: x86 | x64</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_ConnectionStringError_CheckProjectConnection" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:[{thisName}] Connection string error, please check. Or check Project Properties > Build > Target Platform: x86 | x64</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_CustomAdapter_Cannot_Use_CreateCommand" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:FreeSql.Provider.CustomAdapter cannot use CreateCommand</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_CustomAdapter_OnlySuppport_UseConnectionFactory " xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:FreeSql.Provider.CustomAdapter only supports building IFreeSql in the UseConnectionFactory way</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_Dameng_NotSupport_TablespaceSchemas  " xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:Dream CodeFirst does not support code creation tablespace and schemas {tbname}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_DB_Parameter_Error_NoConnectionString" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:-DB parameter error, no ConnectionString provided</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_DB_ParameterError" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:-DB parameter error, format: MySql, ConnectionString</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_DB_ParameterError_UnsupportedType" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:-DB parameter error, unsupported type: "{dbargs}"</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_Features_Unique" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:{method} is FreeSql.Provider.{provider} specific features</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_InsertOrUpdate_Unable_UpdateColumns" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:Fsql. InsertOrUpdate Sqlite was unable to complete the UpdateColumns operation</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_MygisGeometry_NotImplement" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:MygisGeometry. Parse does not implement "{wkt}"</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_NameOptions_Incorrect" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:-NameOptions parameter incorrect, format: 0,0,0,0</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_Not_Implemented_Feature" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:This function is not implemented</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_Not_Implemented_FeedBack" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:Unrealized error, please feedback to author</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_NotImplementSkipOffset" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:FreeSql.Provider.{providerName} does not implement Skip/Offset functionality, use to determine last ID if paging is required</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_OldTableExists" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:Old table (OldName): {tboldname} exists, database already exists {tbname} table, cannot rename</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_OnConflictDoUpdate_MustIsPrimary" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:The OnConflictDoUpdate feature requires that entity classes must set the IsPrimary property</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_Oracle_NotSupport_TablespaceSchemas" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:Oracle CodeFirst does not support code creation of tablespace and schemas {tbname}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_ParsingFailed_UseRestoreToSelect" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:Parsing failed {callExpMethodName} {message}, hint: Extension method IQueryable can be used. RestoreToSelect() reverted to ISelect re-query</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_RequiresEntityPrimaryKey" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:Fsql. InsertOrUpdate + IfExistsDoNothing + {providerName} requires the entity class {tableCsName} to have a primary key</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_SelectManayErrorType" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:SelectMany error type: {typeFullName}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_Type_IsNot_Migrable" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:Type {objentityTypeFullName} is not migrable</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_Type_IsNot_Migrable_0Attributes" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:Type {objentityTypeFullName} is not migrable, migratable property 0</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_TypeMappingNotImplemented" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:{columnDbTypeTextFull} type mapping not implemented</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_WrongParameter" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:Wrong parameter setting: {args}</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_ObjectPool" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql:Object pool</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
</root>
 | 
					</root>
 | 
				
			||||||
@@ -450,6 +450,146 @@
 | 
				
			|||||||
  <data name="RunTimeError_Reflection_IncludeMany" xml:space="preserve">
 | 
					  <data name="RunTimeError_Reflection_IncludeMany" xml:space="preserve">
 | 
				
			||||||
    <value>运行时错误,反射获取 IncludeMany 方法失败</value>
 | 
					    <value>运行时错误,反射获取 IncludeMany 方法失败</value>
 | 
				
			||||||
  </data>
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_Access_InsertOnlyOneAtTime" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>蛋疼的 Access 插入只能一条一条执行,不支持 values(..),(..) 也不支持 select .. UNION ALL select ..</value>
 | 
				
			||||||
 | 
					    <comment>Providers</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_BaseEntity_Initialization_Error" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>BaseEntity.Initialization 初始化错误,获取到 IFreeSql 是 null</value>
 | 
				
			||||||
 | 
					    <comment>Extensions</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_BlockAccess_WaitForRecovery" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>【{thisName}】Block access and wait for recovery: {exMessage}</value>
 | 
				
			||||||
 | 
					    <comment>Providers</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_CannotBeConverted_To_ISelect" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>无法将 IQueryable<{typeofName}> 转换为 ISelect<{typeofName}>,因为他的实现不是 FreeSql.Extensions.Linq.QueryableProvider</value>
 | 
				
			||||||
 | 
					    <comment>Extensions</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_ConnectionStringError" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>连接字符串错误</value>
 | 
				
			||||||
 | 
					    <comment>Providers</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_ConnectionStringError_Check" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>【{thisName}】连接字符串错误,请检查。</value>
 | 
				
			||||||
 | 
					    <comment>Providers</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_ConnectionStringError_CheckProject " xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>连接字符串错误,或者检查项目属性 > 生成 > 目标平台:x86 | x64</value>
 | 
				
			||||||
 | 
					    <comment>Providers</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_ConnectionStringError_CheckProjectConnection" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>【{thisName}】连接字符串错误,请检查。或者检查项目属性 > 生成 > 目标平台:x86 | x64</value>
 | 
				
			||||||
 | 
					    <comment>Providers</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_CustomAdapter_Cannot_Use_CreateCommand" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql.Provider.CustomAdapter 无法使用 CreateCommand</value>
 | 
				
			||||||
 | 
					    <comment>Providers</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_CustomAdapter_OnlySuppport_UseConnectionFactory " xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql.Provider.CustomAdapter 仅支持 UseConnectionFactory 方式构建 IFreeSql</value>
 | 
				
			||||||
 | 
					    <comment>Providers</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_Dameng_NotSupport_TablespaceSchemas  " xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>达梦 CodeFirst 不支持代码创建 tablespace 与 schemas {tbname}</value>
 | 
				
			||||||
 | 
					    <comment>Providers</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_DB_Parameter_Error_NoConnectionString" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>-DB 参数错误,未提供 ConnectionString</value>
 | 
				
			||||||
 | 
					    <comment>Extensions</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_DB_ParameterError" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>-DB 参数错误,格式为:MySql,ConnectionString</value>
 | 
				
			||||||
 | 
					    <comment>Extensions</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_DB_ParameterError_UnsupportedType" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>-DB 参数错误,不支持的类型:"{dbargs}"</value>
 | 
				
			||||||
 | 
					    <comment>Extensions</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_Features_Unique" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>{method} 是 FreeSql.Provider.{provider} 特有的功能</value>
 | 
				
			||||||
 | 
					    <comment>Providers</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_InsertOrUpdate_Unable_UpdateColumns" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>fsql.InsertOrUpdate Sqlite 无法完成 UpdateColumns 操作</value>
 | 
				
			||||||
 | 
					    <comment>Providers</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_MasterDatabase" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>主库</value>
 | 
				
			||||||
 | 
					    <comment>Providers</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_MygisGeometry_NotImplement" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>MygisGeometry.Parse 未实现 "{wkt}"</value>
 | 
				
			||||||
 | 
					    <comment>Providers</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_NameOptions_Incorrect" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>-NameOptions 参数错误,格式为:0,0,0,0</value>
 | 
				
			||||||
 | 
					    <comment>Extensions</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_Not_Implemented_Feature" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value> 未实现该功能</value>
 | 
				
			||||||
 | 
					    <comment>Providers</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_Not_Implemented_FeedBack" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>未实现错误,请反馈给作者</value>
 | 
				
			||||||
 | 
					    <comment>Providers</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_NotFound_Name" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>找不到 {name}</value>
 | 
				
			||||||
 | 
					    <comment>Providers</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_NotImplementSkipOffset" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>FreeSql.Provider.{providerName} 未实现 Skip/Offset 功能,如果需要分页请使用判断上一次 id</value>
 | 
				
			||||||
 | 
					    <comment>Providers</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_ObjectPool" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>对象池</value>
 | 
				
			||||||
 | 
					    <comment>Providers</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_OldTableExists" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>旧表(OldName):{tboldname} 存在,数据库已存在 {tbname} 表,无法改名</value>
 | 
				
			||||||
 | 
					    <comment>Providers</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_OnConflictDoUpdate_MustIsPrimary" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>OnConflictDoUpdate 功能要求实体类必须设置 IsPrimary 属性</value>
 | 
				
			||||||
 | 
					    <comment>Providers</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_Oracle_NotSupport_TablespaceSchemas" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>Oracle CodeFirst 不支持代码创建 tablespace 与 schemas {tbname}</value>
 | 
				
			||||||
 | 
					    <comment>Providers</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_ParsingFailed_UseRestoreToSelect" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>解析失败 {callExpMethodName} {message},提示:可以使用扩展方法 IQueryable.RestoreToSelect() 还原为 ISelect 再查询</value>
 | 
				
			||||||
 | 
					    <comment>Extensions</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_RequiresEntityPrimaryKey" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>fsql.InsertOrUpdate + IfExistsDoNothing + {providerName}要求实体类 {tableCsName} 必须有主键</value>
 | 
				
			||||||
 | 
					    <comment>Providers</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_SelectManayErrorType" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>SelectMany 错误的类型:{typeFullName}</value>
 | 
				
			||||||
 | 
					    <comment>Extensions</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_SlaveDatabase" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>从库</value>
 | 
				
			||||||
 | 
					    <comment>Providers</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_Type_IsNot_Migrable" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>类型 {objentityTypeFullName} 不可迁移</value>
 | 
				
			||||||
 | 
					    <comment>Providers</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_Type_IsNot_Migrable_0Attributes" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>类型 {objentityTypeFullName} 不可迁移,可迁移属性0个</value>
 | 
				
			||||||
 | 
					    <comment>Providers</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_TypeMappingNotImplemented" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>未实现 {columnDbTypeTextFull} 类型映射</value>
 | 
				
			||||||
 | 
					    <comment>Providers</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="S_WrongParameter" xml:space="preserve">
 | 
				
			||||||
 | 
					    <value>错误的参数设置:{args}</value>
 | 
				
			||||||
 | 
					    <comment>Extensions</comment>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
  <data name="Set_Column_IsNullable_False" xml:space="preserve">
 | 
					  <data name="Set_Column_IsNullable_False" xml:space="preserve">
 | 
				
			||||||
    <value>{qoteSql} is NULL,除非设置特性 [Column(IsNullable = false)]</value>
 | 
					    <value>{qoteSql} is NULL,除非设置特性 [Column(IsNullable = false)]</value>
 | 
				
			||||||
  </data>
 | 
					  </data>
 | 
				
			||||||
@@ -495,7 +635,4 @@
 | 
				
			|||||||
  <data name="Use_InsertDict_Method" xml:space="preserve">
 | 
					  <data name="Use_InsertDict_Method" xml:space="preserve">
 | 
				
			||||||
    <value>请使用 fsql.InsertDict(dict) 方法插入字典数据</value>
 | 
					    <value>请使用 fsql.InsertDict(dict) 方法插入字典数据</value>
 | 
				
			||||||
  </data>
 | 
					  </data>
 | 
				
			||||||
  <data name="A" xml:space="preserve">
 | 
					 | 
				
			||||||
    <value>Test</value>
 | 
					 | 
				
			||||||
  </data>
 | 
					 | 
				
			||||||
</root>
 | 
					</root>
 | 
				
			||||||
@@ -180,9 +180,12 @@ namespace <#= model.Namespace #>
 | 
				
			|||||||
        result.Class = Path.GetFileNameWithoutExtension(resourceFile);
 | 
					        result.Class = Path.GetFileNameWithoutExtension(resourceFile);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        result.ResourceName = resourceNamespace + "." + result.Class;
 | 
					        result.ResourceName = resourceNamespace + "." + result.Class;
 | 
				
			||||||
		
 | 
							if(File.Exists(resourceFile.Replace(".resx", ".zh-Hans.resx")))
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            resourceFile = resourceFile.Replace(".resx", ".zh-Hans.resx");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        List<ResXDataNode> sortedResources;
 | 
					        List<ResXDataNode> sortedResources;
 | 
				
			||||||
        using (var reader = new ResXResourceReader(resourceFile.Replace(".resx", ".zh-Hans.resx")))
 | 
					        using (var reader = new ResXResourceReader(resourceFile))
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            reader.UseResXDataNodes = true;
 | 
					            reader.UseResXDataNodes = true;
 | 
				
			||||||
            sortedResources = Enumerable.ToList(
 | 
					            sortedResources = Enumerable.ToList(
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,12 +23,12 @@ namespace FreeSql.ClickHouse
 | 
				
			|||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (!string.IsNullOrEmpty(masterConnectionString))
 | 
					            if (!string.IsNullOrEmpty(masterConnectionString))
 | 
				
			||||||
                MasterPool = new ClickHouseConnectionPool("主库", masterConnectionString, null, null);
 | 
					                MasterPool = new ClickHouseConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
 | 
				
			||||||
            if (slaveConnectionStrings != null)
 | 
					            if (slaveConnectionStrings != null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                foreach (var slaveConnectionString in slaveConnectionStrings)
 | 
					                foreach (var slaveConnectionString in slaveConnectionStrings)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    var slavePool = new ClickHouseConnectionPool($"从库{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
 | 
					                    var slavePool = new ClickHouseConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
 | 
				
			||||||
                    SlavePools.Add(slavePool);
 | 
					                    SlavePools.Add(slavePool);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -57,7 +57,7 @@ namespace FreeSql.ClickHouse
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        internal ClickHouseConnectionPool _pool;
 | 
					        internal ClickHouseConnectionPool _pool;
 | 
				
			||||||
        public string Name { get; set; } = "ClickHouse ClickHouseConnection 对象池";
 | 
					        public string Name { get; set; } = $"ClickHouse ClickHouseConnection {CoreStrings.S_ObjectPool}";
 | 
				
			||||||
        public int PoolSize { get; set; } = 100;
 | 
					        public int PoolSize { get; set; } = 100;
 | 
				
			||||||
        public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
 | 
					        public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
 | 
				
			||||||
        public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
 | 
					        public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
 | 
				
			||||||
@@ -131,8 +131,8 @@ namespace FreeSql.ClickHouse
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (obj.Value == null)
 | 
					                if (obj.Value == null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy);
 | 
					                    _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
 | 
				
			||||||
                    throw new Exception($"【{this.Name}】连接字符串错误,请检查。");
 | 
					                    throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
 | 
					                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
 | 
				
			||||||
@@ -161,8 +161,8 @@ namespace FreeSql.ClickHouse
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (obj.Value == null)
 | 
					                if (obj.Value == null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy);
 | 
					                    _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
 | 
				
			||||||
                    throw new Exception($"【{this.Name}】连接字符串错误,请检查。");
 | 
					                    throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)
 | 
					                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -67,8 +67,8 @@ namespace FreeSql.ClickHouse
 | 
				
			|||||||
                {
 | 
					                {
 | 
				
			||||||
                    if (sb.Length > 0) sb.Append("\r\n");
 | 
					                    if (sb.Length > 0) sb.Append("\r\n");
 | 
				
			||||||
                    var tb = _commonUtils.GetTableByEntity(obj.entityType);
 | 
					                    var tb = _commonUtils.GetTableByEntity(obj.entityType);
 | 
				
			||||||
                    if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移");
 | 
					                    if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName));
 | 
				
			||||||
                    if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移,可迁移属性0个");
 | 
					                    if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName));
 | 
				
			||||||
                    var tbname = _commonUtils.SplitTableName(tb.DbName);
 | 
					                    var tbname = _commonUtils.SplitTableName(tb.DbName);
 | 
				
			||||||
                    if (tbname?.Length == 1) tbname = new[] { database, tbname[0] };
 | 
					                    if (tbname?.Length == 1) tbname = new[] { database, tbname[0] };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,7 +16,7 @@ namespace FreeSql.ClickHouse.Curd
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override List<T1> ExecuteDeleted() => throw new NotImplementedException("FreeSql.Provider.ClickHouse 未实现该功能");
 | 
					        public override List<T1> ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override string ToSql()
 | 
					        public override string ToSql()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@@ -25,7 +25,7 @@ namespace FreeSql.ClickHouse.Curd
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#if net40
 | 
					#if net40
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
        public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.ClickHouse 未实现该功能");
 | 
					        public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,7 +28,7 @@ namespace FreeSql.ClickHouse.Curd
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        public override int ExecuteAffrows() => SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000);
 | 
					        public override int ExecuteAffrows() => SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000);
 | 
				
			||||||
        public override List<T1> ExecuteUpdated() => SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000);
 | 
					        public override List<T1> ExecuteUpdated() => SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000);
 | 
				
			||||||
        protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException("FreeSql.ClickHouse.Custom 未实现该功能 未实现该功能");
 | 
					        protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
        protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
 | 
					        protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (primarys.Length == 1)
 | 
					            if (primarys.Length == 1)
 | 
				
			||||||
@@ -293,7 +293,7 @@ namespace FreeSql.ClickHouse.Curd
 | 
				
			|||||||
#else
 | 
					#else
 | 
				
			||||||
        public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken);
 | 
					        public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken);
 | 
				
			||||||
        public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken);
 | 
					        public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken);
 | 
				
			||||||
        protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.ClickHouse.Custom 未实现该功能 未实现该功能");
 | 
					        protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        async protected override Task<int> SplitExecuteAffrowsAsync(int valuesLimit, int parameterLimit, CancellationToken cancellationToken = default)
 | 
					        async protected override Task<int> SplitExecuteAffrowsAsync(int valuesLimit, int parameterLimit, CancellationToken cancellationToken = default)
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,11 +16,11 @@ namespace FreeSql.Custom
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override List<T1> ExecuteDeleted() => throw new NotImplementedException("FreeSql.Provider.Custom 未实现该功能");
 | 
					        public override List<T1> ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if net40
 | 
					#if net40
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
        public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.Custom 未实现该功能");
 | 
					        public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -62,7 +62,7 @@ namespace FreeSql.Custom
 | 
				
			|||||||
            return ret;
 | 
					            return ret;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected override List<T1> RawExecuteInserted() => throw new NotImplementedException("FreeSql.Provider.Custom 未实现该功能");
 | 
					        protected override List<T1> RawExecuteInserted() => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if net40
 | 
					#if net40
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
@@ -107,7 +107,7 @@ namespace FreeSql.Custom
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            return ret;
 | 
					            return ret;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        protected override Task<List<T1>> RawExecuteInsertedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.Custom 未实现该功能");
 | 
					        protected override Task<List<T1>> RawExecuteInsertedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -35,7 +35,7 @@ namespace FreeSql.Custom
 | 
				
			|||||||
                if (_limit > 0 && _utils.Adapter.SelectTopStyle == CustomAdapter.SelecTopStyle.Top) sb.Append("TOP ").Append(_skip + _limit).Append(" ");
 | 
					                if (_limit > 0 && _utils.Adapter.SelectTopStyle == CustomAdapter.SelecTopStyle.Top) sb.Append("TOP ").Append(_skip + _limit).Append(" ");
 | 
				
			||||||
                sb.Append(field);
 | 
					                sb.Append(field);
 | 
				
			||||||
                if (_skip > 0 && _utils.Adapter.SelectTopStyle == CustomAdapter.SelecTopStyle.Top)
 | 
					                if (_skip > 0 && _utils.Adapter.SelectTopStyle == CustomAdapter.SelecTopStyle.Top)
 | 
				
			||||||
                    throw new NotImplementedException("FreeSql.Provider.Custom 未实现 Skip/Offset 功能,如果需要分页请使用判断上一次 id");
 | 
					                throw new NotImplementedException(CoreStrings.S_NotImplementSkipOffset("Custom"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                sb.Append(" \r\nFROM ");
 | 
					                sb.Append(" \r\nFROM ");
 | 
				
			||||||
                var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray();
 | 
					                var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,7 +23,7 @@ namespace FreeSql.Custom
 | 
				
			|||||||
        public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255);
 | 
					        public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255);
 | 
				
			||||||
        public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255);
 | 
					        public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException("FreeSql.Provider.Custom 未实现该功能");
 | 
					        protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
 | 
					        protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@@ -65,7 +65,7 @@ namespace FreeSql.Custom
 | 
				
			|||||||
        public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken);
 | 
					        public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken);
 | 
				
			||||||
        public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken);
 | 
					        public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.Custom 未实现该功能");
 | 
					        protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,7 +23,7 @@ namespace FreeSql.Custom
 | 
				
			|||||||
                _CreateParameterCommand = CreateCommand();
 | 
					                _CreateParameterCommand = CreateCommand();
 | 
				
			||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            throw new Exception("FreeSql.Provider.CustomAdapter 仅支持 UseConnectionFactory 方式构建 IFreeSql");
 | 
					            throw new Exception(CoreStrings.S_CustomAdapter_OnlySuppport_UseConnectionFactory);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        CustomAdapter Adapter => (_util == null ? FreeSqlCustomAdapterGlobalExtensions.DefaultAdapter : _util._orm.GetCustomAdapter());
 | 
					        CustomAdapter Adapter => (_util == null ? FreeSqlCustomAdapterGlobalExtensions.DefaultAdapter : _util._orm.GetCustomAdapter());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -65,7 +65,7 @@ namespace FreeSql.Custom
 | 
				
			|||||||
                cmd.Connection = null;
 | 
					                cmd.Connection = null;
 | 
				
			||||||
                return cmd;
 | 
					                return cmd;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            throw new Exception("FreeSql.Provider.CustomAdapter 无法使用 CreateCommand");
 | 
					            throw new Exception(CoreStrings.S_CustomAdapter_Cannot_Use_CreateCommand);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        public DbParameter CreateParameter()
 | 
					        public DbParameter CreateParameter()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -90,6 +90,6 @@ namespace FreeSql.Custom
 | 
				
			|||||||
            return null;
 | 
					            return null;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected override string GetComparisonDDLStatements(params TypeAndName[] objects) => throw new NotImplementedException("FreeSql.Provider.Custom 未实现该功能");
 | 
					        protected override string GetComparisonDDLStatements(params TypeAndName[] objects) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -18,9 +18,9 @@ namespace FreeSql.Custom
 | 
				
			|||||||
        public override IInsert<T1> CreateInsertProvider<T1>() => new CustomInsert<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression);
 | 
					        public override IInsert<T1> CreateInsertProvider<T1>() => new CustomInsert<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression);
 | 
				
			||||||
        public override IUpdate<T1> CreateUpdateProvider<T1>(object dywhere) => new CustomUpdate<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere);
 | 
					        public override IUpdate<T1> CreateUpdateProvider<T1>(object dywhere) => new CustomUpdate<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere);
 | 
				
			||||||
        public override IDelete<T1> CreateDeleteProvider<T1>(object dywhere) => new CustomDelete<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere);
 | 
					        public override IDelete<T1> CreateDeleteProvider<T1>(object dywhere) => new CustomDelete<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere);
 | 
				
			||||||
        public override IInsertOrUpdate<T1> CreateInsertOrUpdateProvider<T1>() => throw new NotImplementedException("FreeSql.Provider.Custom 未实现该功能");
 | 
					        public override IInsertOrUpdate<T1> CreateInsertOrUpdateProvider<T1>() => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override IDbFirst DbFirst => throw new NotImplementedException("FreeSql.Provider.Custom 未实现该功能");
 | 
					        public override IDbFirst DbFirst => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public CustomProvider(string masterConnectionString, string[] slaveConnectionString, Func<DbConnection> connectionFactory = null)
 | 
					        public CustomProvider(string masterConnectionString, string[] slaveConnectionString, Func<DbConnection> connectionFactory = null)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,11 +16,11 @@ namespace FreeSql.Dameng.Curd
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override List<T1> ExecuteDeleted() => throw new NotImplementedException("FreeSql.Provider.Dameng 未实现该功能");
 | 
					        public override List<T1> ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.Dameng {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if net40
 | 
					#if net40
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
        public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.Dameng 未实现该功能");
 | 
					        public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Dameng {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,7 +21,7 @@ namespace FreeSql.Dameng.Curd
 | 
				
			|||||||
        public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
 | 
					        public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
 | 
				
			||||||
        public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
 | 
					        public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException("FreeSql.Provider.Dameng 未实现该功能");
 | 
					        protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Provider.Dameng {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
 | 
					        protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@@ -65,7 +65,7 @@ namespace FreeSql.Dameng.Curd
 | 
				
			|||||||
        public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
 | 
					        public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
 | 
				
			||||||
        public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
 | 
					        public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.Dameng 未实现该功能");
 | 
					        protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Dameng {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,12 +21,12 @@ namespace FreeSql.Dameng
 | 
				
			|||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (!string.IsNullOrEmpty(masterConnectionString))
 | 
					            if (!string.IsNullOrEmpty(masterConnectionString))
 | 
				
			||||||
                MasterPool = new DamengConnectionPool("主库", masterConnectionString, null, null);
 | 
					                MasterPool = new DamengConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
 | 
				
			||||||
            if (slaveConnectionStrings != null)
 | 
					            if (slaveConnectionStrings != null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                foreach (var slaveConnectionString in slaveConnectionStrings)
 | 
					                foreach (var slaveConnectionString in slaveConnectionStrings)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    var slavePool = new DamengConnectionPool($"从库{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
 | 
					                    var slavePool = new DamengConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
 | 
				
			||||||
                    SlavePools.Add(slavePool);
 | 
					                    SlavePools.Add(slavePool);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -54,7 +54,7 @@ namespace FreeSql.Dameng
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        internal DamengConnectionPool _pool;
 | 
					        internal DamengConnectionPool _pool;
 | 
				
			||||||
        public string Name { get; set; } = "Dameng DmConnection 对象池";
 | 
					        public string Name { get; set; } = $"Dameng DmConnection {CoreStrings.S_ObjectPool}";
 | 
				
			||||||
        public int PoolSize { get; set; } = 100;
 | 
					        public int PoolSize { get; set; } = 100;
 | 
				
			||||||
        public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
 | 
					        public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
 | 
				
			||||||
        public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
 | 
					        public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
 | 
				
			||||||
@@ -130,8 +130,8 @@ namespace FreeSql.Dameng
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (obj.Value == null)
 | 
					                if (obj.Value == null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy);
 | 
					                    _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
 | 
				
			||||||
                    throw new Exception($"【{this.Name}】连接字符串错误,请检查。");
 | 
					                    throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
 | 
					                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
 | 
				
			||||||
@@ -160,8 +160,8 @@ namespace FreeSql.Dameng
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (obj.Value == null)
 | 
					                if (obj.Value == null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy);
 | 
					                    _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
 | 
				
			||||||
                    throw new Exception($"【{this.Name}】连接字符串错误,请检查。");
 | 
					                    throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)
 | 
					                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -92,8 +92,8 @@ namespace FreeSql.Dameng
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (sb.Length > 0) sb.Append("\r\n");
 | 
					                if (sb.Length > 0) sb.Append("\r\n");
 | 
				
			||||||
                var tb = _commonUtils.GetTableByEntity(obj.entityType);
 | 
					                var tb = _commonUtils.GetTableByEntity(obj.entityType);
 | 
				
			||||||
                if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移");
 | 
					                if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName));
 | 
				
			||||||
                if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移,可迁移属性0个");
 | 
					                if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName));
 | 
				
			||||||
                var tbname = _commonUtils.SplitTableName(tb.DbName);
 | 
					                var tbname = _commonUtils.SplitTableName(tb.DbName);
 | 
				
			||||||
                if (tbname?.Length == 1) tbname = new[] { userId, tbname[0] };
 | 
					                if (tbname?.Length == 1) tbname = new[] { userId, tbname[0] };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -114,7 +114,7 @@ namespace FreeSql.Dameng
 | 
				
			|||||||
                //codefirst 不支持表名中带 .
 | 
					                //codefirst 不支持表名中带 .
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (string.Compare(tbname[0], userId) != 0 && _orm.Ado.ExecuteScalar(CommandType.Text, _commonUtils.FormatSql(" select 1 from sys.dba_users where username={0}", tbname[0])) == null) //创建数据库
 | 
					                if (string.Compare(tbname[0], userId) != 0 && _orm.Ado.ExecuteScalar(CommandType.Text, _commonUtils.FormatSql(" select 1 from sys.dba_users where username={0}", tbname[0])) == null) //创建数据库
 | 
				
			||||||
                    throw new NotImplementedException($"达梦 CodeFirst 不支持代码创建 tablespace 与 schemas {tbname[0]}");
 | 
					                    throw new NotImplementedException(CoreStrings.S_Dameng_NotSupport_TablespaceSchemas(tbname[0]));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                var sbalter = new StringBuilder();
 | 
					                var sbalter = new StringBuilder();
 | 
				
			||||||
                var istmpatler = false; //创建临时表,导入数据,删除旧表,修改
 | 
					                var istmpatler = false; //创建临时表,导入数据,删除旧表,修改
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -160,7 +160,7 @@ namespace FreeSql.Dameng
 | 
				
			|||||||
                    if (dbfull != null) _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]);
 | 
					                    if (dbfull != null) _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]);
 | 
				
			||||||
                    return DmDbType.VarChar;
 | 
					                    return DmDbType.VarChar;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            throw new NotImplementedException($"未实现 {column.DbTypeTextFull} 类型映射");
 | 
					            throw new NotImplementedException(CoreStrings.S_TypeMappingNotImplemented(column.DbTypeTextFull));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        static ConcurrentDictionary<string, DbToCs> _dicDbToCs = new ConcurrentDictionary<string, DbToCs>(StringComparer.CurrentCultureIgnoreCase);
 | 
					        static ConcurrentDictionary<string, DbToCs> _dicDbToCs = new ConcurrentDictionary<string, DbToCs>(StringComparer.CurrentCultureIgnoreCase);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,7 +29,7 @@ public static partial class FreeSqlDamengGlobalExtensions
 | 
				
			|||||||
    public static void ExecuteDmBulkCopy<T>(this IInsert<T> that, DmBulkCopyOptions copyOptions = DmBulkCopyOptions.Default, int? batchSize = null, int? bulkCopyTimeout = null) where T : class
 | 
					    public static void ExecuteDmBulkCopy<T>(this IInsert<T> that, DmBulkCopyOptions copyOptions = DmBulkCopyOptions.Default, int? batchSize = null, int? bulkCopyTimeout = null) where T : class
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        var insert = that as FreeSql.Dameng.Curd.DamengInsert<T>;
 | 
					        var insert = that as FreeSql.Dameng.Curd.DamengInsert<T>;
 | 
				
			||||||
        if (insert == null) throw new Exception("ExecuteDmBulkCopy 是 FreeSql.Provider.Dameng 特有的功能");
 | 
					        if (insert == null) throw new Exception(CoreStrings.S_Features_Unique("ExecuteDmBulkCopy", "Dameng"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        var dt = that.ToDataTable();
 | 
					        var dt = that.ToDataTable();
 | 
				
			||||||
        if (dt.Rows.Count == 0) return;
 | 
					        if (dt.Rows.Count == 0) return;
 | 
				
			||||||
@@ -95,7 +95,7 @@ public static partial class FreeSqlDamengGlobalExtensions
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            else
 | 
					            else
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                throw new NotImplementedException("ExecuteDmBulkCopy 未实现错误,请反馈给作者");
 | 
					                throw new NotImplementedException($"ExecuteDmBulkCopy {CoreStrings.S_Not_Implemented_FeedBack}");
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        finally
 | 
					        finally
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,12 +25,12 @@ namespace FreeSql.Firebird
 | 
				
			|||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (!string.IsNullOrEmpty(masterConnectionString))
 | 
					            if (!string.IsNullOrEmpty(masterConnectionString))
 | 
				
			||||||
                MasterPool = new FirebirdConnectionPool("主库", masterConnectionString, null, null);
 | 
					                MasterPool = new FirebirdConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
 | 
				
			||||||
            if (slaveConnectionStrings != null)
 | 
					            if (slaveConnectionStrings != null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                foreach (var slaveConnectionString in slaveConnectionStrings)
 | 
					                foreach (var slaveConnectionString in slaveConnectionStrings)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    var slavePool = new FirebirdConnectionPool($"从库{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
 | 
					                    var slavePool = new FirebirdConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
 | 
				
			||||||
                    SlavePools.Add(slavePool);
 | 
					                    SlavePools.Add(slavePool);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -45,7 +45,7 @@ namespace FreeSql.Firebird
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        internal FirebirdConnectionPool _pool;
 | 
					        internal FirebirdConnectionPool _pool;
 | 
				
			||||||
        public string Name { get; set; } = "Firebird FbConnection 对象池";
 | 
					        public string Name { get; set; } = $"Firebird FbConnection {CoreStrings.S_ObjectPool}";
 | 
				
			||||||
        public int PoolSize { get; set; } = 100;
 | 
					        public int PoolSize { get; set; } = 100;
 | 
				
			||||||
        public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
 | 
					        public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
 | 
				
			||||||
        public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
 | 
					        public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
 | 
				
			||||||
@@ -121,8 +121,8 @@ namespace FreeSql.Firebird
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (obj.Value == null)
 | 
					                if (obj.Value == null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy);
 | 
					                    _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
 | 
				
			||||||
                    throw new Exception($"【{this.Name}】连接字符串错误,请检查。");
 | 
					                    throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
 | 
					                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
 | 
				
			||||||
@@ -151,8 +151,8 @@ namespace FreeSql.Firebird
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (obj.Value == null)
 | 
					                if (obj.Value == null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy);
 | 
					                    _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
 | 
				
			||||||
                    throw new Exception($"【{this.Name}】连接字符串错误,请检查。");
 | 
					                    throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)
 | 
					                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -89,8 +89,8 @@ namespace FreeSql.Firebird
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (sb.Length > 0) sb.Append("\r\n");
 | 
					                if (sb.Length > 0) sb.Append("\r\n");
 | 
				
			||||||
                var tb = _commonUtils.GetTableByEntity(obj.entityType);
 | 
					                var tb = _commonUtils.GetTableByEntity(obj.entityType);
 | 
				
			||||||
                if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移");
 | 
					                if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName));
 | 
				
			||||||
                if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移,可迁移属性0个");
 | 
					                if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName));
 | 
				
			||||||
                var tbname = tb.DbName;
 | 
					                var tbname = tb.DbName;
 | 
				
			||||||
                var tboldname = tb.DbOldName; //旧表名
 | 
					                var tboldname = tb.DbOldName; //旧表名
 | 
				
			||||||
                if (string.IsNullOrEmpty(obj.tableName) == false)
 | 
					                if (string.IsNullOrEmpty(obj.tableName) == false)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,11 +16,11 @@ namespace FreeSql.GBase.Curd
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override List<T1> ExecuteDeleted() => throw new NotImplementedException("FreeSql.Provider.GBase 未实现该功能");
 | 
					        public override List<T1> ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.GBase {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if net40
 | 
					#if net40
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
        public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.GBase 未实现该功能");
 | 
					        public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.GBase {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,7 +28,7 @@ namespace FreeSql.GBase.Curd
 | 
				
			|||||||
            if (_source?.Count <= 1) return base.ToSqlValuesOrSelectUnionAll();
 | 
					            if (_source?.Count <= 1) return base.ToSqlValuesOrSelectUnionAll();
 | 
				
			||||||
            var sql = base.ToSqlValuesOrSelectUnionAllExtension102(false, null, (rowd, idx, sb) => sb.Append(" FROM dual"));
 | 
					            var sql = base.ToSqlValuesOrSelectUnionAllExtension102(false, null, (rowd, idx, sb) => sb.Append(" FROM dual"));
 | 
				
			||||||
            var validx = sql.IndexOf(") SELECT ");
 | 
					            var validx = sql.IndexOf(") SELECT ");
 | 
				
			||||||
            if (validx == -1) throw new ArgumentException("找不到 SELECT");
 | 
					            if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("SELECT"));
 | 
				
			||||||
            return new StringBuilder()
 | 
					            return new StringBuilder()
 | 
				
			||||||
                .Insert(0, sql.Substring(0, validx + 1))
 | 
					                .Insert(0, sql.Substring(0, validx + 1))
 | 
				
			||||||
                .Append("\r\nSELECT * FROM (\r\n")
 | 
					                .Append("\r\nSELECT * FROM (\r\n")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,7 +22,7 @@ namespace FreeSql.GBase.Curd
 | 
				
			|||||||
        public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
 | 
					        public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
 | 
				
			||||||
        public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
 | 
					        public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException("FreeSql.Provider.GBase 未实现该功能");
 | 
					        protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Provider.GBase {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
 | 
					        protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@@ -66,7 +66,7 @@ namespace FreeSql.GBase.Curd
 | 
				
			|||||||
        public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
 | 
					        public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
 | 
				
			||||||
        public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
 | 
					        public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.GBase 未实现该功能");
 | 
					        protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.GBase {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,12 +25,12 @@ namespace FreeSql.GBase
 | 
				
			|||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (!string.IsNullOrEmpty(masterConnectionString))
 | 
					            if (!string.IsNullOrEmpty(masterConnectionString))
 | 
				
			||||||
                MasterPool = new GBaseConnectionPool("主库", masterConnectionString, null, null);
 | 
					                MasterPool = new GBaseConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
 | 
				
			||||||
            if (slaveConnectionStrings != null)
 | 
					            if (slaveConnectionStrings != null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                foreach (var slaveConnectionString in slaveConnectionStrings)
 | 
					                foreach (var slaveConnectionString in slaveConnectionStrings)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    var slavePool = new GBaseConnectionPool($"从库{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
 | 
					                    var slavePool = new GBaseConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
 | 
				
			||||||
                    SlavePools.Add(slavePool);
 | 
					                    SlavePools.Add(slavePool);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -45,7 +45,7 @@ namespace FreeSql.GBase
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        internal GBaseConnectionPool _pool;
 | 
					        internal GBaseConnectionPool _pool;
 | 
				
			||||||
        public string Name { get; set; } = "GBase IfxConnection 对象池";
 | 
					        public string Name { get; set; } = $"GBase IfxConnection {CoreStrings.S_ObjectPool}";
 | 
				
			||||||
        public int PoolSize { get; set; } = 100;
 | 
					        public int PoolSize { get; set; } = 100;
 | 
				
			||||||
        public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
 | 
					        public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
 | 
				
			||||||
        public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
 | 
					        public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
 | 
				
			||||||
@@ -120,8 +120,8 @@ namespace FreeSql.GBase
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (obj.Value == null)
 | 
					                if (obj.Value == null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy);
 | 
					                    _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
 | 
				
			||||||
                    throw new Exception($"【{this.Name}】连接字符串错误,请检查。");
 | 
					                    throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
 | 
					                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
 | 
				
			||||||
@@ -150,8 +150,8 @@ namespace FreeSql.GBase
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (obj.Value == null)
 | 
					                if (obj.Value == null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy);
 | 
					                    _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
 | 
				
			||||||
                    throw new Exception($"【{this.Name}】连接字符串错误,请检查。");
 | 
					                    throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)
 | 
					                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -92,8 +92,8 @@ namespace FreeSql.GBase
 | 
				
			|||||||
                {
 | 
					                {
 | 
				
			||||||
                    if (sb.Length > 0) sb.Append("\r\n");
 | 
					                    if (sb.Length > 0) sb.Append("\r\n");
 | 
				
			||||||
                    var tb = _commonUtils.GetTableByEntity(obj.entityType);
 | 
					                    var tb = _commonUtils.GetTableByEntity(obj.entityType);
 | 
				
			||||||
                    if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移");
 | 
					                    if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName));
 | 
				
			||||||
                    if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移,可迁移属性0个");
 | 
					                    if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName));
 | 
				
			||||||
                    var tbname = _commonUtils.SplitTableName(tb.DbName);
 | 
					                    var tbname = _commonUtils.SplitTableName(tb.DbName);
 | 
				
			||||||
                    if (tbname?.Length == 1) tbname = new[] { database, tbname[0] };
 | 
					                    if (tbname?.Length == 1) tbname = new[] { database, tbname[0] };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,7 +24,7 @@ namespace FreeSql.KingbaseES
 | 
				
			|||||||
        public KingbaseESOnConflictDoUpdate(IInsert<T1> insert, Expression<Func<T1, object>> columns = null)
 | 
					        public KingbaseESOnConflictDoUpdate(IInsert<T1> insert, Expression<Func<T1, object>> columns = null)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _insert = insert as KingbaseESInsert<T1>;
 | 
					            _insert = insert as KingbaseESInsert<T1>;
 | 
				
			||||||
            if (_insert == null) throw new Exception("OnConflictDoUpdate 是 FreeSql.Provider.KingbaseES 特有的功能");
 | 
					            if (_insert == null) throw new Exception(CoreStrings.S_Features_Unique("OnConflictDoUpdate", "KingbaseES"));
 | 
				
			||||||
            if (_insert._noneParameterFlag == "c") _insert._noneParameterFlag = "cu";
 | 
					            if (_insert._noneParameterFlag == "c") _insert._noneParameterFlag = "cu";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (columns != null)
 | 
					            if (columns != null)
 | 
				
			||||||
@@ -38,7 +38,7 @@ namespace FreeSql.KingbaseES
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            if (_columns == null || _columns.Any() == false)
 | 
					            if (_columns == null || _columns.Any() == false)
 | 
				
			||||||
                _columns = _insert.InternalTable.Primarys;
 | 
					                _columns = _insert.InternalTable.Primarys;
 | 
				
			||||||
            if (_columns.Any() == false) throw new Exception("OnConflictDoUpdate 功能要求实体类必须设置 IsPrimary 属性");
 | 
					            if (_columns.Any() == false) throw new Exception(CoreStrings.S_OnConflictDoUpdate_MustIsPrimary);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected void ClearData()
 | 
					        protected void ClearData()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,12 +23,12 @@ namespace FreeSql.KingbaseES
 | 
				
			|||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (!string.IsNullOrEmpty(masterConnectionString))
 | 
					            if (!string.IsNullOrEmpty(masterConnectionString))
 | 
				
			||||||
                MasterPool = new KingbaseESConnectionPool("主库", masterConnectionString, null, null);
 | 
					                MasterPool = new KingbaseESConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
 | 
				
			||||||
            if (slaveConnectionStrings != null)
 | 
					            if (slaveConnectionStrings != null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                foreach (var slaveConnectionString in slaveConnectionStrings)
 | 
					                foreach (var slaveConnectionString in slaveConnectionStrings)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    var slavePool = new KingbaseESConnectionPool($"从库{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
 | 
					                    var slavePool = new KingbaseESConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
 | 
				
			||||||
                    SlavePools.Add(slavePool);
 | 
					                    SlavePools.Add(slavePool);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -56,7 +56,7 @@ namespace FreeSql.KingbaseES
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        internal KingbaseESConnectionPool _pool;
 | 
					        internal KingbaseESConnectionPool _pool;
 | 
				
			||||||
        public string Name { get; set; } = "KingbaseES KdbndpConnection 对象池";
 | 
					        public string Name { get; set; } = $"KingbaseES KdbndpConnection {CoreStrings.S_ObjectPool}";
 | 
				
			||||||
        public int PoolSize { get; set; } = 100;
 | 
					        public int PoolSize { get; set; } = 100;
 | 
				
			||||||
        public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
 | 
					        public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
 | 
				
			||||||
        public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
 | 
					        public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
 | 
				
			||||||
@@ -131,8 +131,8 @@ namespace FreeSql.KingbaseES
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (obj.Value == null)
 | 
					                if (obj.Value == null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy);
 | 
					                    _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
 | 
				
			||||||
                    throw new Exception($"【{this.Name}】连接字符串错误,请检查。");
 | 
					                    throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
 | 
					                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
 | 
				
			||||||
@@ -161,8 +161,8 @@ namespace FreeSql.KingbaseES
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (obj.Value == null)
 | 
					                if (obj.Value == null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy);
 | 
					                    _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
 | 
				
			||||||
                    throw new Exception($"【{this.Name}】连接字符串错误,请检查。");
 | 
					                    throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)
 | 
					                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -79,8 +79,8 @@ namespace FreeSql.KingbaseES
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (sb.Length > 0) sb.Append("\r\n");
 | 
					                if (sb.Length > 0) sb.Append("\r\n");
 | 
				
			||||||
                var tb = _commonUtils.GetTableByEntity(obj.entityType);
 | 
					                var tb = _commonUtils.GetTableByEntity(obj.entityType);
 | 
				
			||||||
                if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移");
 | 
					                if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName));
 | 
				
			||||||
                if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移,可迁移属性0个");
 | 
					                if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName));
 | 
				
			||||||
                var tbname = _commonUtils.SplitTableName(tb.DbName);
 | 
					                var tbname = _commonUtils.SplitTableName(tb.DbName);
 | 
				
			||||||
                if (tbname?.Length == 1) tbname = new[] { "PUBLIC", tbname[0] };
 | 
					                if (tbname?.Length == 1) tbname = new[] { "PUBLIC", tbname[0] };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,11 +16,11 @@ namespace FreeSql.MsAccess.Curd
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override List<T1> ExecuteDeleted() => throw new NotImplementedException("FreeSql.Provider.MsAccess 未实现该功能");
 | 
					        public override List<T1> ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.MsAccess {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if net40
 | 
					#if net40
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
        public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.MsAccess 未实现该功能");
 | 
					        public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.MsAccess {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,7 +26,7 @@ namespace FreeSql.MsAccess.Curd
 | 
				
			|||||||
        public override List<T1> ExecuteInserted() => base.SplitExecuteInserted(1, 1000);
 | 
					        public override List<T1> ExecuteInserted() => base.SplitExecuteInserted(1, 1000);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override IInsert<T1> BatchOptions(int valuesLimit, int parameterLimit, bool autoTransaction = true) => 
 | 
					        public override IInsert<T1> BatchOptions(int valuesLimit, int parameterLimit, bool autoTransaction = true) => 
 | 
				
			||||||
            throw new NotImplementedException("蛋疼的 access 插入只能一条一条执行,不支持 values(..),(..) 也不支持 select .. UNION ALL select ..");
 | 
					            throw new NotImplementedException(CoreStrings.S_Access_InsertOnlyOneAtTime);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected override int RawExecuteAffrows()
 | 
					        protected override int RawExecuteAffrows()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -36,7 +36,7 @@ namespace FreeSql.MsAccess.Curd
 | 
				
			|||||||
                if (_limit > 0) sb.Append("TOP ").Append(_skip + _limit).Append(" ");
 | 
					                if (_limit > 0) sb.Append("TOP ").Append(_skip + _limit).Append(" ");
 | 
				
			||||||
                sb.Append(field);
 | 
					                sb.Append(field);
 | 
				
			||||||
                if (_skip > 0)
 | 
					                if (_skip > 0)
 | 
				
			||||||
                    throw new NotImplementedException("FreeSql.Provider.MsAccess 未实现 Skip/Offset 功能,如果需要分页请使用判断上一次 id");
 | 
					                    throw new NotImplementedException(CoreStrings.S_NotImplementSkipOffset("MsAccess"));
 | 
				
			||||||
                sb.Append(" \r\nFROM ");
 | 
					                sb.Append(" \r\nFROM ");
 | 
				
			||||||
                var fromIndex = sb.Length;
 | 
					                var fromIndex = sb.Length;
 | 
				
			||||||
                var ioinCounter = 0;
 | 
					                var ioinCounter = 0;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,9 +25,9 @@ namespace FreeSql.MsAccess.Curd
 | 
				
			|||||||
        public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(1, 1000);
 | 
					        public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(1, 1000);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override IUpdate<T1> BatchOptions(int rowsLimit, int parameterLimit, bool autoTransaction = true) =>
 | 
					        public override IUpdate<T1> BatchOptions(int rowsLimit, int parameterLimit, bool autoTransaction = true) =>
 | 
				
			||||||
            throw new NotImplementedException("蛋疼的 access 插入只能一条一条执行,不支持 values(..),(..) 也不支持 select .. UNION ALL select ..");
 | 
					            throw new NotImplementedException(CoreStrings.S_Access_InsertOnlyOneAtTime);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException("FreeSql.Provider.MsAccess 未实现该功能");
 | 
					        protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Provider.MsAccess {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
 | 
					        protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@@ -69,7 +69,7 @@ namespace FreeSql.MsAccess.Curd
 | 
				
			|||||||
        public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(1, 1000, cancellationToken);
 | 
					        public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(1, 1000, cancellationToken);
 | 
				
			||||||
        public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(1, 1000, cancellationToken);
 | 
					        public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(1, 1000, cancellationToken);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.MsAccess 未实现该功能");
 | 
					        protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.MsAccess {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,12 +23,12 @@ namespace FreeSql.MsAccess
 | 
				
			|||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (!string.IsNullOrEmpty(masterConnectionString))
 | 
					            if (!string.IsNullOrEmpty(masterConnectionString))
 | 
				
			||||||
                MasterPool = new MsAccessConnectionPool("主库", masterConnectionString, null, null);
 | 
					                MasterPool = new MsAccessConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
 | 
				
			||||||
            if (slaveConnectionStrings != null)
 | 
					            if (slaveConnectionStrings != null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                foreach (var slaveConnectionString in slaveConnectionStrings)
 | 
					                foreach (var slaveConnectionString in slaveConnectionStrings)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    var slavePool = new MsAccessConnectionPool($"从库{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
 | 
					                    var slavePool = new MsAccessConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
 | 
				
			||||||
                    SlavePools.Add(slavePool);
 | 
					                    SlavePools.Add(slavePool);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -45,7 +45,7 @@ namespace FreeSql.MsAccess
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        internal MsAccessConnectionPool _pool;
 | 
					        internal MsAccessConnectionPool _pool;
 | 
				
			||||||
        public string Name { get; set; } = "Microsoft Access OleDbConnection 对象池";
 | 
					        public string Name { get; set; } = $"Microsoft Access OleDbConnection {CoreStrings.S_ObjectPool}";
 | 
				
			||||||
        public int PoolSize { get; set; } = 100;
 | 
					        public int PoolSize { get; set; } = 100;
 | 
				
			||||||
        public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(30);
 | 
					        public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(30);
 | 
				
			||||||
        public TimeSpan IdleTimeout { get; set; } = TimeSpan.Zero;
 | 
					        public TimeSpan IdleTimeout { get; set; } = TimeSpan.Zero;
 | 
				
			||||||
@@ -120,8 +120,8 @@ namespace FreeSql.MsAccess
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                if (obj.Value == null)
 | 
					                if (obj.Value == null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy);
 | 
					                    _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
 | 
				
			||||||
                    throw new Exception($"【{this.Name}】连接字符串错误,请检查。");
 | 
					                    throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
 | 
					                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
 | 
				
			||||||
@@ -151,8 +151,8 @@ namespace FreeSql.MsAccess
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                if (obj.Value == null)
 | 
					                if (obj.Value == null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy);
 | 
					                    _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
 | 
				
			||||||
                    throw new Exception($"【{this.Name}】连接字符串错误,请检查。");
 | 
					                    throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)
 | 
					                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -80,8 +80,8 @@ namespace FreeSql.MsAccess
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (sb.Length > 0) sb.Append("\r\n");
 | 
					                if (sb.Length > 0) sb.Append("\r\n");
 | 
				
			||||||
                var tb = _commonUtils.GetTableByEntity(obj.entityType);
 | 
					                var tb = _commonUtils.GetTableByEntity(obj.entityType);
 | 
				
			||||||
                if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移");
 | 
					                if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName));
 | 
				
			||||||
                if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移,可迁移属性0个");
 | 
					                if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName));
 | 
				
			||||||
                var tbname = tb.DbName;
 | 
					                var tbname = tb.DbName;
 | 
				
			||||||
                var tboldname = tb.DbOldName; //旧表名
 | 
					                var tboldname = tb.DbOldName; //旧表名
 | 
				
			||||||
                if (string.Compare(tbname, tboldname, true) == 0) tboldname = null;
 | 
					                if (string.Compare(tbname, tboldname, true) == 0) tboldname = null;
 | 
				
			||||||
@@ -177,7 +177,7 @@ namespace FreeSql.MsAccess
 | 
				
			|||||||
                    istmpatler = true;
 | 
					                    istmpatler = true;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                if (tboldname != null && isexistsTb == true)
 | 
					                if (tboldname != null && isexistsTb == true)
 | 
				
			||||||
                    throw new Exception($"旧表(OldName):{tboldname} 存在,数据库已存在 {tbname} 表,无法改名");
 | 
					                    throw new Exception(CoreStrings.S_OldTableExists(tboldname, tbname));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                DataTable schemaColumns = null;
 | 
					                DataTable schemaColumns = null;
 | 
				
			||||||
                DataTable schemaDataTypes = null;
 | 
					                DataTable schemaDataTypes = null;
 | 
				
			||||||
@@ -394,7 +394,8 @@ namespace FreeSql.MsAccess
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                Dictionary<string, bool> dicDropTable = new Dictionary<string, bool>(StringComparer.OrdinalIgnoreCase);
 | 
					                Dictionary<string, bool> dicDropTable = new Dictionary<string, bool>(StringComparer.OrdinalIgnoreCase);
 | 
				
			||||||
                Action<string> dropTable = tn => {
 | 
					                Action<string> dropTable = tn =>
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
                    if (dicDropTable.ContainsKey(tn)) return;
 | 
					                    if (dicDropTable.ContainsKey(tn)) return;
 | 
				
			||||||
                    dicDropTable.Add(tn, true);
 | 
					                    dicDropTable.Add(tn, true);
 | 
				
			||||||
                    sb.Append("DROP TABLE ").Append(_commonUtils.QuoteSqlName(tn)).Append(";\r\n");
 | 
					                    sb.Append("DROP TABLE ").Append(_commonUtils.QuoteSqlName(tn)).Append(";\r\n");
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ namespace FreeSql.MsAccess
 | 
				
			|||||||
        public override IDelete<T1> CreateDeleteProvider<T1>(object dywhere) => new MsAccessDelete<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere);
 | 
					        public override IDelete<T1> CreateDeleteProvider<T1>(object dywhere) => new MsAccessDelete<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere);
 | 
				
			||||||
        public override IInsertOrUpdate<T1> CreateInsertOrUpdateProvider<T1>() => throw new NotImplementedException();
 | 
					        public override IInsertOrUpdate<T1> CreateInsertOrUpdateProvider<T1>() => throw new NotImplementedException();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override IDbFirst DbFirst => throw new NotImplementedException("FreeSql.Provider.MsAccess 未实现该功能");
 | 
					        public override IDbFirst DbFirst => throw new NotImplementedException($"FreeSql.Provider.MsAccess {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
        public MsAccessProvider(string masterConnectionString, string[] slaveConnectionString, Func<DbConnection> connectionFactory = null)
 | 
					        public MsAccessProvider(string masterConnectionString, string[] slaveConnectionString, Func<DbConnection> connectionFactory = null)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            this.InternalCommonUtils = new MsAccessUtils(this);
 | 
					            this.InternalCommonUtils = new MsAccessUtils(this);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -54,7 +54,7 @@ namespace FreeSql.MySql.Curd
 | 
				
			|||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    else
 | 
					                    else
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        if (_table.Primarys.Any() == false) throw new Exception($"fsql.InsertOrUpdate + IfExistsDoNothing + MySql 要求实体类 {_table.CsName} 必须有主键");
 | 
					                        if (_table.Primarys.Any() == false) throw new Exception(CoreStrings.Entity_Must_Primary_Key("fsql.InsertOrUpdate + IfExistsDoNothing + MySql ", _table.CsName));
 | 
				
			||||||
                        sql = insert.ToSqlValuesOrSelectUnionAllExtension101(false, (rowd, idx, sb) =>
 | 
					                        sql = insert.ToSqlValuesOrSelectUnionAllExtension101(false, (rowd, idx, sb) =>
 | 
				
			||||||
                            sb.Append(" \r\n FROM dual WHERE NOT EXISTS(").Append(
 | 
					                            sb.Append(" \r\n FROM dual WHERE NOT EXISTS(").Append(
 | 
				
			||||||
                                _orm.Select<T1>()
 | 
					                                _orm.Select<T1>()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,7 +17,7 @@ namespace FreeSql.MySql.Curd
 | 
				
			|||||||
        public OnDuplicateKeyUpdate(IInsert<T1> insert)
 | 
					        public OnDuplicateKeyUpdate(IInsert<T1> insert)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _mysqlInsert = insert as MySqlInsert<T1>;
 | 
					            _mysqlInsert = insert as MySqlInsert<T1>;
 | 
				
			||||||
            if (_mysqlInsert == null) throw new Exception("OnDuplicateKeyUpdate 是 FreeSql.Provider.MySql/FreeSql.Provider.MySqlConnector 特有的功能");
 | 
					            if (_mysqlInsert == null) throw new Exception(CoreStrings.S_Features_Unique("OnDuplicateKeyUpdate", "MySql/FreeSql.Provider.MySqlConnector"));
 | 
				
			||||||
            if (_mysqlInsert._noneParameterFlag == "c") _mysqlInsert._noneParameterFlag = "cu";
 | 
					            if (_mysqlInsert._noneParameterFlag == "c") _mysqlInsert._noneParameterFlag = "cu";
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,12 +27,12 @@ namespace FreeSql.MySql
 | 
				
			|||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (!string.IsNullOrEmpty(masterConnectionString))
 | 
					            if (!string.IsNullOrEmpty(masterConnectionString))
 | 
				
			||||||
                MasterPool = new MySqlConnectionPool("主库", masterConnectionString, null, null);
 | 
					                MasterPool = new MySqlConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
 | 
				
			||||||
            if (slaveConnectionStrings != null)
 | 
					            if (slaveConnectionStrings != null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                foreach (var slaveConnectionString in slaveConnectionStrings)
 | 
					                foreach (var slaveConnectionString in slaveConnectionStrings)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    var slavePool = new MySqlConnectionPool($"从库{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
 | 
					                    var slavePool = new MySqlConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
 | 
				
			||||||
                    SlavePools.Add(slavePool);
 | 
					                    SlavePools.Add(slavePool);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -49,7 +49,7 @@ namespace FreeSql.MySql
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        internal MySqlConnectionPool _pool;
 | 
					        internal MySqlConnectionPool _pool;
 | 
				
			||||||
        public string Name { get; set; } = "MySql MySqlConnection 对象池";
 | 
					        public string Name { get; set; } = $"MySql MySqlConnection {CoreStrings.S_ObjectPool}";
 | 
				
			||||||
        public int PoolSize { get; set; } = 100;
 | 
					        public int PoolSize { get; set; } = 100;
 | 
				
			||||||
        public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
 | 
					        public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
 | 
				
			||||||
        public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
 | 
					        public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
 | 
				
			||||||
@@ -125,8 +125,8 @@ namespace FreeSql.MySql
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (obj.Value == null)
 | 
					                if (obj.Value == null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy);
 | 
					                    _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
 | 
				
			||||||
                    throw new Exception($"【{this.Name}】连接字符串错误,请检查。");
 | 
					                    throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
 | 
					                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
 | 
				
			||||||
@@ -155,8 +155,8 @@ namespace FreeSql.MySql
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (obj.Value == null)
 | 
					                if (obj.Value == null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy);
 | 
					                    _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
 | 
				
			||||||
                    throw new Exception($"【{this.Name}】连接字符串错误,请检查。");
 | 
					                    throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)
 | 
					                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,6 +3,7 @@ using System.Collections;
 | 
				
			|||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Text.RegularExpressions;
 | 
					using System.Text.RegularExpressions;
 | 
				
			||||||
 | 
					using FreeSql;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public struct MygisCoordinate2D : IEquatable<MygisCoordinate2D>
 | 
					public struct MygisCoordinate2D : IEquatable<MygisCoordinate2D>
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -71,7 +72,7 @@ public abstract class MygisGeometry
 | 
				
			|||||||
        else if (wkt.StartsWith("multipoint", StringComparison.CurrentCultureIgnoreCase)) return new MygisMultiPoint(ParseLineString(wkt.Substring(10).Trim('(', ')')));
 | 
					        else if (wkt.StartsWith("multipoint", StringComparison.CurrentCultureIgnoreCase)) return new MygisMultiPoint(ParseLineString(wkt.Substring(10).Trim('(', ')')));
 | 
				
			||||||
        else if (wkt.StartsWith("multilinestring", StringComparison.CurrentCultureIgnoreCase)) return new MygisMultiLineString(ParseMultiLineString(wkt.Substring(15).Trim('(', ')')));
 | 
					        else if (wkt.StartsWith("multilinestring", StringComparison.CurrentCultureIgnoreCase)) return new MygisMultiLineString(ParseMultiLineString(wkt.Substring(15).Trim('(', ')')));
 | 
				
			||||||
        else if (wkt.StartsWith("multipolygon", StringComparison.CurrentCultureIgnoreCase)) return new MygisMultiPolygon(ParseMultiPolygon(wkt.Substring(12).Trim('(', ')')));
 | 
					        else if (wkt.StartsWith("multipolygon", StringComparison.CurrentCultureIgnoreCase)) return new MygisMultiPolygon(ParseMultiPolygon(wkt.Substring(12).Trim('(', ')')));
 | 
				
			||||||
        throw new NotImplementedException($"MygisGeometry.Parse 未实现 \"{wkt}\"");
 | 
					        throw new NotImplementedException(CoreStrings.S_MygisGeometry_NotImplement(wkt));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    static MygisPoint ParsePoint(string str)
 | 
					    static MygisPoint ParsePoint(string str)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -101,8 +101,8 @@ namespace FreeSql.MySql
 | 
				
			|||||||
                {
 | 
					                {
 | 
				
			||||||
                    if (sb.Length > 0) sb.Append("\r\n");
 | 
					                    if (sb.Length > 0) sb.Append("\r\n");
 | 
				
			||||||
                    var tb = _commonUtils.GetTableByEntity(obj.entityType);
 | 
					                    var tb = _commonUtils.GetTableByEntity(obj.entityType);
 | 
				
			||||||
                    if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移");
 | 
					                    if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName));
 | 
				
			||||||
                    if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移,可迁移属性0个");
 | 
					                    if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName));
 | 
				
			||||||
                    var tbname = _commonUtils.SplitTableName(tb.DbName);
 | 
					                    var tbname = _commonUtils.SplitTableName(tb.DbName);
 | 
				
			||||||
                    if (tbname?.Length == 1) tbname = new[] { database, tbname[0] };
 | 
					                    if (tbname?.Length == 1) tbname = new[] { database, tbname[0] };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,7 +32,7 @@ public static partial class FreeSqlMySqlGlobalExtensions
 | 
				
			|||||||
    public static IInsert<T1> MySqlIgnoreInto<T1>(this IInsert<T1> that) where T1 : class
 | 
					    public static IInsert<T1> MySqlIgnoreInto<T1>(this IInsert<T1> that) where T1 : class
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        var _mysqlInsert = that as MySqlInsert<T1>;
 | 
					        var _mysqlInsert = that as MySqlInsert<T1>;
 | 
				
			||||||
        if (_mysqlInsert == null) throw new Exception("MySqlIgnoreInto 是 FreeSql.Provider.MySql/FreeSql.Provider.MySqlConnector 特有的功能");
 | 
					        if (_mysqlInsert == null) throw new Exception(CoreStrings.S_Features_Unique("MySqlIgnoreInto", "MySql/FreeSql.Provider.MySqlConnector"));
 | 
				
			||||||
        _mysqlInsert.InternalIsIgnoreInto = true;
 | 
					        _mysqlInsert.InternalIsIgnoreInto = true;
 | 
				
			||||||
        return that;
 | 
					        return that;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,7 +34,7 @@ public static class FreeSqlMySqlConnectorGlobalExtensions
 | 
				
			|||||||
    public static void ExecuteMySqlBulkCopy<T>(this IInsert<T> that, int? bulkCopyTimeout = null) where T : class
 | 
					    public static void ExecuteMySqlBulkCopy<T>(this IInsert<T> that, int? bulkCopyTimeout = null) where T : class
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        var insert = that as FreeSql.MySql.Curd.MySqlInsert<T>;
 | 
					        var insert = that as FreeSql.MySql.Curd.MySqlInsert<T>;
 | 
				
			||||||
        if (insert == null) throw new Exception("ExecuteMySqlBulkCopy 是 FreeSql.Provider.MySqlConnector 特有的功能");
 | 
					        if (insert == null) throw new Exception(CoreStrings.S_Features_Unique("ExecuteMySqlBulkCopy", "MySqlConnector"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        var dt = that.ToDataTable();
 | 
					        var dt = that.ToDataTable();
 | 
				
			||||||
        if (dt.Rows.Count == 0) return;
 | 
					        if (dt.Rows.Count == 0) return;
 | 
				
			||||||
@@ -81,7 +81,7 @@ public static class FreeSqlMySqlConnectorGlobalExtensions
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            else
 | 
					            else
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                throw new NotImplementedException("ExecuteMySqlBulkCopy 未实现错误,请反馈给作者");
 | 
					                throw new NotImplementedException($"ExecuteMySqlBulkCopy {CoreStrings.S_Not_Implemented_FeedBack}");
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        finally
 | 
					        finally
 | 
				
			||||||
@@ -94,7 +94,7 @@ public static class FreeSqlMySqlConnectorGlobalExtensions
 | 
				
			|||||||
    async public static Task ExecuteMySqlBulkCopyAsync<T>(this IInsert<T> that, int? bulkCopyTimeout = null, CancellationToken cancellationToken = default) where T : class
 | 
					    async public static Task ExecuteMySqlBulkCopyAsync<T>(this IInsert<T> that, int? bulkCopyTimeout = null, CancellationToken cancellationToken = default) where T : class
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        var insert = that as FreeSql.MySql.Curd.MySqlInsert<T>;
 | 
					        var insert = that as FreeSql.MySql.Curd.MySqlInsert<T>;
 | 
				
			||||||
        if (insert == null) throw new Exception("ExecuteMySqlBulkCopyAsync 是 FreeSql.Provider.MySqlConnector 特有的功能");
 | 
					        if (insert == null) throw new Exception(CoreStrings.S_Features_Unique("ExecuteMySqlBulkCopyAsync", "MySqlConnector"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        var dt = that.ToDataTable();
 | 
					        var dt = that.ToDataTable();
 | 
				
			||||||
        if (dt.Rows.Count == 0) return;
 | 
					        if (dt.Rows.Count == 0) return;
 | 
				
			||||||
@@ -141,7 +141,7 @@ public static class FreeSqlMySqlConnectorGlobalExtensions
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            else
 | 
					            else
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                throw new NotImplementedException("ExecuteMySqlBulkCopyAsync 未实现错误,请反馈给作者");
 | 
					                throw new NotImplementedException($"ExecuteMySqlBulkCopyAsync {CoreStrings.S_Not_Implemented_FeedBack}");
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        finally
 | 
					        finally
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,11 +16,11 @@ namespace FreeSql.Odbc.Dameng
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override List<T1> ExecuteDeleted() => throw new NotImplementedException("FreeSql.Odbc.Dameng 未实现该功能");
 | 
					        public override List<T1> ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Odbc.Dameng {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if net40
 | 
					#if net40
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
        public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Odbc.Dameng 未实现该功能");
 | 
					        public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Dameng {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,7 +22,7 @@ namespace FreeSql.Odbc.Dameng
 | 
				
			|||||||
        public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
 | 
					        public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
 | 
				
			||||||
        public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
 | 
					        public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException("FreeSql.Odbc.Dameng 未实现该功能");
 | 
					        protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Odbc.Dameng {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
 | 
					        protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@@ -66,7 +66,7 @@ namespace FreeSql.Odbc.Dameng
 | 
				
			|||||||
        public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
 | 
					        public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
 | 
				
			||||||
        public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
 | 
					        public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Odbc.Dameng 未实现该功能");
 | 
					        protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Dameng {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,12 +22,12 @@ namespace FreeSql.Odbc.Dameng
 | 
				
			|||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (!string.IsNullOrEmpty(masterConnectionString))
 | 
					            if (!string.IsNullOrEmpty(masterConnectionString))
 | 
				
			||||||
                MasterPool = new OdbcDamengConnectionPool("主库", masterConnectionString, null, null);
 | 
					                MasterPool = new OdbcDamengConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
 | 
				
			||||||
            if (slaveConnectionStrings != null)
 | 
					            if (slaveConnectionStrings != null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                foreach (var slaveConnectionString in slaveConnectionStrings)
 | 
					                foreach (var slaveConnectionString in slaveConnectionStrings)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    var slavePool = new OdbcDamengConnectionPool($"从库{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
 | 
					                    var slavePool = new OdbcDamengConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
 | 
				
			||||||
                    SlavePools.Add(slavePool);
 | 
					                    SlavePools.Add(slavePool);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -56,7 +56,7 @@ namespace FreeSql.Odbc.Dameng
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        internal OdbcDamengConnectionPool _pool;
 | 
					        internal OdbcDamengConnectionPool _pool;
 | 
				
			||||||
        public string Name { get; set; } = "Dameng OdbcConnection 对象池";
 | 
					        public string Name { get; set; } = $"Dameng OdbcConnection {CoreStrings.S_ObjectPool}";
 | 
				
			||||||
        public int PoolSize { get; set; } = 100;
 | 
					        public int PoolSize { get; set; } = 100;
 | 
				
			||||||
        public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
 | 
					        public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
 | 
				
			||||||
        public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
 | 
					        public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
 | 
				
			||||||
@@ -131,8 +131,8 @@ namespace FreeSql.Odbc.Dameng
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (obj.Value == null)
 | 
					                if (obj.Value == null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy);
 | 
					                    _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
 | 
				
			||||||
                    throw new Exception($"【{this.Name}】连接字符串错误,请检查。");
 | 
					                    throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
 | 
					                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
 | 
				
			||||||
@@ -161,8 +161,8 @@ namespace FreeSql.Odbc.Dameng
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (obj.Value == null)
 | 
					                if (obj.Value == null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy);
 | 
					                    _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
 | 
				
			||||||
                    throw new Exception($"【{this.Name}】连接字符串错误,请检查。");
 | 
					                    throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)
 | 
					                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -93,8 +93,8 @@ namespace FreeSql.Odbc.Dameng
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (sb.Length > 0) sb.Append("\r\n");
 | 
					                if (sb.Length > 0) sb.Append("\r\n");
 | 
				
			||||||
                var tb = _commonUtils.GetTableByEntity(obj.entityType);
 | 
					                var tb = _commonUtils.GetTableByEntity(obj.entityType);
 | 
				
			||||||
                if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移");
 | 
					                if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName));
 | 
				
			||||||
                if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移,可迁移属性0个");
 | 
					                if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName));
 | 
				
			||||||
                var tbname = _commonUtils.SplitTableName(tb.DbName);
 | 
					                var tbname = _commonUtils.SplitTableName(tb.DbName);
 | 
				
			||||||
                if (tbname?.Length == 1) tbname = new[] { userId, tbname[0] };
 | 
					                if (tbname?.Length == 1) tbname = new[] { userId, tbname[0] };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -115,7 +115,7 @@ namespace FreeSql.Odbc.Dameng
 | 
				
			|||||||
                //codefirst 不支持表名中带 .
 | 
					                //codefirst 不支持表名中带 .
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (string.Compare(tbname[0], userId) != 0 && _orm.Ado.ExecuteScalar(CommandType.Text, _commonUtils.FormatSql(" select 1 from sys.dba_users where username={0}", tbname[0])) == null) //创建数据库
 | 
					                if (string.Compare(tbname[0], userId) != 0 && _orm.Ado.ExecuteScalar(CommandType.Text, _commonUtils.FormatSql(" select 1 from sys.dba_users where username={0}", tbname[0])) == null) //创建数据库
 | 
				
			||||||
                    throw new NotImplementedException($"达梦 CodeFirst 不支持代码创建 tablespace 与 schemas {tbname[0]}");
 | 
					                    throw new NotImplementedException(CoreStrings.S_Dameng_NotSupport_TablespaceSchemas(tbname[0]));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                var sbalter = new StringBuilder();
 | 
					                var sbalter = new StringBuilder();
 | 
				
			||||||
                var istmpatler = false; //创建临时表,导入数据,删除旧表,修改
 | 
					                var istmpatler = false; //创建临时表,导入数据,删除旧表,修改
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -160,7 +160,7 @@ namespace FreeSql.Odbc.Dameng
 | 
				
			|||||||
                    if (dbfull != null) _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]);
 | 
					                    if (dbfull != null) _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]);
 | 
				
			||||||
                    return OdbcType.NVarChar;
 | 
					                    return OdbcType.NVarChar;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            throw new NotImplementedException($"未实现 {column.DbTypeTextFull} 类型映射");
 | 
					            throw new NotImplementedException(CoreStrings.S_TypeMappingNotImplemented(column.DbTypeTextFull));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        static ConcurrentDictionary<string, DbToCs> _dicDbToCs = new ConcurrentDictionary<string, DbToCs>(StringComparer.CurrentCultureIgnoreCase);
 | 
					        static ConcurrentDictionary<string, DbToCs> _dicDbToCs = new ConcurrentDictionary<string, DbToCs>(StringComparer.CurrentCultureIgnoreCase);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,11 +16,11 @@ namespace FreeSql.Odbc.Default
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override List<T1> ExecuteDeleted() => throw new NotImplementedException("FreeSql.Odbc.Default 未实现该功能");
 | 
					        public override List<T1> ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if net40
 | 
					#if net40
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
        public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Odbc.Default 未实现该功能");
 | 
					        public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -62,7 +62,7 @@ namespace FreeSql.Odbc.Default
 | 
				
			|||||||
            return ret;
 | 
					            return ret;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected override List<T1> RawExecuteInserted() => throw new NotImplementedException("FreeSql.Odbc.Default 未实现该功能");
 | 
					        protected override List<T1> RawExecuteInserted() => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if net40
 | 
					#if net40
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
@@ -107,7 +107,7 @@ namespace FreeSql.Odbc.Default
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            return ret;
 | 
					            return ret;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        protected override Task<List<T1>> RawExecuteInsertedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Odbc.Default 未实现该功能");
 | 
					        protected override Task<List<T1>> RawExecuteInsertedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -35,7 +35,7 @@ namespace FreeSql.Odbc.Default
 | 
				
			|||||||
                if (_limit > 0 && _utils.Adapter.SelectTopStyle == OdbcAdapter.SelecTopStyle.Top) sb.Append("TOP ").Append(_skip + _limit).Append(" ");
 | 
					                if (_limit > 0 && _utils.Adapter.SelectTopStyle == OdbcAdapter.SelecTopStyle.Top) sb.Append("TOP ").Append(_skip + _limit).Append(" ");
 | 
				
			||||||
                sb.Append(field);
 | 
					                sb.Append(field);
 | 
				
			||||||
                if (_skip > 0 && _utils.Adapter.SelectTopStyle == OdbcAdapter.SelecTopStyle.Top)
 | 
					                if (_skip > 0 && _utils.Adapter.SelectTopStyle == OdbcAdapter.SelecTopStyle.Top)
 | 
				
			||||||
                    throw new NotImplementedException("FreeSql.Odbc.Default 未实现 Skip/Offset 功能,如果需要分页请使用判断上一次 id");
 | 
					                    throw new NotImplementedException(CoreStrings.S_NotImplementSkipOffset("Default"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                sb.Append(" \r\nFROM ");
 | 
					                sb.Append(" \r\nFROM ");
 | 
				
			||||||
                var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray();
 | 
					                var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,7 +23,7 @@ namespace FreeSql.Odbc.Default
 | 
				
			|||||||
        public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255);
 | 
					        public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255);
 | 
				
			||||||
        public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255);
 | 
					        public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException("FreeSql.Odbc.Default 未实现该功能");
 | 
					        protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
 | 
					        protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@@ -65,7 +65,7 @@ namespace FreeSql.Odbc.Default
 | 
				
			|||||||
        public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken);
 | 
					        public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken);
 | 
				
			||||||
        public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken);
 | 
					        public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Odbc.Default 未实现该功能");
 | 
					        protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,12 +22,12 @@ namespace FreeSql.Odbc.Default
 | 
				
			|||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (!string.IsNullOrEmpty(masterConnectionString))
 | 
					            if (!string.IsNullOrEmpty(masterConnectionString))
 | 
				
			||||||
                MasterPool = new OdbcConnectionPool("主库", masterConnectionString, null, null);
 | 
					                MasterPool = new OdbcConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
 | 
				
			||||||
            if (slaveConnectionStrings != null)
 | 
					            if (slaveConnectionStrings != null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                foreach (var slaveConnectionString in slaveConnectionStrings)
 | 
					                foreach (var slaveConnectionString in slaveConnectionStrings)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    var slavePool = new OdbcConnectionPool($"从库{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
 | 
					                    var slavePool = new OdbcConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
 | 
				
			||||||
                    SlavePools.Add(slavePool);
 | 
					                    SlavePools.Add(slavePool);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -45,7 +45,7 @@ namespace FreeSql.Odbc.Default
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        internal OdbcConnectionPool _pool;
 | 
					        internal OdbcConnectionPool _pool;
 | 
				
			||||||
        public string Name { get; set; } = "Default OdbcConnection 对象池";
 | 
					        public string Name { get; set; } = $"Default OdbcConnection {CoreStrings.S_ObjectPool}";
 | 
				
			||||||
        public int PoolSize { get; set; } = 100;
 | 
					        public int PoolSize { get; set; } = 100;
 | 
				
			||||||
        public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
 | 
					        public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
 | 
				
			||||||
        public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
 | 
					        public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
 | 
				
			||||||
@@ -121,8 +121,8 @@ namespace FreeSql.Odbc.Default
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                if (obj.Value == null)
 | 
					                if (obj.Value == null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy);
 | 
					                    _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
 | 
				
			||||||
                    throw new Exception($"【{this.Name}】连接字符串错误,请检查。");
 | 
					                    throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
 | 
					                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
 | 
				
			||||||
@@ -152,8 +152,8 @@ namespace FreeSql.Odbc.Default
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                if (obj.Value == null)
 | 
					                if (obj.Value == null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy);
 | 
					                    _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
 | 
				
			||||||
                    throw new Exception($"【{this.Name}】连接字符串错误,请检查。");
 | 
					                    throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)
 | 
					                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -90,6 +90,6 @@ namespace FreeSql.Odbc.Default
 | 
				
			|||||||
            return null;
 | 
					            return null;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected override string GetComparisonDDLStatements(params TypeAndName[] objects) => throw new NotImplementedException("FreeSql.Odbc.Default 未实现该功能");
 | 
					        protected override string GetComparisonDDLStatements(params TypeAndName[] objects) => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -20,7 +20,7 @@ namespace FreeSql.Odbc.Default
 | 
				
			|||||||
        public override IDelete<T1> CreateDeleteProvider<T1>(object dywhere) => new OdbcDelete<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere);
 | 
					        public override IDelete<T1> CreateDeleteProvider<T1>(object dywhere) => new OdbcDelete<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere);
 | 
				
			||||||
        public override IInsertOrUpdate<T1> CreateInsertOrUpdateProvider<T1>() => throw new NotImplementedException();
 | 
					        public override IInsertOrUpdate<T1> CreateInsertOrUpdateProvider<T1>() => throw new NotImplementedException();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override IDbFirst DbFirst => throw new NotImplementedException("FreeSql.Odbc.Default 未实现该功能");
 | 
					        public override IDbFirst DbFirst => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// 生成一个普通访问功能的 IFreeSql 对象,用来访问 odbc 
 | 
					        /// 生成一个普通访问功能的 IFreeSql 对象,用来访问 odbc 
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,7 +24,7 @@ namespace FreeSql.Odbc.KingbaseES
 | 
				
			|||||||
        public OdbcKingbaseESOnConflictDoUpdate(IInsert<T1> insert, Expression<Func<T1, object>> columns = null)
 | 
					        public OdbcKingbaseESOnConflictDoUpdate(IInsert<T1> insert, Expression<Func<T1, object>> columns = null)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _pgsqlInsert = insert as OdbcKingbaseESInsert<T1>;
 | 
					            _pgsqlInsert = insert as OdbcKingbaseESInsert<T1>;
 | 
				
			||||||
            if (_pgsqlInsert == null) throw new Exception("OnConflictDoUpdate 是 FreeSql.Provider.Odbc/KingbaseES 特有的功能");
 | 
					            if (_pgsqlInsert == null) throw new Exception(CoreStrings.S_Features_Unique("OnConflictDoUpdate", "Odbc/KingbaseES"));
 | 
				
			||||||
            if (_pgsqlInsert._noneParameterFlag == "c") _pgsqlInsert._noneParameterFlag = "cu";
 | 
					            if (_pgsqlInsert._noneParameterFlag == "c") _pgsqlInsert._noneParameterFlag = "cu";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (columns != null)
 | 
					            if (columns != null)
 | 
				
			||||||
@@ -38,7 +38,7 @@ namespace FreeSql.Odbc.KingbaseES
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            if (_columns == null || _columns.Any() == false)
 | 
					            if (_columns == null || _columns.Any() == false)
 | 
				
			||||||
                _columns = _pgsqlInsert.InternalTable.Primarys;
 | 
					                _columns = _pgsqlInsert.InternalTable.Primarys;
 | 
				
			||||||
            if (_columns.Any() == false) throw new Exception("OnConflictDoUpdate 功能要求实体类必须设置 IsPrimary 属性");
 | 
					            if (_columns.Any() == false) throw new Exception(CoreStrings.S_OnConflictDoUpdate_MustIsPrimary);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected void ClearData()
 | 
					        protected void ClearData()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,12 +23,12 @@ namespace FreeSql.Odbc.KingbaseES
 | 
				
			|||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (!string.IsNullOrEmpty(masterConnectionString))
 | 
					            if (!string.IsNullOrEmpty(masterConnectionString))
 | 
				
			||||||
                MasterPool = new OdbcKingbaseESConnectionPool("主库", masterConnectionString, null, null);
 | 
					                MasterPool = new OdbcKingbaseESConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
 | 
				
			||||||
            if (slaveConnectionStrings != null)
 | 
					            if (slaveConnectionStrings != null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                foreach (var slaveConnectionString in slaveConnectionStrings)
 | 
					                foreach (var slaveConnectionString in slaveConnectionStrings)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    var slavePool = new OdbcKingbaseESConnectionPool($"从库{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
 | 
					                    var slavePool = new OdbcKingbaseESConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
 | 
				
			||||||
                    SlavePools.Add(slavePool);
 | 
					                    SlavePools.Add(slavePool);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -56,7 +56,7 @@ namespace FreeSql.Odbc.KingbaseES
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        internal OdbcKingbaseESConnectionPool _pool;
 | 
					        internal OdbcKingbaseESConnectionPool _pool;
 | 
				
			||||||
        public string Name { get; set; } = "KingbaseES OdbcConnection 对象池";
 | 
					        public string Name { get; set; } = $"KingbaseES OdbcConnection {CoreStrings.S_ObjectPool}";
 | 
				
			||||||
        public int PoolSize { get; set; } = 100;
 | 
					        public int PoolSize { get; set; } = 100;
 | 
				
			||||||
        public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
 | 
					        public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
 | 
				
			||||||
        public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
 | 
					        public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
 | 
				
			||||||
@@ -131,8 +131,8 @@ namespace FreeSql.Odbc.KingbaseES
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (obj.Value == null)
 | 
					                if (obj.Value == null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy);
 | 
					                    _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
 | 
				
			||||||
                    throw new Exception($"【{this.Name}】连接字符串错误,请检查。");
 | 
					                    throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
 | 
					                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
 | 
				
			||||||
@@ -161,8 +161,8 @@ namespace FreeSql.Odbc.KingbaseES
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (obj.Value == null)
 | 
					                if (obj.Value == null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy);
 | 
					                    _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
 | 
				
			||||||
                    throw new Exception($"【{this.Name}】连接字符串错误,请检查。");
 | 
					                    throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)
 | 
					                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -83,8 +83,8 @@ namespace FreeSql.Odbc.KingbaseES
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (sb.Length > 0) sb.Append("\r\n");
 | 
					                if (sb.Length > 0) sb.Append("\r\n");
 | 
				
			||||||
                var tb = _commonUtils.GetTableByEntity(obj.entityType);
 | 
					                var tb = _commonUtils.GetTableByEntity(obj.entityType);
 | 
				
			||||||
                if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移");
 | 
					                if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName));
 | 
				
			||||||
                if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移,可迁移属性0个");
 | 
					                if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName));
 | 
				
			||||||
                var tbname = _commonUtils.SplitTableName(tb.DbName);
 | 
					                var tbname = _commonUtils.SplitTableName(tb.DbName);
 | 
				
			||||||
                if (tbname?.Length == 1) tbname = new[] { "PUBLIC", tbname[0] };
 | 
					                if (tbname?.Length == 1) tbname = new[] { "PUBLIC", tbname[0] };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -53,7 +53,7 @@ namespace FreeSql.Odbc.MySql
 | 
				
			|||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    else
 | 
					                    else
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        if (_table.Primarys.Any() == false) throw new Exception($"fsql.InsertOrUpdate + IfExistsDoNothing + MySql 要求实体类 {_table.CsName} 必须有主键");
 | 
					                        if (_table.Primarys.Any() == false) throw new Exception(CoreStrings.Entity_Must_Primary_Key("fsql.InsertOrUpdate + IfExistsDoNothing + MySql ", _table.CsName));
 | 
				
			||||||
                        sql = insert.ToSqlValuesOrSelectUnionAllExtension101(false, (rowd, idx, sb) =>
 | 
					                        sql = insert.ToSqlValuesOrSelectUnionAllExtension101(false, (rowd, idx, sb) =>
 | 
				
			||||||
                            sb.Append(" \r\n FROM dual WHERE NOT EXISTS(").Append(
 | 
					                            sb.Append(" \r\n FROM dual WHERE NOT EXISTS(").Append(
 | 
				
			||||||
                                _orm.Select<T1>()
 | 
					                                _orm.Select<T1>()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,7 +17,7 @@ namespace FreeSql.Odbc.MySql
 | 
				
			|||||||
        public OdbcMySqlOnDuplicateKeyUpdate(IInsert<T1> insert)
 | 
					        public OdbcMySqlOnDuplicateKeyUpdate(IInsert<T1> insert)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _mysqlInsert = insert as OdbcMySqlInsert<T1>;
 | 
					            _mysqlInsert = insert as OdbcMySqlInsert<T1>;
 | 
				
			||||||
            if (_mysqlInsert == null) throw new Exception("OnDuplicateKeyUpdate 是 FreeSql.Provider.Odbc/MySql 特有的功能");
 | 
					            if (_mysqlInsert == null) throw new Exception(CoreStrings.S_Features_Unique("OnDuplicateKeyUpdate", "Odbc/MySql"));
 | 
				
			||||||
            if (_mysqlInsert._noneParameterFlag == "c") _mysqlInsert._noneParameterFlag = "cu";
 | 
					            if (_mysqlInsert._noneParameterFlag == "c") _mysqlInsert._noneParameterFlag = "cu";
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,12 +23,12 @@ namespace FreeSql.Odbc.MySql
 | 
				
			|||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (!string.IsNullOrEmpty(masterConnectionString))
 | 
					            if (!string.IsNullOrEmpty(masterConnectionString))
 | 
				
			||||||
                MasterPool = new OdbcMySqlConnectionPool("主库", masterConnectionString, null, null);
 | 
					                MasterPool = new OdbcMySqlConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
 | 
				
			||||||
            if (slaveConnectionStrings != null)
 | 
					            if (slaveConnectionStrings != null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                foreach (var slaveConnectionString in slaveConnectionStrings)
 | 
					                foreach (var slaveConnectionString in slaveConnectionStrings)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    var slavePool = new OdbcMySqlConnectionPool($"从库{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
 | 
					                    var slavePool = new OdbcMySqlConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
 | 
				
			||||||
                    SlavePools.Add(slavePool);
 | 
					                    SlavePools.Add(slavePool);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -45,7 +45,7 @@ namespace FreeSql.Odbc.MySql
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        internal OdbcMySqlConnectionPool _pool;
 | 
					        internal OdbcMySqlConnectionPool _pool;
 | 
				
			||||||
        public string Name { get; set; } = "MySql OdbcConnection 对象池";
 | 
					        public string Name { get; set; } = $"MySql OdbcConnection {CoreStrings.S_ObjectPool}";
 | 
				
			||||||
        public int PoolSize { get; set; } = 100;
 | 
					        public int PoolSize { get; set; } = 100;
 | 
				
			||||||
        public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
 | 
					        public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
 | 
				
			||||||
        public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
 | 
					        public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
 | 
				
			||||||
@@ -120,8 +120,8 @@ namespace FreeSql.Odbc.MySql
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (obj.Value == null)
 | 
					                if (obj.Value == null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy);
 | 
					                    _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
 | 
				
			||||||
                    throw new Exception($"【{this.Name}】连接字符串错误,请检查。");
 | 
					                    throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
 | 
					                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
 | 
				
			||||||
@@ -150,8 +150,8 @@ namespace FreeSql.Odbc.MySql
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (obj.Value == null)
 | 
					                if (obj.Value == null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy);
 | 
					                    _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
 | 
				
			||||||
                    throw new Exception($"【{this.Name}】连接字符串错误,请检查。");
 | 
					                    throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)
 | 
					                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -90,8 +90,8 @@ namespace FreeSql.Odbc.MySql
 | 
				
			|||||||
                {
 | 
					                {
 | 
				
			||||||
                    if (sb.Length > 0) sb.Append("\r\n");
 | 
					                    if (sb.Length > 0) sb.Append("\r\n");
 | 
				
			||||||
                    var tb = _commonUtils.GetTableByEntity(obj.entityType);
 | 
					                    var tb = _commonUtils.GetTableByEntity(obj.entityType);
 | 
				
			||||||
                    if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移");
 | 
					                    if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName));
 | 
				
			||||||
                    if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移,可迁移属性0个");
 | 
					                    if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName));
 | 
				
			||||||
                    var tbname = _commonUtils.SplitTableName(tb.DbName);
 | 
					                    var tbname = _commonUtils.SplitTableName(tb.DbName);
 | 
				
			||||||
                    if (tbname?.Length == 1) tbname = new[] { database, tbname[0] };
 | 
					                    if (tbname?.Length == 1) tbname = new[] { database, tbname[0] };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,11 +16,11 @@ namespace FreeSql.Odbc.Oracle
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override List<T1> ExecuteDeleted() => throw new NotImplementedException("FreeSql.Odbc.Oracle 未实现该功能");
 | 
					        public override List<T1> ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Odbc.Oracle {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if net40
 | 
					#if net40
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
        public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Odbc.Oracle 未实现该功能");
 | 
					        public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Oracle {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,7 +22,7 @@ namespace FreeSql.Odbc.Oracle
 | 
				
			|||||||
        public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
 | 
					        public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
 | 
				
			||||||
        public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
 | 
					        public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException("FreeSql.Odbc.Oracle 未实现该功能");
 | 
					        protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Odbc.Oracle {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
 | 
					        protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@@ -68,7 +68,7 @@ namespace FreeSql.Odbc.Oracle
 | 
				
			|||||||
        public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
 | 
					        public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
 | 
				
			||||||
        public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
 | 
					        public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Odbc.Oracle 未实现该功能");
 | 
					        protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Oracle {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,12 +22,12 @@ namespace FreeSql.Odbc.Oracle
 | 
				
			|||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (!string.IsNullOrEmpty(masterConnectionString))
 | 
					            if (!string.IsNullOrEmpty(masterConnectionString))
 | 
				
			||||||
                MasterPool = new OdbcOracleConnectionPool("主库", masterConnectionString, null, null);
 | 
					                MasterPool = new OdbcOracleConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
 | 
				
			||||||
            if (slaveConnectionStrings != null)
 | 
					            if (slaveConnectionStrings != null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                foreach (var slaveConnectionString in slaveConnectionStrings)
 | 
					                foreach (var slaveConnectionString in slaveConnectionStrings)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    var slavePool = new OdbcOracleConnectionPool($"从库{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
 | 
					                    var slavePool = new OdbcOracleConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
 | 
				
			||||||
                    SlavePools.Add(slavePool);
 | 
					                    SlavePools.Add(slavePool);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -56,7 +56,7 @@ namespace FreeSql.Odbc.Oracle
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        internal OdbcOracleConnectionPool _pool;
 | 
					        internal OdbcOracleConnectionPool _pool;
 | 
				
			||||||
        public string Name { get; set; } = "Oracle OdbcConnection 对象池";
 | 
					        public string Name { get; set; } = $"Oracle OdbcConnection {CoreStrings.S_ObjectPool}";
 | 
				
			||||||
        public int PoolSize { get; set; } = 100;
 | 
					        public int PoolSize { get; set; } = 100;
 | 
				
			||||||
        public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
 | 
					        public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
 | 
				
			||||||
        public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
 | 
					        public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
 | 
				
			||||||
@@ -131,8 +131,8 @@ namespace FreeSql.Odbc.Oracle
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (obj.Value == null)
 | 
					                if (obj.Value == null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy);
 | 
					                    _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
 | 
				
			||||||
                    throw new Exception($"【{this.Name}】连接字符串错误,请检查。");
 | 
					                    throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
 | 
					                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
 | 
				
			||||||
@@ -161,8 +161,8 @@ namespace FreeSql.Odbc.Oracle
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (obj.Value == null)
 | 
					                if (obj.Value == null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy);
 | 
					                    _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
 | 
				
			||||||
                    throw new Exception($"【{this.Name}】连接字符串错误,请检查。");
 | 
					                    throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)
 | 
					                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -93,8 +93,8 @@ namespace FreeSql.Odbc.Oracle
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (sb.Length > 0) sb.Append("\r\n");
 | 
					                if (sb.Length > 0) sb.Append("\r\n");
 | 
				
			||||||
                var tb = _commonUtils.GetTableByEntity(obj.entityType);
 | 
					                var tb = _commonUtils.GetTableByEntity(obj.entityType);
 | 
				
			||||||
                if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移");
 | 
					                if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName));
 | 
				
			||||||
                if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移,可迁移属性0个");
 | 
					                if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName));
 | 
				
			||||||
                var tbname = _commonUtils.SplitTableName(tb.DbName);
 | 
					                var tbname = _commonUtils.SplitTableName(tb.DbName);
 | 
				
			||||||
                if (tbname?.Length == 1) tbname = new[] { userId, tbname[0] };
 | 
					                if (tbname?.Length == 1) tbname = new[] { userId, tbname[0] };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -115,7 +115,7 @@ namespace FreeSql.Odbc.Oracle
 | 
				
			|||||||
                //codefirst 不支持表名中带 .
 | 
					                //codefirst 不支持表名中带 .
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (string.Compare(tbname[0], userId) != 0 && _orm.Ado.ExecuteScalar(CommandType.Text, _commonUtils.FormatSql(" select 1 from sys.dba_users where username={0}", tbname[0])) == null) //创建数据库
 | 
					                if (string.Compare(tbname[0], userId) != 0 && _orm.Ado.ExecuteScalar(CommandType.Text, _commonUtils.FormatSql(" select 1 from sys.dba_users where username={0}", tbname[0])) == null) //创建数据库
 | 
				
			||||||
                    throw new NotImplementedException($"Oracle CodeFirst 不支持代码创建 tablespace 与 schemas {tbname[0]}");
 | 
					                    throw new NotImplementedException(CoreStrings.S_Oracle_NotSupport_TablespaceSchemas(tbname[0]));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                var sbalter = new StringBuilder();
 | 
					                var sbalter = new StringBuilder();
 | 
				
			||||||
                var istmpatler = false; //创建临时表,导入数据,删除旧表,修改
 | 
					                var istmpatler = false; //创建临时表,导入数据,删除旧表,修改
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -113,7 +113,7 @@ namespace FreeSql.Odbc.Oracle
 | 
				
			|||||||
                    if (dbfull != null) _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]);
 | 
					                    if (dbfull != null) _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]);
 | 
				
			||||||
                    return OdbcType.NVarChar;
 | 
					                    return OdbcType.NVarChar;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            throw new NotImplementedException($"未实现 {column.DbTypeTextFull} 类型映射");
 | 
					            throw new NotImplementedException(CoreStrings.S_TypeMappingNotImplemented(column.DbTypeTextFull));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        static ConcurrentDictionary<string, DbToCs> _dicDbToCs = new ConcurrentDictionary<string, DbToCs>(StringComparer.CurrentCultureIgnoreCase);
 | 
					        static ConcurrentDictionary<string, DbToCs> _dicDbToCs = new ConcurrentDictionary<string, DbToCs>(StringComparer.CurrentCultureIgnoreCase);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,7 +24,7 @@ namespace FreeSql.Odbc.PostgreSQL
 | 
				
			|||||||
        public OdbcPostgreSQLOnConflictDoUpdate(IInsert<T1> insert, Expression<Func<T1, object>> columns = null)
 | 
					        public OdbcPostgreSQLOnConflictDoUpdate(IInsert<T1> insert, Expression<Func<T1, object>> columns = null)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _pgsqlInsert = insert as OdbcPostgreSQLInsert<T1>;
 | 
					            _pgsqlInsert = insert as OdbcPostgreSQLInsert<T1>;
 | 
				
			||||||
            if (_pgsqlInsert == null) throw new Exception("OnConflictDoUpdate 是 FreeSql.Provider.Odbc/PostgreSQL 特有的功能");
 | 
					            if (_pgsqlInsert == null) throw new Exception(CoreStrings.S_Features_Unique("OnConflictDoUpdate", "Odbc/PostgreSQL"));
 | 
				
			||||||
            if (_pgsqlInsert._noneParameterFlag == "c") _pgsqlInsert._noneParameterFlag = "cu";
 | 
					            if (_pgsqlInsert._noneParameterFlag == "c") _pgsqlInsert._noneParameterFlag = "cu";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (columns != null)
 | 
					            if (columns != null)
 | 
				
			||||||
@@ -38,7 +38,7 @@ namespace FreeSql.Odbc.PostgreSQL
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            if (_columns == null || _columns.Any() == false)
 | 
					            if (_columns == null || _columns.Any() == false)
 | 
				
			||||||
                _columns = _pgsqlInsert.InternalTable.Primarys;
 | 
					                _columns = _pgsqlInsert.InternalTable.Primarys;
 | 
				
			||||||
            if (_columns.Any() == false) throw new Exception("OnConflictDoUpdate 功能要求实体类必须设置 IsPrimary 属性");
 | 
					            if (_columns.Any() == false) throw new Exception(CoreStrings.S_OnConflictDoUpdate_MustIsPrimary);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected void ClearData()
 | 
					        protected void ClearData()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,12 +23,12 @@ namespace FreeSql.Odbc.PostgreSQL
 | 
				
			|||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (!string.IsNullOrEmpty(masterConnectionString))
 | 
					            if (!string.IsNullOrEmpty(masterConnectionString))
 | 
				
			||||||
                MasterPool = new OdbcPostgreSQLConnectionPool("主库", masterConnectionString, null, null);
 | 
					                MasterPool = new OdbcPostgreSQLConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
 | 
				
			||||||
            if (slaveConnectionStrings != null)
 | 
					            if (slaveConnectionStrings != null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                foreach (var slaveConnectionString in slaveConnectionStrings)
 | 
					                foreach (var slaveConnectionString in slaveConnectionStrings)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    var slavePool = new OdbcPostgreSQLConnectionPool($"从库{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
 | 
					                    var slavePool = new OdbcPostgreSQLConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
 | 
				
			||||||
                    SlavePools.Add(slavePool);
 | 
					                    SlavePools.Add(slavePool);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,7 +46,7 @@ namespace FreeSql.Odbc.PostgreSQL
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        internal OdbcPostgreSQLConnectionPool _pool;
 | 
					        internal OdbcPostgreSQLConnectionPool _pool;
 | 
				
			||||||
        public string Name { get; set; } = "PostgreSQL OdbcConnection 对象池";
 | 
					        public string Name { get; set; } = $"PostgreSQL OdbcConnection {CoreStrings.S_ObjectPool}";
 | 
				
			||||||
        public int PoolSize { get; set; } = 50;
 | 
					        public int PoolSize { get; set; } = 50;
 | 
				
			||||||
        public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
 | 
					        public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
 | 
				
			||||||
        public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
 | 
					        public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
 | 
				
			||||||
@@ -121,8 +121,8 @@ namespace FreeSql.Odbc.PostgreSQL
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (obj.Value == null)
 | 
					                if (obj.Value == null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy);
 | 
					                    _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
 | 
				
			||||||
                    throw new Exception($"【{this.Name}】连接字符串错误,请检查。");
 | 
					                    throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
 | 
					                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
 | 
				
			||||||
@@ -151,8 +151,8 @@ namespace FreeSql.Odbc.PostgreSQL
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (obj.Value == null)
 | 
					                if (obj.Value == null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy);
 | 
					                    _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
 | 
				
			||||||
                    throw new Exception($"【{this.Name}】连接字符串错误,请检查。");
 | 
					                    throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)
 | 
					                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -96,8 +96,8 @@ namespace FreeSql.Odbc.PostgreSQL
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (sb.Length > 0) sb.Append("\r\n");
 | 
					                if (sb.Length > 0) sb.Append("\r\n");
 | 
				
			||||||
                var tb = _commonUtils.GetTableByEntity(obj.entityType);
 | 
					                var tb = _commonUtils.GetTableByEntity(obj.entityType);
 | 
				
			||||||
                if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移");
 | 
					                if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName));
 | 
				
			||||||
                if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移,可迁移属性0个");
 | 
					                if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName));
 | 
				
			||||||
                var tbname = _commonUtils.SplitTableName(tb.DbName);
 | 
					                var tbname = _commonUtils.SplitTableName(tb.DbName);
 | 
				
			||||||
                if (tbname?.Length == 1) tbname = new[] { "public", tbname[0] };
 | 
					                if (tbname?.Length == 1) tbname = new[] { "public", tbname[0] };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -40,7 +40,7 @@ namespace FreeSql.Odbc.SqlServer
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
                var sql = sb.ToString();
 | 
					                var sql = sb.ToString();
 | 
				
			||||||
                var validx = sql.IndexOf(" WHERE ");
 | 
					                var validx = sql.IndexOf(" WHERE ");
 | 
				
			||||||
                if (validx == -1) throw new ArgumentException("找不到 WHERE ");
 | 
					                if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("WHERE"));
 | 
				
			||||||
                sql = sb.Clear().Append(sql.Substring(0, validx))
 | 
					                sql = sb.Clear().Append(sql.Substring(0, validx))
 | 
				
			||||||
                    .Append(sbret)
 | 
					                    .Append(sbret)
 | 
				
			||||||
                    .Append(sql.Substring(validx)).ToString();
 | 
					                    .Append(sql.Substring(validx)).ToString();
 | 
				
			||||||
@@ -97,7 +97,7 @@ namespace FreeSql.Odbc.SqlServer
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
                var sql = sb.ToString();
 | 
					                var sql = sb.ToString();
 | 
				
			||||||
                var validx = sql.IndexOf(" WHERE ");
 | 
					                var validx = sql.IndexOf(" WHERE ");
 | 
				
			||||||
                if (validx == -1) throw new ArgumentException("找不到 WHERE ");
 | 
					                if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("WHERE"));
 | 
				
			||||||
                sql = sb.Clear().Append(sql.Substring(0, validx))
 | 
					                sql = sb.Clear().Append(sql.Substring(0, validx))
 | 
				
			||||||
                    .Append(sbret)
 | 
					                    .Append(sbret)
 | 
				
			||||||
                    .Append(sql.Substring(validx)).ToString();
 | 
					                    .Append(sql.Substring(validx)).ToString();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -69,14 +69,14 @@ namespace FreeSql.Odbc.SqlServer
 | 
				
			|||||||
            if ((_commonUtils as OdbcSqlServerUtils).ServerVersion > 10)
 | 
					            if ((_commonUtils as OdbcSqlServerUtils).ServerVersion > 10)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                var validx = sql.IndexOf(") VALUES");
 | 
					                var validx = sql.IndexOf(") VALUES");
 | 
				
			||||||
                if (validx == -1) throw new ArgumentException("找不到 VALUES");
 | 
					                if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("VALUES"));
 | 
				
			||||||
                sb.Insert(0, sql.Substring(0, validx + 1));
 | 
					                sb.Insert(0, sql.Substring(0, validx + 1));
 | 
				
			||||||
                sb.Append(sql.Substring(validx + 1));
 | 
					                sb.Append(sql.Substring(validx + 1));
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            else
 | 
					            else
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                var validx = sql.IndexOf(") SELECT ");
 | 
					                var validx = sql.IndexOf(") SELECT ");
 | 
				
			||||||
                if (validx == -1) throw new ArgumentException("找不到 SELECT");
 | 
					                if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("SELECT"));
 | 
				
			||||||
                sb.Insert(0, sql.Substring(0, validx + 1));
 | 
					                sb.Insert(0, sql.Substring(0, validx + 1));
 | 
				
			||||||
                sb.Append(sql.Substring(validx + 1));
 | 
					                sb.Append(sql.Substring(validx + 1));
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@@ -153,14 +153,14 @@ namespace FreeSql.Odbc.SqlServer
 | 
				
			|||||||
            if ((_commonUtils as OdbcSqlServerUtils).ServerVersion > 10)
 | 
					            if ((_commonUtils as OdbcSqlServerUtils).ServerVersion > 10)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                var validx = sql.IndexOf(") VALUES");
 | 
					                var validx = sql.IndexOf(") VALUES");
 | 
				
			||||||
                if (validx == -1) throw new ArgumentException("找不到 VALUES");
 | 
					                if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("VALUES"));
 | 
				
			||||||
                sb.Insert(0, sql.Substring(0, validx + 1));
 | 
					                sb.Insert(0, sql.Substring(0, validx + 1));
 | 
				
			||||||
                sb.Append(sql.Substring(validx + 1));
 | 
					                sb.Append(sql.Substring(validx + 1));
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            else
 | 
					            else
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                var validx = sql.IndexOf(") SELECT ");
 | 
					                var validx = sql.IndexOf(") SELECT ");
 | 
				
			||||||
                if (validx == -1) throw new ArgumentException("找不到 SELECT");
 | 
					                if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("SELECT"));
 | 
				
			||||||
                sb.Insert(0, sql.Substring(0, validx + 1));
 | 
					                sb.Insert(0, sql.Substring(0, validx + 1));
 | 
				
			||||||
                sb.Append(sql.Substring(validx + 1));
 | 
					                sb.Append(sql.Substring(validx + 1));
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,7 +46,7 @@ namespace FreeSql.Odbc.SqlServer
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
                var sql = sb.ToString();
 | 
					                var sql = sb.ToString();
 | 
				
			||||||
                var validx = sql.IndexOf(" \r\nWHERE ");
 | 
					                var validx = sql.IndexOf(" \r\nWHERE ");
 | 
				
			||||||
                if (validx == -1) throw new ArgumentException("找不到 WHERE ");
 | 
					                if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("WHERE"));
 | 
				
			||||||
                sql = sb.Clear().Append(sql.Substring(0, validx))
 | 
					                sql = sb.Clear().Append(sql.Substring(0, validx))
 | 
				
			||||||
                    .Append(sbret)
 | 
					                    .Append(sbret)
 | 
				
			||||||
                    .Append(sql.Substring(validx)).ToString();
 | 
					                    .Append(sql.Substring(validx)).ToString();
 | 
				
			||||||
@@ -139,7 +139,7 @@ namespace FreeSql.Odbc.SqlServer
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
                var sql = sb.ToString();
 | 
					                var sql = sb.ToString();
 | 
				
			||||||
                var validx = sql.IndexOf(" \r\nWHERE ");
 | 
					                var validx = sql.IndexOf(" \r\nWHERE ");
 | 
				
			||||||
                if (validx == -1) throw new ArgumentException("找不到 WHERE ");
 | 
					                if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("WHERE"));
 | 
				
			||||||
                sql = sb.Clear().Append(sql.Substring(0, validx))
 | 
					                sql = sb.Clear().Append(sql.Substring(0, validx))
 | 
				
			||||||
                    .Append(sbret)
 | 
					                    .Append(sbret)
 | 
				
			||||||
                    .Append(sql.Substring(validx)).ToString();
 | 
					                    .Append(sql.Substring(validx)).ToString();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,12 +23,12 @@ namespace FreeSql.Odbc.SqlServer
 | 
				
			|||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (!string.IsNullOrEmpty(masterConnectionString))
 | 
					            if (!string.IsNullOrEmpty(masterConnectionString))
 | 
				
			||||||
                MasterPool = new OdbcSqlServerConnectionPool("主库", masterConnectionString, null, null);
 | 
					                MasterPool = new OdbcSqlServerConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
 | 
				
			||||||
            if (slaveConnectionStrings != null)
 | 
					            if (slaveConnectionStrings != null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                foreach (var slaveConnectionString in slaveConnectionStrings)
 | 
					                foreach (var slaveConnectionString in slaveConnectionStrings)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    var slavePool = new OdbcSqlServerConnectionPool($"从库{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
 | 
					                    var slavePool = new OdbcSqlServerConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
 | 
				
			||||||
                    SlavePools.Add(slavePool);
 | 
					                    SlavePools.Add(slavePool);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -45,7 +45,7 @@ namespace FreeSql.Odbc.SqlServer
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        internal OdbcSqlServerConnectionPool _pool;
 | 
					        internal OdbcSqlServerConnectionPool _pool;
 | 
				
			||||||
        public string Name { get; set; } = "SqlServer OdbcConnection 对象池";
 | 
					        public string Name { get; set; } = $"SqlServer OdbcConnection {CoreStrings.S_ObjectPool}";
 | 
				
			||||||
        public int PoolSize { get; set; } = 100;
 | 
					        public int PoolSize { get; set; } = 100;
 | 
				
			||||||
        public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
 | 
					        public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
 | 
				
			||||||
        public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
 | 
					        public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
 | 
				
			||||||
@@ -121,8 +121,8 @@ namespace FreeSql.Odbc.SqlServer
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                if (obj.Value == null)
 | 
					                if (obj.Value == null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy);
 | 
					                    _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
 | 
				
			||||||
                    throw new Exception($"【{this.Name}】连接字符串错误,请检查。");
 | 
					                    throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
 | 
					                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
 | 
				
			||||||
@@ -152,8 +152,8 @@ namespace FreeSql.Odbc.SqlServer
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                if (obj.Value == null)
 | 
					                if (obj.Value == null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy);
 | 
					                    _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
 | 
				
			||||||
                    throw new Exception($"【{this.Name}】连接字符串错误,请检查。");
 | 
					                    throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)
 | 
					                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -150,8 +150,8 @@ ELSE
 | 
				
			|||||||
                {
 | 
					                {
 | 
				
			||||||
                    if (sb.Length > 0) sb.Append("\r\n");
 | 
					                    if (sb.Length > 0) sb.Append("\r\n");
 | 
				
			||||||
                    var tb = _commonUtils.GetTableByEntity(obj.entityType);
 | 
					                    var tb = _commonUtils.GetTableByEntity(obj.entityType);
 | 
				
			||||||
                    if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移");
 | 
					                    if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName));
 | 
				
			||||||
                    if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移,可迁移属性0个");
 | 
					                    if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName));
 | 
				
			||||||
                    var tbname = _commonUtils.SplitTableName(tb.DbName);
 | 
					                    var tbname = _commonUtils.SplitTableName(tb.DbName);
 | 
				
			||||||
                    if (tbname?.Length == 1) tbname = new[] { database, "dbo", tbname[0] };
 | 
					                    if (tbname?.Length == 1) tbname = new[] { database, "dbo", tbname[0] };
 | 
				
			||||||
                    if (tbname?.Length == 2) tbname = new[] { database, tbname[0], tbname[1] };
 | 
					                    if (tbname?.Length == 2) tbname = new[] { database, tbname[0], tbname[1] };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,11 +16,11 @@ namespace FreeSql.Oracle.Curd
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override List<T1> ExecuteDeleted() => throw new NotImplementedException("FreeSql.Provider.Oracle 未实现该功能");
 | 
					        public override List<T1> ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.Oracle {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if net40
 | 
					#if net40
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
        public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.Oracle 未实现该功能");
 | 
					        public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Oracle {CoreStrings.S_Not_Implemented_Feature}");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user