From 4fa125e93c354c038c9c31d16192208280670941 Mon Sep 17 00:00:00 2001 From: igeekfan Date: Fri, 10 Jun 2022 03:05:27 +0800 Subject: [PATCH 1/2] =?UTF-8?q?:sparkles:=20support=20provider=E3=80=81Ext?= =?UTF-8?q?ensions=20Exceptions=20=E5=A4=9A=E8=AF=AD=E8=A8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BaseEntityReadOnly.cs | 2 +- .../FreeSqlExtensionsLinq.cs | 2 +- .../QueryableProvider.cs | 16 +- Extensions/FreeSql.Generator/ConsoleApp.cs | 11 +- FreeSql.DbContext/FreeSql.DbContext.xml | 9 - .../Properties/DbContextStrings.resx | 205 ++++---- .../Properties/ProviderExtensionsTests.cs | 99 ++++ FreeSql/FreeSql.xml | 175 +++++++ FreeSql/Properties/CoreStrings.Designer.cs | 253 ++++++++- FreeSql/Properties/CoreStrings.resx | 480 +++++++++++------- FreeSql/Properties/CoreStrings.zh-Hans.resx | 143 +++++- FreeSql/Properties/Resources.tt | 7 +- .../ClickHouseAdo/ClickHouseAdo.cs | 4 +- .../ClickHouseAdo/ClickHouseConnectionPool.cs | 10 +- .../ClickHouseCodeFirst.cs | 4 +- .../Curd/ClickHouseDelete.cs | 4 +- .../Curd/ClickHouseUpdate.cs | 4 +- .../Curd/CustomDelete.cs | 4 +- .../Curd/CustomInsert.cs | 4 +- .../Curd/CustomSelect.cs | 2 +- .../Curd/CustomUpdate.cs | 4 +- .../CustomAdo/CustomAdo.cs | 4 +- .../CustomCodeFirst.cs | 2 +- .../FreeSql.Provider.Custom/CustomProvider.cs | 4 +- .../Curd/DamengDelete.cs | 4 +- .../Curd/DamengUpdate.cs | 4 +- .../DamengAdo/DamengAdo.cs | 4 +- .../DamengAdo/DamengConnectionPool.cs | 10 +- .../DamengCodeFirst.cs | 6 +- .../FreeSql.Provider.Dameng/DamengDbFirst.cs | 2 +- .../DamengExtensions.cs | 4 +- .../FirebirdAdo/FirebirdAdo.cs | 4 +- .../FirebirdAdo/FirebirdConnectionPool.cs | 10 +- .../FirebirdCodeFirst.cs | 4 +- .../Curd/GBaseDelete.cs | 4 +- .../Curd/GBaseInsert.cs | 2 +- .../Curd/GBaseUpdate.cs | 4 +- .../GBaseAdo/GBaseAdo.cs | 4 +- .../GBaseAdo/GBaseConnectionPool.cs | 10 +- .../FreeSql.Provider.GBase/GBaseCodeFirst.cs | 4 +- .../Curd/KingbaseESOnConflictDoUpdate.cs | 4 +- .../KingbaseESAdo/KingbaseESAdo.cs | 4 +- .../KingbaseESAdo/KingbaseESConnectionPool.cs | 10 +- .../KingbaseESCodeFirst.cs | 4 +- .../Curd/MsAccessDelete.cs | 4 +- .../Curd/MsAccessInsert.cs | 2 +- .../Curd/MsAccessSelect.cs | 2 +- .../Curd/MsAccessUpdate.cs | 6 +- .../MsAccessAdo/MsAccessAdo.cs | 4 +- .../MsAccessAdo/MsAccessConnectionPool.cs | 10 +- .../MsAccessCodeFirst.cs | 9 +- .../MsAccessProvider.cs | 2 +- .../Curd/MySqlInsertOrUpdate.cs | 2 +- .../Curd/OnDuplicateKeyUpdate.cs | 2 +- .../MySqlAdo/MySqlAdo.cs | 4 +- .../MySqlAdo/MySqlConnectionPool.cs | 10 +- .../MySqlAdo/MygisTypes.cs | 3 +- .../FreeSql.Provider.MySql/MySqlCodeFirst.cs | 4 +- .../FreeSql.Provider.MySql/MySqlExtensions.cs | 2 +- .../FreeSqlMySqlConnectorGlobalExtensions.cs | 8 +- .../Dameng/Curd/OdbcDamengDelete.cs | 4 +- .../Dameng/Curd/OdbcDamengUpdate.cs | 4 +- .../Dameng/OdbcDamengAdo/OdbcDamengAdo.cs | 4 +- .../OdbcDamengAdo/OdbcDamengConnectionPool.cs | 10 +- .../Dameng/OdbcDamengCodeFirst.cs | 6 +- .../Dameng/OdbcDamengDbFirst.cs | 2 +- .../Default/Curd/OdbcDelete.cs | 4 +- .../Default/Curd/OdbcInsert.cs | 4 +- .../Default/Curd/OdbcSelect.cs | 2 +- .../Default/Curd/OdbcUpdate.cs | 4 +- .../Default/OdbcAdo/OdbcAdo.cs | 4 +- .../Default/OdbcAdo/OdbcConnectionPool.cs | 10 +- .../Default/OdbcCodeFirst.cs | 2 +- .../Default/OdbcProvider.cs | 2 +- .../Curd/OdbcKingbaseESOnConflictDoUpdate.cs | 4 +- .../OdbcKingbaseESAdo/OdbcKingbaseESAdo.cs | 4 +- .../OdbcKingbaseESConnectionPool.cs | 10 +- .../KingbaseES/OdbcKingbaseESCodeFirst.cs | 4 +- .../MySql/Curd/OdbcMySqlInsertOrUpdate.cs | 2 +- .../Curd/OdbcMySqlOnDuplicateKeyUpdate.cs | 2 +- .../MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs | 4 +- .../OdbcMySqlAdo/OdbcMySqlConnectionPool.cs | 10 +- .../MySql/OdbcMySqlCodeFirst.cs | 4 +- .../Oracle/Curd/OdbcOracleDelete.cs | 4 +- .../Oracle/Curd/OdbcOracleUpdate.cs | 4 +- .../Oracle/OdbcOracleAdo/OdbcOracleAdo.cs | 4 +- .../OdbcOracleAdo/OdbcOracleConnectionPool.cs | 10 +- .../Oracle/OdbcOracleCodeFirst.cs | 6 +- .../Oracle/OdbcOracleDbFirst.cs | 2 +- .../Curd/OdbcPostgreSQLOnConflictDoUpdate.cs | 4 +- .../OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs | 4 +- .../OdbcPostgreSQLConnectionPool.cs | 10 +- .../PostgreSQL/OdbcPostgreSQLCodeFirst.cs | 4 +- .../SqlServer/Curd/OdbcSqlServerDelete.cs | 4 +- .../SqlServer/Curd/OdbcSqlServerInsert.cs | 8 +- .../SqlServer/Curd/OdbcSqlServerUpdate.cs | 4 +- .../OdbcSqlServerAdo/OdbcSqlServerAdo.cs | 4 +- .../OdbcSqlServerConnectionPool.cs | 10 +- .../SqlServer/OdbcSqlServerCodeFirst.cs | 4 +- .../Curd/OracleDelete.cs | 4 +- .../Curd/OracleUpdate.cs | 4 +- .../OracleAdo/OracleAdo.cs | 4 +- .../OracleAdo/OracleConnectionPool.cs | 10 +- .../OracleCodeFirst.cs | 6 +- .../FreeSql.Provider.Oracle/OracleDbFirst.cs | 2 +- .../OracleExtensions.cs | 4 +- .../Curd/OnConflictDoUpdate.cs | 4 +- .../PostgreSQLAdo/PostgreSQLAdo.cs | 4 +- .../PostgreSQLAdo/PostgreSQLConnectionPool.cs | 10 +- .../PostgreSQLCodeFirst.cs | 4 +- .../PostgreSQLExtensions.cs | 9 +- .../ShenTongAdo/ShenTongAdo.cs | 4 +- .../ShenTongAdo/ShenTongConnectionPool.cs | 10 +- .../ShenTongCodeFirst.cs | 4 +- .../Curd/SqlServerDelete.cs | 4 +- .../Curd/SqlServerInsert.cs | 8 +- .../Curd/SqlServerUpdate.cs | 4 +- .../SqlServerAdo/SqlServerAdo.cs | 4 +- .../SqlServerAdo/SqlServerConnectionPool.cs | 10 +- .../SqlServerCodeFirst.cs | 4 +- .../SqlServerExtensions.cs | 8 +- .../Curd/SqliteDelete.cs | 4 +- .../Curd/SqliteInsertOrUpdate.cs | 4 +- .../Curd/SqliteUpdate.cs | 4 +- .../SqliteAdo/SqliteAdo.cs | 4 +- .../SqliteAdo/SqliteConnectionPool.cs | 10 +- .../SqliteCodeFirst.cs | 4 +- .../FreeSql.Provider.Sqlite/SqliteDbFirst.cs | 2 +- 128 files changed, 1369 insertions(+), 608 deletions(-) create mode 100644 FreeSql.Tests/FreeSql.Tests/Properties/ProviderExtensionsTests.cs diff --git a/Extensions/FreeSql.Extensions.BaseEntity/BaseEntityReadOnly.cs b/Extensions/FreeSql.Extensions.BaseEntity/BaseEntityReadOnly.cs index fc3ea8b8..1eddf87f 100644 --- a/Extensions/FreeSql.Extensions.BaseEntity/BaseEntityReadOnly.cs +++ b/Extensions/FreeSql.Extensions.BaseEntity/BaseEntityReadOnly.cs @@ -24,7 +24,7 @@ namespace FreeSql static Func _resoleOrm; internal static Func _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 resolveUow) => Initialization(() => fsql, resolveUow); public static void Initialization(Func resoleOrm, Func resolveUow) diff --git a/Extensions/FreeSql.Extensions.Linq/FreeSqlExtensionsLinq.cs b/Extensions/FreeSql.Extensions.Linq/FreeSqlExtensionsLinq.cs index 45920717..002626b7 100644 --- a/Extensions/FreeSql.Extensions.Linq/FreeSqlExtensionsLinq.cs +++ b/Extensions/FreeSql.Extensions.Linq/FreeSqlExtensionsLinq.cs @@ -33,7 +33,7 @@ public static class FreeSqlExtensionsLinqSql /// public static ISelect RestoreToSelect(this IQueryable that) where T1 : class { - var queryable = that as QueryableProvider ?? throw new Exception($"无法将 IQueryable<{typeof(T1).Name}> 转换为 ISelect<{typeof(T1).Name}>,因为他的实现不是 FreeSql.Extensions.Linq.QueryableProvider"); + var queryable = that as QueryableProvider ?? throw new Exception(CoreStrings.S_CannotBeConverted_To_ISelect(typeof(T1).Name)); return queryable._select; } diff --git a/Extensions/FreeSql.Extensions.Linq/QueryableProvider.cs b/Extensions/FreeSql.Extensions.Linq/QueryableProvider.cs index 1d1b1af6..12e0131c 100644 --- a/Extensions/FreeSql.Extensions.Linq/QueryableProvider.cs +++ b/Extensions/FreeSql.Extensions.Linq/QueryableProvider.cs @@ -121,7 +121,7 @@ namespace FreeSql.Extensions.Linq case "Average": return tplMaxMinAvgSum("Avg"); case "Concat": - return throwCallExp(" 不支持"); + return throwCallExp(CoreStrings.Not_Support); case "Contains": if (callExp.Arguments.Count == 2) { @@ -141,7 +141,7 @@ namespace FreeSql.Extensions.Linq _select.Distinct(); break; } - return throwCallExp(" 不支持"); + return throwCallExp(CoreStrings.Not_Support); case "ElementAt": case "ElementAtOrDefault": @@ -178,7 +178,7 @@ namespace FreeSql.Extensions.Linq _select.InternalWhere(whereParam); break; } - return throwCallExp(" 不支持"); + return throwCallExp(CoreStrings.Not_Support); case "Skip": _select.Offset((int)callExp.Arguments[1].GetConstExprValue()); @@ -190,7 +190,7 @@ namespace FreeSql.Extensions.Linq case "ToList": if (callExp.Arguments.Count == 1) return _select.ToList(); - return throwCallExp(" 不支持"); + return throwCallExp(CoreStrings.Not_Support); case "Select": var selectParam = (callExp.Arguments[1] as UnaryExpression)?.Operand as LambdaExpression; @@ -199,7 +199,7 @@ namespace FreeSql.Extensions.Linq _select._selectExpression = selectParam; break; } - return throwCallExp(" 不支持"); + return throwCallExp(CoreStrings.Not_Support); case "Join": if (callExp.Arguments.Count == 5) @@ -241,13 +241,13 @@ namespace FreeSql.Extensions.Linq case "Last": case "LastOrDefault": - return throwCallExp(" 不支持"); + return throwCallExp(CoreStrings.Not_Support); case "GroupBy": - return throwCallExp(" 不支持"); + return throwCallExp(CoreStrings.Not_Support); default: - return throwCallExp(" 不支持"); + return throwCallExp(CoreStrings.Not_Support); } } if (tresult == null) return null; diff --git a/Extensions/FreeSql.Generator/ConsoleApp.cs b/Extensions/FreeSql.Generator/ConsoleApp.cs index bbeed9a0..92530b50 100644 --- a/Extensions/FreeSql.Generator/ConsoleApp.cs +++ b/Extensions/FreeSql.Generator/ConsoleApp.cs @@ -159,7 +159,7 @@ new Colorful.Formatter("推荐在实体类目录创建 gen.bat,双击它重新 case "-nameoptions": 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++; break; case "-namespace": @@ -168,7 +168,8 @@ new Colorful.Formatter("推荐在实体类目录创建 gen.bat,双击它重新 break; case "-db": 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()) { case "mysql": ArgsDbType = DataType.MySql; break; @@ -181,7 +182,7 @@ new Colorful.Formatter("推荐在实体类目录创建 gen.bat,双击它重新 case "kingbasees": ArgsDbType = DataType.KingbaseES; break; case "shentong": ArgsDbType = DataType.ShenTong; 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(); a++; @@ -208,11 +209,11 @@ new Colorful.Formatter("推荐在实体类目录创建 gen.bat,双击它重新 a++; break; 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 { diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index 1ab5bf1c..6b638cad 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -795,14 +795,5 @@ - - - 批量注入 Repository,可以参考代码自行调整 - - - - - - diff --git a/FreeSql.DbContext/Properties/DbContextStrings.resx b/FreeSql.DbContext/Properties/DbContextStrings.resx index 5bec8621..da3ae80a 100644 --- a/FreeSql.DbContext/Properties/DbContextStrings.resx +++ b/FreeSql.DbContext/Properties/DbContextStrings.resx @@ -1,6 +1,6 @@  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + FreeSql:An error occurred in AddFreeDbContext, check that the construction parameters of {dbContextTypeName} have been injected correctly - + FreeSql:Not addable, already exists in state management: {entityString} - + FreeSql:Not addable, entity has no primary key: {entityString} - + FreeSql:Not addable, no value for primary key set: {entityString} - + FreeSql:Not addable, self-increasing attribute has value: {entityString} - + FreeSql:Not attachable, entity has no primary key: {entityString} - + FreeSql:Not attachable, no value for primary key set: {entityString} - + FreeSql:Not deletable, data not tracked, should query first: {entityString} - + FreeSql:Not deletable, entity has no primary key: {entityString} - + FreeSql:Not deletable, no value for primary key set: {entityString} - + FreeSql:Not editable, entity has no primary key: {entityString} - + FreeSql:Not updatable, data not tracked, should be queried first or Attach:{entityString} - + FreeSql:Not updatable, entity has no primary key: {entityString} - + FreeSql:Not updatable, no value for primary key set: {entityString} - + FreeSql:Not updatable, the record does not exist in the database: {entityString} - + FreeSql:Please configure UseFreeSql in OnConfiguring or AddFreeDbContext - + FreeSql:DbSet. AsType parameter error, please pass in the correct entity type - + FreeSql:Entity type {EntityTypeName} cannot be converted to {name} and cannot use this method - + FreeSql:Entity type {EntityTypeName} Primary key type is not {fullName} and cannot be used with this method - + FreeSql:Entity type {EntityTypeName} Primary key number is not 1 and cannot be used with this method - + FreeSql:FreeSql. Repository failed to set filter because object does not belong to IRepository - + FreeSql:Not comparable, entity has no primary key: {entityString} - + FreeSql:Non-comparable, no value for primary key set: {entityString} - + FreeSql:FreeSql. Repository Insert failed because the filter {filterKey}: {filterValueExpression} was set and the inserted data does not conform to {entityString} - + FreeSql:ISelect. AsType parameter does not support specifying as object - + FreeSql:Property {propertyName} does not exist for {tableTypeFullName} - + FreeSql:Method DbSet<> not found. StatesRemoveByObjects - + FreeSql:Parameter data type error {entityTypeFullName} - + FreeSql:Parameter error {param} - + FreeSql:Parameter error {param} cannot be null - + FreeSql:Parameter error {many} is not a collection property - + FreeSql:Parameter error {many} Collection property does not exist - + FreeSql:Parameter error {one} attribute does not exist - + FreeSql:Propagation_ Mandatory: With the current transaction, throw an exception if there is no current transaction - + FreeSql:Propagation_ Never: Perform the operation non-transactionally and throw an exception if the current transaction exists - + FreeSql:Property {propertyName} of type {tableTypeFullName} is not OneToMany or ManyToMany attribute - + FreeSql:Special error: Bulk add failed, {dataType} returned data, does not match the number added - + FreeSql:Special error: Update failed, data not tracked: {entityString} - + FreeSql:Transaction opened, unit of work cannot be disabled - + FreeSql:The {tableTypeFullName} type has set the property {propertyName} Ignore the attribute - + FreeSql:The {unitOfWorkManager} constructor parameter {fsql} cannot be null - + FreeSql:FreeSql. Repository Update failed because the filter {filterKey}: {filterValueExpression} is set and the updated data does not conform to {entityString} - + \ No newline at end of file diff --git a/FreeSql.Tests/FreeSql.Tests/Properties/ProviderExtensionsTests.cs b/FreeSql.Tests/FreeSql.Tests/Properties/ProviderExtensionsTests.cs new file mode 100644 index 00000000..918f76c5 --- /dev/null +++ b/FreeSql.Tests/FreeSql.Tests/Properties/ProviderExtensionsTests.cs @@ -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); + } + + } +} \ No newline at end of file diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 434ec7a2..8e80f06e 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -5259,6 +5259,181 @@ 运行时错误,反射获取 IncludeMany 方法失败 + + + 蛋疼的 Access 插入只能一条一条执行,不支持 values(..),(..) 也不支持 select .. UNION ALL select .. + + + + + BaseEntity.Initialization 初始化错误,获取到 IFreeSql 是 null + + + + + 【{thisName}】Block access and wait for recovery: {exMessage} + + + + + 无法将 IQueryable<{typeofName}> 转换为 ISelect<{typeofName}>,因为他的实现不是 FreeSql.Extensions.Linq.QueryableProvider + + + + + 连接字符串错误 + + + + + 【{thisName}】连接字符串错误,请检查。 + + + + + 连接字符串错误,或者检查项目属性 > 生成 > 目标平台:x86 | x64 + + + + + 【{thisName}】连接字符串错误,请检查。或者检查项目属性 > 生成 > 目标平台:x86 | x64 + + + + + FreeSql.Provider.CustomAdapter 无法使用 CreateCommand + + + + + FreeSql.Provider.CustomAdapter 仅支持 UseConnectionFactory 方式构建 IFreeSql + + + + + 达梦 CodeFirst 不支持代码创建 tablespace 与 schemas {tbname} + + + + + -DB 参数错误,未提供 ConnectionString + + + + + -DB 参数错误,格式为:MySql,ConnectionString + + + + + -DB 参数错误,不支持的类型:\"{dbargs}\" + + + + + {method} 是 FreeSql.Provider.{provider} 特有的功能 + + + + + fsql.InsertOrUpdate Sqlite 无法完成 UpdateColumns 操作 + + + + + 主库 + + + + + MygisGeometry.Parse 未实现 \"{wkt}\" + + + + + -NameOptions 参数错误,格式为:0,0,0,0 + + + + + 未实现该功能 + + + + + 未实现错误,请反馈给作者 + + + + + 找不到 {name} + + + + + FreeSql.Provider.{providerName} 未实现 Skip/Offset 功能,如果需要分页请使用判断上一次 id + + + + + 对象池 + + + + + 旧表(OldName):{tboldname} 存在,数据库已存在 {tbname} 表,无法改名 + + + + + OnConflictDoUpdate 功能要求实体类必须设置 IsPrimary 属性 + + + + + Oracle CodeFirst 不支持代码创建 tablespace 与 schemas {tbname} + + + + + 解析失败 {callExpMethodName} {message},提示:可以使用扩展方法 IQueryable.RestoreToSelect() 还原为 ISelect 再查询 + + + + + fsql.InsertOrUpdate + IfExistsDoNothing + {providerName}要求实体类 {tableCsName} 必须有主键 + + + + + SelectMany 错误的类型:{typeFullName} + + + + + 从库 + + + + + 类型 {objentityTypeFullName} 不可迁移 + + + + + 类型 {objentityTypeFullName} 不可迁移,可迁移属性0个 + + + + + 未实现 {columnDbTypeTextFull} 类型映射 + + + + + 错误的参数设置:{args} + + {qoteSql} is NULL,除非设置特性 [Column(IsNullable = false)] diff --git a/FreeSql/Properties/CoreStrings.Designer.cs b/FreeSql/Properties/CoreStrings.Designer.cs index f5d53c6b..35a02da9 100644 --- a/FreeSql/Properties/CoreStrings.Designer.cs +++ b/FreeSql/Properties/CoreStrings.Designer.cs @@ -1,11 +1,8 @@  // -using System; -using System.Reflection; -using System.Resources; using System.Globalization; -using System.Threading; +using System.Resources; namespace FreeSql { @@ -866,6 +863,254 @@ namespace FreeSql public static string RunTimeError_Reflection_IncludeMany => GetString("RunTimeError_Reflection_IncludeMany"); + /// + /// 蛋疼的 Access 插入只能一条一条执行,不支持 values(..),(..) 也不支持 select .. UNION ALL select .. + /// + public static string S_Access_InsertOnlyOneAtTime + => GetString("S_Access_InsertOnlyOneAtTime"); + + /// + /// BaseEntity.Initialization 初始化错误,获取到 IFreeSql 是 null + /// + public static string S_BaseEntity_Initialization_Error + => GetString("S_BaseEntity_Initialization_Error"); + + /// + /// 【{thisName}】Block access and wait for recovery: {exMessage} + /// + public static string S_BlockAccess_WaitForRecovery(object thisName, object exMessage) + => string.Format( + GetString("S_BlockAccess_WaitForRecovery", nameof(thisName), nameof(exMessage)), + thisName, exMessage); + + /// + /// 无法将 IQueryable<{typeofName}> 转换为 ISelect<{typeofName}>,因为他的实现不是 FreeSql.Extensions.Linq.QueryableProvider + /// + public static string S_CannotBeConverted_To_ISelect(object typeofName) + => string.Format( + GetString("S_CannotBeConverted_To_ISelect", nameof(typeofName)), + typeofName); + + /// + /// 连接字符串错误 + /// + public static string S_ConnectionStringError + => GetString("S_ConnectionStringError"); + + /// + /// 【{thisName}】连接字符串错误,请检查。 + /// + public static string S_ConnectionStringError_Check(object thisName) + => string.Format( + GetString("S_ConnectionStringError_Check", nameof(thisName)), + thisName); + + /// + /// 连接字符串错误,或者检查项目属性 > 生成 > 目标平台:x86 | x64 + /// + public static string S_ConnectionStringError_CheckProject + => GetString("S_ConnectionStringError_CheckProject "); + + /// + /// 【{thisName}】连接字符串错误,请检查。或者检查项目属性 > 生成 > 目标平台:x86 | x64 + /// + public static string S_ConnectionStringError_CheckProjectConnection(object thisName) + => string.Format( + GetString("S_ConnectionStringError_CheckProjectConnection", nameof(thisName)), + thisName); + + /// + /// FreeSql.Provider.CustomAdapter 无法使用 CreateCommand + /// + public static string S_CustomAdapter_Cannot_Use_CreateCommand + => GetString("S_CustomAdapter_Cannot_Use_CreateCommand"); + + /// + /// FreeSql.Provider.CustomAdapter 仅支持 UseConnectionFactory 方式构建 IFreeSql + /// + public static string S_CustomAdapter_OnlySuppport_UseConnectionFactory + => GetString("S_CustomAdapter_OnlySuppport_UseConnectionFactory "); + + /// + /// 达梦 CodeFirst 不支持代码创建 tablespace 与 schemas {tbname} + /// + public static string S_Dameng_NotSupport_TablespaceSchemas (object tbname) + => string.Format( + GetString("S_Dameng_NotSupport_TablespaceSchemas ", nameof(tbname)), + tbname); + + /// + /// -DB 参数错误,未提供 ConnectionString + /// + public static string S_DB_Parameter_Error_NoConnectionString + => GetString("S_DB_Parameter_Error_NoConnectionString"); + + /// + /// -DB 参数错误,格式为:MySql,ConnectionString + /// + public static string S_DB_ParameterError + => GetString("S_DB_ParameterError"); + + /// + /// -DB 参数错误,不支持的类型:\"{dbargs}\" + /// + public static string S_DB_ParameterError_UnsupportedType(object dbargs) + => string.Format( + GetString("S_DB_ParameterError_UnsupportedType", nameof(dbargs)), + dbargs); + + /// + /// {method} 是 FreeSql.Provider.{provider} 特有的功能 + /// + public static string S_Features_Unique(object method, object provider) + => string.Format( + GetString("S_Features_Unique", nameof(method), nameof(provider)), + method, provider); + + /// + /// fsql.InsertOrUpdate Sqlite 无法完成 UpdateColumns 操作 + /// + public static string S_InsertOrUpdate_Unable_UpdateColumns + => GetString("S_InsertOrUpdate_Unable_UpdateColumns"); + + /// + /// 主库 + /// + public static string S_MasterDatabase + => GetString("S_MasterDatabase"); + + /// + /// MygisGeometry.Parse 未实现 \"{wkt}\" + /// + public static string S_MygisGeometry_NotImplement(object wkt) + => string.Format( + GetString("S_MygisGeometry_NotImplement", nameof(wkt)), + wkt); + + /// + /// -NameOptions 参数错误,格式为:0,0,0,0 + /// + public static string S_NameOptions_Incorrect + => GetString("S_NameOptions_Incorrect"); + + /// + /// 未实现该功能 + /// + public static string S_Not_Implemented_Feature + => GetString("S_Not_Implemented_Feature"); + + /// + /// 未实现错误,请反馈给作者 + /// + public static string S_Not_Implemented_FeedBack + => GetString("S_Not_Implemented_FeedBack"); + + /// + /// 找不到 {name} + /// + public static string S_NotFound_Name(object name) + => string.Format( + GetString("S_NotFound_Name", nameof(name)), + name); + + /// + /// FreeSql.Provider.{providerName} 未实现 Skip/Offset 功能,如果需要分页请使用判断上一次 id + /// + public static string S_NotImplementSkipOffset(object providerName) + => string.Format( + GetString("S_NotImplementSkipOffset", nameof(providerName)), + providerName); + + /// + /// 对象池 + /// + public static string S_ObjectPool + => GetString("S_ObjectPool"); + + /// + /// 旧表(OldName):{tboldname} 存在,数据库已存在 {tbname} 表,无法改名 + /// + public static string S_OldTableExists(object tboldname, object tbname) + => string.Format( + GetString("S_OldTableExists", nameof(tboldname), nameof(tbname)), + tboldname, tbname); + + /// + /// OnConflictDoUpdate 功能要求实体类必须设置 IsPrimary 属性 + /// + public static string S_OnConflictDoUpdate_MustIsPrimary + => GetString("S_OnConflictDoUpdate_MustIsPrimary"); + + /// + /// Oracle CodeFirst 不支持代码创建 tablespace 与 schemas {tbname} + /// + public static string S_Oracle_NotSupport_TablespaceSchemas(object tbname) + => string.Format( + GetString("S_Oracle_NotSupport_TablespaceSchemas", nameof(tbname)), + tbname); + + /// + /// 解析失败 {callExpMethodName} {message},提示:可以使用扩展方法 IQueryable.RestoreToSelect() 还原为 ISelect 再查询 + /// + public static string S_ParsingFailed_UseRestoreToSelect(object callExpMethodName, object message) + => string.Format( + GetString("S_ParsingFailed_UseRestoreToSelect", nameof(callExpMethodName), nameof(message)), + callExpMethodName, message); + + /// + /// fsql.InsertOrUpdate + IfExistsDoNothing + {providerName}要求实体类 {tableCsName} 必须有主键 + /// + public static string S_RequiresEntityPrimaryKey(object providerName, object tableCsName) + => string.Format( + GetString("S_RequiresEntityPrimaryKey", nameof(providerName), nameof(tableCsName)), + providerName, tableCsName); + + /// + /// SelectMany 错误的类型:{typeFullName} + /// + public static string S_SelectManayErrorType(object typeFullName) + => string.Format( + GetString("S_SelectManayErrorType", nameof(typeFullName)), + typeFullName); + + /// + /// 从库 + /// + public static string S_SlaveDatabase + => GetString("S_SlaveDatabase"); + + /// + /// 类型 {objentityTypeFullName} 不可迁移 + /// + public static string S_Type_IsNot_Migrable(object objentityTypeFullName) + => string.Format( + GetString("S_Type_IsNot_Migrable", nameof(objentityTypeFullName)), + objentityTypeFullName); + + /// + /// 类型 {objentityTypeFullName} 不可迁移,可迁移属性0个 + /// + public static string S_Type_IsNot_Migrable_0Attributes(object objentityTypeFullName) + => string.Format( + GetString("S_Type_IsNot_Migrable_0Attributes", nameof(objentityTypeFullName)), + objentityTypeFullName); + + /// + /// 未实现 {columnDbTypeTextFull} 类型映射 + /// + public static string S_TypeMappingNotImplemented(object columnDbTypeTextFull) + => string.Format( + GetString("S_TypeMappingNotImplemented", nameof(columnDbTypeTextFull)), + columnDbTypeTextFull); + + /// + /// 错误的参数设置:{args} + /// + public static string S_WrongParameter(object args) + => string.Format( + GetString("S_WrongParameter", nameof(args)), + args); + /// /// {qoteSql} is NULL,除非设置特性 [Column(IsNullable = false)] /// diff --git a/FreeSql/Properties/CoreStrings.resx b/FreeSql/Properties/CoreStrings.resx index cc8292fc..f36b4cca 100644 --- a/FreeSql/Properties/CoreStrings.resx +++ b/FreeSql/Properties/CoreStrings.resx @@ -1,6 +1,6 @@  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + FreeSql:[Table(AsTable="{asTable}")] Property value formatted incorrectly - + FreeSql:The property name {atmGroupsValue} set by [Table (AsTable = xx)] is not of type DateTime - + FreeSql:{name}: Failed to get resource {statistics} - + FreeSql:{name}: An exception needs to be thrown - + FreeSql:Wrong expression format {column} - + FreeSql:Select is not available until the Chunk function - + FreeSql:For security reasons, be sure to use ForUpdate after the transaction is open - + FreeSql:Cannot be null - + FreeSql:{name} cannot be null - + FreeSql:Unable to match {property} - + FreeSql:{property} cannot be resolved to an expression tree - + FreeSql:The parameter master ConnectionString cannot be empty, check UseConnectionString - + FreeSql:Commit - + FreeSql:Connection failed, ready to switch other available servers - + FreeSql:Custom expression parsing error: type {exp3MethodDeclaringType} needs to define static ThreadLocal<ExpressionCallContext>field, field, field (important three reminders) - + FreeSql:Custom {Reflection Information} cannot be empty, format: {static method name}{space}{reflection information} - + FreeSql:Custom {static method name} cannot be empty, format: {static method name}{space}{reflection information} - + FreeSql:Custom corresponding {{static method name}}:{fiValueCustomArray} The [DynamicFilterCustomAttribute] attribute is not set - + FreeSql:Custom requires that Fields be space-split and 2-length in the format: {static method name}{space}{reflection information} - + FreeSql:The data type of the operation ({dataDisplayCsharp}) is inconsistent with AsType ({tableTypeDisplayCsharp}). Please check. - + FreeSql:DateRange requires that Value be comma-separated and 2-length - + FreeSql:DateRange requires that the Value [1] format must be: yyyy, yyyy-MM, yyyy-MM-dd, yyyyy-MM-dd HH, yyyy, yyyy-MM-dd HH:mm - + FreeSql:The record may not exist, or the row level optimistic lock version is out of date, the number of updates {sourceCount}, the number of rows affected {affrows}. - + FreeSql:The number of SlaveConnectionStrings is not the same as SlaveWeights - + FreeSql:ColumnAttribute. Name {colattrName} exists repeatedly, please check (note: case insensitive) - + FreeSql:Property name {pName} exists repeatedly, please check (note: case insensitive) - + FreeSql:The {function} feature requires that the entity class {tableCsName} must have a primary key - + FreeSql:{tbTypeFullName} is a parent-child relationship, but combinations of multiple primary keys are not supported in versions below MySql 8.0 - + FreeSql:{tbTypeFullName} is not a parent-child relationship and cannot be used - + FreeSql:This particular subquery cannot be resolved - + FreeSql:Expression error, its top object is not ParameterExpression:{exp} - + FreeSql:Expression error, it is not a continuous MemberAccess type: {exp} - + FreeSql:ExpressionTree conversion type error, value ({value}), type ({valueTypeFullName}), target type ({typeFullName}), Error:{exMessage} - + FreeSql:Failed to parse table field value {sqlWhere} - + FreeSql:Function {asTable} not implemented by AsTable - + FreeSql:GBase does not support separators other than commas at this time - + FreeSql:TableName:{tableName} generated the same table name - + FreeSql:The parameter'{primary}'passed by GetPrimarys is incorrect and does not belong to the key name of the dictionary data - + FreeSql:{first} has already been specified and {second} can no longer be specified - + FreeSql:{tb2DbName}. {mp2MemberName} is ignored. Check the IsIgnore setting to make sure get/set is public - + FreeSql:Include parameter type error - + FreeSql:Include parameter type is wrong, use IncludeMany for collection properties - + FreeSql:Include parameter type is wrong, expression type should be MemberAccess - + FreeSql:The property {collMemMemberName} of IncludeMany type {tbTypeDisplayCsharp} is not a valid navigation property, hint: IsIgnore = true will not be a navigation property - + FreeSql:IncludeMany {navigateSelector} parameter is wrong, Select can only use one parameter's method, the correct format:.Select(t =>new TNavigate{{}}) - + FreeSql:IncludeMany {navigateSelector} parameter error, Select lambda parameter return value must match {collMemElementType} type - + FreeSql:IncludeMany parameter 1 has wrong type, expression type should be MemberAccess - + FreeSql:IncludeMany {navigateSelector} parameter type is wrong, correct format: a.collections.Take(1).Where(c => C.A ID == a.id).Select (a => new TNavigate{{}}) - + FreeSql:ISelect. InsertInto() did not select an attribute: {displayCsharp} - + FreeSql:ISelect. InsertInto() type error: {displayCsharp} - + FreeSql:The InsertOrUpdate function performs merge into requiring the entity class {CsName} to have a primary key - + FreeSql:The generic parameter for InsertOrUpdate<>does not support {typeofT1}. Pass in your entity class - + FreeSql:FreeSql needs to be installed for Delayed Loading. Extensions. LazyLoading. Dll, downloadable to nuget - + FreeSql:{trytbTypeName} Compilation error: {exMessage}\r\n\r\n{cscode} - + FreeSql:Entity type {trytbTypeName} must be declared public - + FreeSql:ManyToMany navigation properties. AsSelect() is temporarily unavailable for the Sum/Avg/Max/Min/First/ToOne/ToList method - + FreeSql:[ManyToMany] Navigation property {trytbTypeName}. {pnvName} did not find a corresponding field in {tbmidCsName}, such as: {midTypePropsTrytbName}{findtrytbPkCsName}, {midTypePropsTrytbName}_ {findtrytbPkCsName} - + FreeSql:[ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, entity type {tbrefTypeName} missing primary key identity, [Column (IsPrimary = true)] - + FreeSql:[ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, entity type {tbrefTypeName} must have a corresponding [Navigate (ManyToMany = x)] collection property - + FreeSql:[ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, {tbmidCsName}. {trycolCsName} and {trytbCsName}. {trytbPrimarysCsName} type inconsistent - + FreeSql:[ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, intermediate class {tbmidCsName}.{midTypePropsTrytbName} Error: {exMessage} - + FreeSql:[ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, intermediate class {tbmidCsName}. The {midTypePropsTrytbName} navigation property is not ManyToOne or OneToOne - + FreeSql:Mapping exception: {name} None of the property names are the same - + FreeSql:Ado. MasterPool value is null, this operation cannot self-enable transactions, please explicitly pass [transaction object] resolution - - FreeSql:Missing FreeSql database implementation package: FreeSql. Provider. {Provider}. Dll, downloadable to nuget + + FreeSql:Missing FreeSql database implementation package: FreeSql.Provider.{Provider}.Dll, downloadable to nuget - + FreeSql:The FreeSql database implementation package is missing: {dll} can be downloaded to nuget; If there is {dll} and an error still occurs (due to environmental issues that cause the type to be unreflected), manually pass in typeof ({providerType}) in the third parameter of UseConnectionString/UseConnectionFactory - + FreeSql:Navigation property {trytbTypeName}. The number of {pnvName} attributes [Navigate] Binds ({bindColumnsCount}) is different from the number of external primary keys ({tbrefPrimarysLength}) - + FreeSql:{tb2DbName}. {mp2MemberName} Navigation Property Collection forgotten. AsSelect()? If used in ToList (a => a. {mp2MemberName}), step by step to refer to the IncludeMany document. - + FreeSql:[Navigation Properties]{trytbTypeDisplayCsharp}. Missing set attribute for {pName} - + FreeSql:Navigation property {trytbTypeName}. {pnvName} No corresponding fields were found, such as: {pnvName}{findtbrefPkCsName}, {pnvName}_ {findtbrefPkCsName}. Or use the [Navigate] attribute to specify the relationship mapping. - + FreeSql:Navigation property {trytbTypeName}. {pnvName} parsing error, entity type {trytcTypeName} missing primary key identity, [Column (IsPrimary = true)] - + FreeSql:Navigation property {trytbTypeName}. {pnvName} parsing error, {trytbCsName}. {trycolCsName} and {tbrefCsName}. {tbrefPrimarysCsName} type inconsistent - + FreeSql:Navigation property {trytbTypeName}. {pnvName} attribute [Navigate] parsing error, property not found at {tbrefTypeName}: {bi} - + FreeSql:{tableTypeDisplayCsharp} has no primary key defined and cannot use SetSource. Try SetDto - + FreeSql:No properties defined - + FreeSql:Not implemented - + FreeSql:Function expression {exp} parsing not implemented - + FreeSql:Function expression {exp} parsing not implemented, parameter {expArguments} must be constant - + FreeSql:Function expression {exp} parsing is not implemented. Use if you are working on a navigation property collection. AsSelect (). {exp3MethodName} ({exp3ArgumentsCount}) - + FreeSql:Constant under MemberAccess is not implemented - + FreeSql:{name} is not implemented - + FreeSql:I won't support it - + FreeSql:{dataType} does not support OrderByRandom sorting - + FreeSql:{property} is not a valid navigation property - + FreeSql:{dbName} Column {memberName} not found - + FreeSql:Cannot find the column corresponding to {CsName} - + FreeSql:Attribute not found: {memberName} - + FreeSql:Property name {proto} not found - + FreeSql:Custom could not find the corresponding {{reflection information}}:{fiValueCustomArray} - + FreeSql:Custom could not find the corresponding {{static method name}}:{fiValueCustomArray} - + FreeSql:The property name {atmGroupsValue} set by [Table(AsTable = xx)] does not exist - + FreeSql:No UseConnectionString or UseConnectionFactory specified - + FreeSql:[{policyName}] ObjectPool. {GetName}() timeout {totalSeconds} seconds, see: https://github.com/dotnetcore/FreeSql/discussions/1081 - + FreeSql:[{policyName}] ObjectPool. GetAsync() The queue is too long. Policy. AsyncGetCapacity = {asyncGetCapacity} - + FreeSql:[OneToMany] Navigation property {trytbTypeName}.{pnvName} did not find a corresponding field in {tbrefCsName}, such as: {findtrytb}{findtrytbPkCsName}, {findtrytb}_{findtrytbPkCsName} - + FreeSql:[OneToMany] Navigation property {trytbTypeName}.{pnvName} parsing error, {trytbCsName}.{trytbPrimarysCsName} and {tbrefCsName}.{trycolCsName} is of inconsistent type - + FreeSql:, {refpropName}{findtrytbPkCsName}, {refpropName}_{findtrytbPkCsName}. Or use the [Navigate] attribute to specify the relationship mapping. - + FreeSql:Parameter field not specified - + FreeSql:The {property} parameter is incorrect, it is not a collection property and must be IList<T>or ICollection<T> - + FreeSql:The {property} parameter is incorrect, it is not a valid navigation property - + FreeSql:{where} parameter error, {keyval} is not a valid property name and cannot be found in entity class {reftbTypeDisplayCsharp} - + FreeSql:{property} parameter error, format "TopicId=Id, multiple groups using comma connection" - + FreeSql:Parsing failed {callExpMethodName} {message} - + FreeSql:[{policyName}] The ObjectPool has been disposed, see: https://github.com/dotnetcore/FreeSql/discussions/1079 - + FreeSql:The {policyName} status is unavailable and cannot be used until the background checker is restored. {UnavailableExceptionMessage} - + FreeSql:The property {trytbVersionColumnCsName} is labeled as a row lock (optimistic lock) (IsVersion), but it must be a numeric type or byte[], and it cannot be Nullable - + FreeSql:Properrties parameter cannot be empty - + FreeSql:{property} property name not found - + FreeSql:Range requires that Value be comma-separated and 2-length - + FreeSql:RollBack - + FreeSql:Runtime error, reflection failed to get IncludeMany method - + FreeSql:{qoteSql} is NULL unless the attribute [Column (IsNullable = false)] - + FreeSql:Subtable field value'{dt}'cannot be less than'{beginTime}' - + FreeSql:Subtable field value cannot be null - + FreeSql:The tabular field value'{columnValue}'cannot be converted to DateTime - + FreeSql:Table field value'{dt}'does not match table name - + FreeSql:Type T2 Error - + FreeSql:TableName format error, example: "log_{yyyyMMdd}" - + FreeSql:{Type}. AsType parameter error, please pass in the correct entity type - + FreeSql:The {thatFullName} type cannot access the constructor - + FreeSql:{name} type error - + FreeSql:{Type}. AsType parameter does not support specifying as object - + FreeSql:Type {typeofFullName} error, IncludeMany cannot be used - + FreeSql:Unable to parse expression: {exp} - + FreeSql:Unable to parse expression method {exp3tmpCallMethodName} - + FreeSql:Please use fsql. InsertDict (dict) method inserts dictionary data - + + FreeSql:{name} not found + + + FreeSql:Slave Database + + + FreeSql:Master Database + + + 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.. + + + FreeSql:BaseEntity. Initialization initialization error, get IFreeSql is null + + + FreeSql:[{thisName}] Block access and wait for recovery: {exMessage} + + + FreeSql:IQueryable<{typeofName}> cannot be converted to ISelect<{typeofName}> because its implementation is not FreeSql.Extensions.Linq.QueryableProvider + + + FreeSql:Connection string error + + + FreeSql:[{thisName}] Connection string error, please check. + + + FreeSql:Connection string error, or check project properties > Build > Target Platform: x86 | x64 + + + FreeSql:[{thisName}] Connection string error, please check. Or check Project Properties > Build > Target Platform: x86 | x64 + + + FreeSql:FreeSql.Provider.CustomAdapter cannot use CreateCommand + + + FreeSql:FreeSql.Provider.CustomAdapter only supports building IFreeSql in the UseConnectionFactory way + + + FreeSql:Dream CodeFirst does not support code creation tablespace and schemas {tbname} + + + FreeSql:-DB parameter error, no ConnectionString provided + + + FreeSql:-DB parameter error, format: MySql, ConnectionString + + + FreeSql:-DB parameter error, unsupported type: "{dbargs}" + + + FreeSql:{method} is FreeSql.Provider.{provider} specific features + + + FreeSql:Fsql. InsertOrUpdate Sqlite was unable to complete the UpdateColumns operation + + + FreeSql:MygisGeometry. Parse does not implement "{wkt}" + + + FreeSql:-NameOptions parameter incorrect, format: 0,0,0,0 + + + FreeSql:This function is not implemented + + + FreeSql:Unrealized error, please feedback to author + + + FreeSql:FreeSql.Provider.{providerName} does not implement Skip/Offset functionality, use to determine last ID if paging is required + + + FreeSql:Old table (OldName): {tboldname} exists, database already exists {tbname} table, cannot rename + + + FreeSql:The OnConflictDoUpdate feature requires that entity classes must set the IsPrimary property + + + FreeSql:Oracle CodeFirst does not support code creation of tablespace and schemas {tbname} + + + FreeSql:Parsing failed {callExpMethodName} {message}, hint: Extension method IQueryable can be used. RestoreToSelect() reverted to ISelect re-query + + + FreeSql:Fsql. InsertOrUpdate + IfExistsDoNothing + {providerName} requires the entity class {tableCsName} to have a primary key + + + FreeSql:SelectMany error type: {typeFullName} + + + FreeSql:Type {objentityTypeFullName} is not migrable + + + FreeSql:Type {objentityTypeFullName} is not migrable, migratable property 0 + + + FreeSql:{columnDbTypeTextFull} type mapping not implemented + + + FreeSql:Wrong parameter setting: {args} + + + FreeSql:Object pool + + \ No newline at end of file diff --git a/FreeSql/Properties/CoreStrings.zh-Hans.resx b/FreeSql/Properties/CoreStrings.zh-Hans.resx index 6e8b357f..2e70e730 100644 --- a/FreeSql/Properties/CoreStrings.zh-Hans.resx +++ b/FreeSql/Properties/CoreStrings.zh-Hans.resx @@ -450,6 +450,146 @@ 运行时错误,反射获取 IncludeMany 方法失败 + + 蛋疼的 Access 插入只能一条一条执行,不支持 values(..),(..) 也不支持 select .. UNION ALL select .. + Providers + + + BaseEntity.Initialization 初始化错误,获取到 IFreeSql 是 null + Extensions + + + 【{thisName}】Block access and wait for recovery: {exMessage} + Providers + + + 无法将 IQueryable<{typeofName}> 转换为 ISelect<{typeofName}>,因为他的实现不是 FreeSql.Extensions.Linq.QueryableProvider + Extensions + + + 连接字符串错误 + Providers + + + 【{thisName}】连接字符串错误,请检查。 + Providers + + + 连接字符串错误,或者检查项目属性 > 生成 > 目标平台:x86 | x64 + Providers + + + 【{thisName}】连接字符串错误,请检查。或者检查项目属性 > 生成 > 目标平台:x86 | x64 + Providers + + + FreeSql.Provider.CustomAdapter 无法使用 CreateCommand + Providers + + + FreeSql.Provider.CustomAdapter 仅支持 UseConnectionFactory 方式构建 IFreeSql + Providers + + + 达梦 CodeFirst 不支持代码创建 tablespace 与 schemas {tbname} + Providers + + + -DB 参数错误,未提供 ConnectionString + Extensions + + + -DB 参数错误,格式为:MySql,ConnectionString + Extensions + + + -DB 参数错误,不支持的类型:"{dbargs}" + Extensions + + + {method} 是 FreeSql.Provider.{provider} 特有的功能 + Providers + + + fsql.InsertOrUpdate Sqlite 无法完成 UpdateColumns 操作 + Providers + + + 主库 + Providers + + + MygisGeometry.Parse 未实现 "{wkt}" + Providers + + + -NameOptions 参数错误,格式为:0,0,0,0 + Extensions + + + 未实现该功能 + Providers + + + 未实现错误,请反馈给作者 + Providers + + + 找不到 {name} + Providers + + + FreeSql.Provider.{providerName} 未实现 Skip/Offset 功能,如果需要分页请使用判断上一次 id + Providers + + + 对象池 + Providers + + + 旧表(OldName):{tboldname} 存在,数据库已存在 {tbname} 表,无法改名 + Providers + + + OnConflictDoUpdate 功能要求实体类必须设置 IsPrimary 属性 + Providers + + + Oracle CodeFirst 不支持代码创建 tablespace 与 schemas {tbname} + Providers + + + 解析失败 {callExpMethodName} {message},提示:可以使用扩展方法 IQueryable.RestoreToSelect() 还原为 ISelect 再查询 + Extensions + + + fsql.InsertOrUpdate + IfExistsDoNothing + {providerName}要求实体类 {tableCsName} 必须有主键 + Providers + + + SelectMany 错误的类型:{typeFullName} + Extensions + + + 从库 + Providers + + + 类型 {objentityTypeFullName} 不可迁移 + Providers + + + 类型 {objentityTypeFullName} 不可迁移,可迁移属性0个 + Providers + + + 未实现 {columnDbTypeTextFull} 类型映射 + Providers + + + 错误的参数设置:{args} + Extensions + {qoteSql} is NULL,除非设置特性 [Column(IsNullable = false)] @@ -495,7 +635,4 @@ 请使用 fsql.InsertDict(dict) 方法插入字典数据 - - Test - \ No newline at end of file diff --git a/FreeSql/Properties/Resources.tt b/FreeSql/Properties/Resources.tt index bbd73833..935558b8 100644 --- a/FreeSql/Properties/Resources.tt +++ b/FreeSql/Properties/Resources.tt @@ -180,9 +180,12 @@ namespace <#= model.Namespace #> result.Class = Path.GetFileNameWithoutExtension(resourceFile); result.ResourceName = resourceNamespace + "." + result.Class; - + if(File.Exists(resourceFile.Replace(".resx", ".zh-Hans.resx"))) + { + resourceFile = resourceFile.Replace(".resx", ".zh-Hans.resx"); + } List sortedResources; - using (var reader = new ResXResourceReader(resourceFile.Replace(".resx", ".zh-Hans.resx"))) + using (var reader = new ResXResourceReader(resourceFile)) { reader.UseResXDataNodes = true; sortedResources = Enumerable.ToList( diff --git a/Providers/FreeSql.Provider.ClickHouse/ClickHouseAdo/ClickHouseAdo.cs b/Providers/FreeSql.Provider.ClickHouse/ClickHouseAdo/ClickHouseAdo.cs index 0eb76626..fb36b359 100644 --- a/Providers/FreeSql.Provider.ClickHouse/ClickHouseAdo/ClickHouseAdo.cs +++ b/Providers/FreeSql.Provider.ClickHouse/ClickHouseAdo/ClickHouseAdo.cs @@ -23,12 +23,12 @@ namespace FreeSql.ClickHouse return; } if (!string.IsNullOrEmpty(masterConnectionString)) - MasterPool = new ClickHouseConnectionPool("主库", masterConnectionString, null, null); + MasterPool = new ClickHouseConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); if (slaveConnectionStrings != null) { 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); } } diff --git a/Providers/FreeSql.Provider.ClickHouse/ClickHouseAdo/ClickHouseConnectionPool.cs b/Providers/FreeSql.Provider.ClickHouse/ClickHouseAdo/ClickHouseConnectionPool.cs index d8c0b2a7..62f8983b 100644 --- a/Providers/FreeSql.Provider.ClickHouse/ClickHouseAdo/ClickHouseConnectionPool.cs +++ b/Providers/FreeSql.Provider.ClickHouse/ClickHouseAdo/ClickHouseConnectionPool.cs @@ -57,7 +57,7 @@ namespace FreeSql.ClickHouse { 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 TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); @@ -131,8 +131,8 @@ namespace FreeSql.ClickHouse { if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) @@ -161,8 +161,8 @@ namespace FreeSql.ClickHouse { if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) diff --git a/Providers/FreeSql.Provider.ClickHouse/ClickHouseCodeFirst.cs b/Providers/FreeSql.Provider.ClickHouse/ClickHouseCodeFirst.cs index 8f006685..81cd6d7b 100644 --- a/Providers/FreeSql.Provider.ClickHouse/ClickHouseCodeFirst.cs +++ b/Providers/FreeSql.Provider.ClickHouse/ClickHouseCodeFirst.cs @@ -67,8 +67,8 @@ namespace FreeSql.ClickHouse { if (sb.Length > 0) sb.Append("\r\n"); var tb = _commonUtils.GetTableByEntity(obj.entityType); - if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移"); - if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移,可迁移属性0个"); + if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { database, tbname[0] }; diff --git a/Providers/FreeSql.Provider.ClickHouse/Curd/ClickHouseDelete.cs b/Providers/FreeSql.Provider.ClickHouse/Curd/ClickHouseDelete.cs index 9439b5bf..782f2e8e 100644 --- a/Providers/FreeSql.Provider.ClickHouse/Curd/ClickHouseDelete.cs +++ b/Providers/FreeSql.Provider.ClickHouse/Curd/ClickHouseDelete.cs @@ -16,7 +16,7 @@ namespace FreeSql.ClickHouse.Curd { } - public override List ExecuteDeleted() => throw new NotImplementedException("FreeSql.Provider.ClickHouse 未实现该功能"); + public override List ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreStrings.S_Not_Implemented_Feature}"); public override string ToSql() { @@ -25,7 +25,7 @@ namespace FreeSql.ClickHouse.Curd #if net40 #else - public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.ClickHouse 未实现该功能"); + public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.ClickHouse/Curd/ClickHouseUpdate.cs b/Providers/FreeSql.Provider.ClickHouse/Curd/ClickHouseUpdate.cs index c941af96..a6d3b527 100644 --- a/Providers/FreeSql.Provider.ClickHouse/Curd/ClickHouseUpdate.cs +++ b/Providers/FreeSql.Provider.ClickHouse/Curd/ClickHouseUpdate.cs @@ -28,7 +28,7 @@ namespace FreeSql.ClickHouse.Curd public override int ExecuteAffrows() => SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); public override List ExecuteUpdated() => SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); - protected override List RawExecuteUpdated() => throw new NotImplementedException("FreeSql.ClickHouse.Custom 未实现该功能 未实现该功能"); + protected override List RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreStrings.S_Not_Implemented_Feature}"); protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) { if (primarys.Length == 1) @@ -293,7 +293,7 @@ namespace FreeSql.ClickHouse.Curd #else public override Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken); public override Task> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken); - protected override Task> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.ClickHouse.Custom 未实现该功能 未实现该功能"); + protected override Task> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreStrings.S_Not_Implemented_Feature}"); async protected override Task SplitExecuteAffrowsAsync(int valuesLimit, int parameterLimit, CancellationToken cancellationToken = default) diff --git a/Providers/FreeSql.Provider.Custom/Curd/CustomDelete.cs b/Providers/FreeSql.Provider.Custom/Curd/CustomDelete.cs index a8bc014c..c5da7864 100644 --- a/Providers/FreeSql.Provider.Custom/Curd/CustomDelete.cs +++ b/Providers/FreeSql.Provider.Custom/Curd/CustomDelete.cs @@ -16,11 +16,11 @@ namespace FreeSql.Custom { } - public override List ExecuteDeleted() => throw new NotImplementedException("FreeSql.Provider.Custom 未实现该功能"); + public override List ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}"); #if net40 #else - public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.Custom 未实现该功能"); + public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.Custom/Curd/CustomInsert.cs b/Providers/FreeSql.Provider.Custom/Curd/CustomInsert.cs index e860209f..63fce94d 100644 --- a/Providers/FreeSql.Provider.Custom/Curd/CustomInsert.cs +++ b/Providers/FreeSql.Provider.Custom/Curd/CustomInsert.cs @@ -62,7 +62,7 @@ namespace FreeSql.Custom return ret; } - protected override List RawExecuteInserted() => throw new NotImplementedException("FreeSql.Provider.Custom 未实现该功能"); + protected override List RawExecuteInserted() => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}"); #if net40 #else @@ -107,7 +107,7 @@ namespace FreeSql.Custom } return ret; } - protected override Task> RawExecuteInsertedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.Custom 未实现该功能"); + protected override Task> RawExecuteInsertedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}"); #endif } } \ No newline at end of file diff --git a/Providers/FreeSql.Provider.Custom/Curd/CustomSelect.cs b/Providers/FreeSql.Provider.Custom/Curd/CustomSelect.cs index dea03470..adba808e 100644 --- a/Providers/FreeSql.Provider.Custom/Curd/CustomSelect.cs +++ b/Providers/FreeSql.Provider.Custom/Curd/CustomSelect.cs @@ -35,7 +35,7 @@ namespace FreeSql.Custom if (_limit > 0 && _utils.Adapter.SelectTopStyle == CustomAdapter.SelecTopStyle.Top) sb.Append("TOP ").Append(_skip + _limit).Append(" "); sb.Append(field); 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 "); var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray(); diff --git a/Providers/FreeSql.Provider.Custom/Curd/CustomUpdate.cs b/Providers/FreeSql.Provider.Custom/Curd/CustomUpdate.cs index c67d5f5c..1c4119ac 100644 --- a/Providers/FreeSql.Provider.Custom/Curd/CustomUpdate.cs +++ b/Providers/FreeSql.Provider.Custom/Curd/CustomUpdate.cs @@ -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 List ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255); - protected override List RawExecuteUpdated() => throw new NotImplementedException("FreeSql.Provider.Custom 未实现该功能"); + protected override List RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}"); protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) { @@ -65,7 +65,7 @@ namespace FreeSql.Custom public override Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken); public override Task> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken); - protected override Task> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.Custom 未实现该功能"); + protected override Task> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.Custom/CustomAdo/CustomAdo.cs b/Providers/FreeSql.Provider.Custom/CustomAdo/CustomAdo.cs index bb661ecd..f11e56bf 100644 --- a/Providers/FreeSql.Provider.Custom/CustomAdo/CustomAdo.cs +++ b/Providers/FreeSql.Provider.Custom/CustomAdo/CustomAdo.cs @@ -23,7 +23,7 @@ namespace FreeSql.Custom _CreateParameterCommand = CreateCommand(); 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()); @@ -65,7 +65,7 @@ namespace FreeSql.Custom cmd.Connection = null; return cmd; } - throw new Exception("FreeSql.Provider.CustomAdapter 无法使用 CreateCommand"); + throw new Exception(CoreStrings.S_CustomAdapter_Cannot_Use_CreateCommand); } public DbParameter CreateParameter() { diff --git a/Providers/FreeSql.Provider.Custom/CustomCodeFirst.cs b/Providers/FreeSql.Provider.Custom/CustomCodeFirst.cs index c84e1641..20deef31 100644 --- a/Providers/FreeSql.Provider.Custom/CustomCodeFirst.cs +++ b/Providers/FreeSql.Provider.Custom/CustomCodeFirst.cs @@ -90,6 +90,6 @@ namespace FreeSql.Custom 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}"); } } \ No newline at end of file diff --git a/Providers/FreeSql.Provider.Custom/CustomProvider.cs b/Providers/FreeSql.Provider.Custom/CustomProvider.cs index babc8869..ea8c315e 100644 --- a/Providers/FreeSql.Provider.Custom/CustomProvider.cs +++ b/Providers/FreeSql.Provider.Custom/CustomProvider.cs @@ -18,9 +18,9 @@ namespace FreeSql.Custom public override IInsert CreateInsertProvider() => new CustomInsert(this, this.InternalCommonUtils, this.InternalCommonExpression); public override IUpdate CreateUpdateProvider(object dywhere) => new CustomUpdate(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere); public override IDelete CreateDeleteProvider(object dywhere) => new CustomDelete(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere); - public override IInsertOrUpdate CreateInsertOrUpdateProvider() => throw new NotImplementedException("FreeSql.Provider.Custom 未实现该功能"); + public override IInsertOrUpdate CreateInsertOrUpdateProvider() => 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 connectionFactory = null) { diff --git a/Providers/FreeSql.Provider.Dameng/Curd/DamengDelete.cs b/Providers/FreeSql.Provider.Dameng/Curd/DamengDelete.cs index 59f31b49..f9b81fca 100644 --- a/Providers/FreeSql.Provider.Dameng/Curd/DamengDelete.cs +++ b/Providers/FreeSql.Provider.Dameng/Curd/DamengDelete.cs @@ -16,11 +16,11 @@ namespace FreeSql.Dameng.Curd { } - public override List ExecuteDeleted() => throw new NotImplementedException("FreeSql.Provider.Dameng 未实现该功能"); + public override List ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.Dameng {CoreStrings.S_Not_Implemented_Feature}"); #if net40 #else - public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.Dameng 未实现该功能"); + public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Dameng {CoreStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.Dameng/Curd/DamengUpdate.cs b/Providers/FreeSql.Provider.Dameng/Curd/DamengUpdate.cs index 7bd489d4..317125c7 100644 --- a/Providers/FreeSql.Provider.Dameng/Curd/DamengUpdate.cs +++ b/Providers/FreeSql.Provider.Dameng/Curd/DamengUpdate.cs @@ -21,7 +21,7 @@ namespace FreeSql.Dameng.Curd public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); public override List ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); - protected override List RawExecuteUpdated() => throw new NotImplementedException("FreeSql.Provider.Dameng 未实现该功能"); + protected override List RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Provider.Dameng {CoreStrings.S_Not_Implemented_Feature}"); protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) { @@ -65,7 +65,7 @@ namespace FreeSql.Dameng.Curd public override Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); public override Task> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); - protected override Task> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.Dameng 未实现该功能"); + protected override Task> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Dameng {CoreStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengAdo.cs b/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengAdo.cs index b49c2a8a..38c229a5 100644 --- a/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengAdo.cs +++ b/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengAdo.cs @@ -21,12 +21,12 @@ namespace FreeSql.Dameng return; } if (!string.IsNullOrEmpty(masterConnectionString)) - MasterPool = new DamengConnectionPool("主库", masterConnectionString, null, null); + MasterPool = new DamengConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); if (slaveConnectionStrings != null) { 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); } } diff --git a/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengConnectionPool.cs b/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengConnectionPool.cs index a41283ca..0559440d 100644 --- a/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengConnectionPool.cs +++ b/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengConnectionPool.cs @@ -54,7 +54,7 @@ namespace FreeSql.Dameng { 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 TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); @@ -130,8 +130,8 @@ namespace FreeSql.Dameng { if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) @@ -160,8 +160,8 @@ namespace FreeSql.Dameng { if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) diff --git a/Providers/FreeSql.Provider.Dameng/DamengCodeFirst.cs b/Providers/FreeSql.Provider.Dameng/DamengCodeFirst.cs index 6f34c0bd..cc406cc5 100644 --- a/Providers/FreeSql.Provider.Dameng/DamengCodeFirst.cs +++ b/Providers/FreeSql.Provider.Dameng/DamengCodeFirst.cs @@ -92,8 +92,8 @@ namespace FreeSql.Dameng { if (sb.Length > 0) sb.Append("\r\n"); var tb = _commonUtils.GetTableByEntity(obj.entityType); - if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移"); - if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移,可迁移属性0个"); + if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { userId, tbname[0] }; @@ -114,7 +114,7 @@ namespace FreeSql.Dameng //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) //创建数据库 - throw new NotImplementedException($"达梦 CodeFirst 不支持代码创建 tablespace 与 schemas {tbname[0]}"); + throw new NotImplementedException(CoreStrings.S_Dameng_NotSupport_TablespaceSchemas(tbname[0])); var sbalter = new StringBuilder(); var istmpatler = false; //创建临时表,导入数据,删除旧表,修改 diff --git a/Providers/FreeSql.Provider.Dameng/DamengDbFirst.cs b/Providers/FreeSql.Provider.Dameng/DamengDbFirst.cs index b6275462..6fd2e857 100644 --- a/Providers/FreeSql.Provider.Dameng/DamengDbFirst.cs +++ b/Providers/FreeSql.Provider.Dameng/DamengDbFirst.cs @@ -160,7 +160,7 @@ namespace FreeSql.Dameng if (dbfull != null) _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]); return DmDbType.VarChar; } - throw new NotImplementedException($"未实现 {column.DbTypeTextFull} 类型映射"); + throw new NotImplementedException(CoreStrings.S_TypeMappingNotImplemented(column.DbTypeTextFull)); } static ConcurrentDictionary _dicDbToCs = new ConcurrentDictionary(StringComparer.CurrentCultureIgnoreCase); diff --git a/Providers/FreeSql.Provider.Dameng/DamengExtensions.cs b/Providers/FreeSql.Provider.Dameng/DamengExtensions.cs index 24931172..ba3573ab 100644 --- a/Providers/FreeSql.Provider.Dameng/DamengExtensions.cs +++ b/Providers/FreeSql.Provider.Dameng/DamengExtensions.cs @@ -29,7 +29,7 @@ public static partial class FreeSqlDamengGlobalExtensions public static void ExecuteDmBulkCopy(this IInsert that, DmBulkCopyOptions copyOptions = DmBulkCopyOptions.Default, int? batchSize = null, int? bulkCopyTimeout = null) where T : class { var insert = that as FreeSql.Dameng.Curd.DamengInsert; - 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(); if (dt.Rows.Count == 0) return; @@ -95,7 +95,7 @@ public static partial class FreeSqlDamengGlobalExtensions } else { - throw new NotImplementedException("ExecuteDmBulkCopy 未实现错误,请反馈给作者"); + throw new NotImplementedException($"ExecuteDmBulkCopy {CoreStrings.S_Not_Implemented_FeedBack}"); } } finally diff --git a/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdAdo.cs b/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdAdo.cs index 1c323bd9..25b2d9b1 100644 --- a/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdAdo.cs +++ b/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdAdo.cs @@ -25,12 +25,12 @@ namespace FreeSql.Firebird return; } if (!string.IsNullOrEmpty(masterConnectionString)) - MasterPool = new FirebirdConnectionPool("主库", masterConnectionString, null, null); + MasterPool = new FirebirdConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); if (slaveConnectionStrings != null) { 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); } } diff --git a/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdConnectionPool.cs b/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdConnectionPool.cs index dd4ff973..cd33a6b6 100644 --- a/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdConnectionPool.cs +++ b/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdConnectionPool.cs @@ -45,7 +45,7 @@ namespace FreeSql.Firebird { 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 TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); @@ -121,8 +121,8 @@ namespace FreeSql.Firebird { if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) @@ -151,8 +151,8 @@ namespace FreeSql.Firebird { if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) diff --git a/Providers/FreeSql.Provider.Firebird/FirebirdCodeFirst.cs b/Providers/FreeSql.Provider.Firebird/FirebirdCodeFirst.cs index 74118fa1..3c90965f 100644 --- a/Providers/FreeSql.Provider.Firebird/FirebirdCodeFirst.cs +++ b/Providers/FreeSql.Provider.Firebird/FirebirdCodeFirst.cs @@ -89,8 +89,8 @@ namespace FreeSql.Firebird { if (sb.Length > 0) sb.Append("\r\n"); var tb = _commonUtils.GetTableByEntity(obj.entityType); - if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移"); - if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移,可迁移属性0个"); + if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName)); var tbname = tb.DbName; var tboldname = tb.DbOldName; //旧表名 if (string.IsNullOrEmpty(obj.tableName) == false) diff --git a/Providers/FreeSql.Provider.GBase/Curd/GBaseDelete.cs b/Providers/FreeSql.Provider.GBase/Curd/GBaseDelete.cs index 27b4948e..d47b3e2b 100644 --- a/Providers/FreeSql.Provider.GBase/Curd/GBaseDelete.cs +++ b/Providers/FreeSql.Provider.GBase/Curd/GBaseDelete.cs @@ -16,11 +16,11 @@ namespace FreeSql.GBase.Curd { } - public override List ExecuteDeleted() => throw new NotImplementedException("FreeSql.Provider.GBase 未实现该功能"); + public override List ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.GBase {CoreStrings.S_Not_Implemented_Feature}"); #if net40 #else - public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.GBase 未实现该功能"); + public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.GBase {CoreStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.GBase/Curd/GBaseInsert.cs b/Providers/FreeSql.Provider.GBase/Curd/GBaseInsert.cs index a6bf0ed5..d0b130f7 100644 --- a/Providers/FreeSql.Provider.GBase/Curd/GBaseInsert.cs +++ b/Providers/FreeSql.Provider.GBase/Curd/GBaseInsert.cs @@ -28,7 +28,7 @@ namespace FreeSql.GBase.Curd if (_source?.Count <= 1) return base.ToSqlValuesOrSelectUnionAll(); var sql = base.ToSqlValuesOrSelectUnionAllExtension102(false, null, (rowd, idx, sb) => sb.Append(" FROM dual")); 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() .Insert(0, sql.Substring(0, validx + 1)) .Append("\r\nSELECT * FROM (\r\n") diff --git a/Providers/FreeSql.Provider.GBase/Curd/GBaseUpdate.cs b/Providers/FreeSql.Provider.GBase/Curd/GBaseUpdate.cs index 8d10fcc3..3e68c0e5 100644 --- a/Providers/FreeSql.Provider.GBase/Curd/GBaseUpdate.cs +++ b/Providers/FreeSql.Provider.GBase/Curd/GBaseUpdate.cs @@ -22,7 +22,7 @@ namespace FreeSql.GBase.Curd public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); public override List ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); - protected override List RawExecuteUpdated() => throw new NotImplementedException("FreeSql.Provider.GBase 未实现该功能"); + protected override List RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Provider.GBase {CoreStrings.S_Not_Implemented_Feature}"); protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) { @@ -66,7 +66,7 @@ namespace FreeSql.GBase.Curd public override Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); public override Task> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); - protected override Task> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.GBase 未实现该功能"); + protected override Task> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.GBase {CoreStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseAdo.cs b/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseAdo.cs index bcdea701..dc8a8260 100644 --- a/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseAdo.cs +++ b/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseAdo.cs @@ -25,12 +25,12 @@ namespace FreeSql.GBase return; } if (!string.IsNullOrEmpty(masterConnectionString)) - MasterPool = new GBaseConnectionPool("主库", masterConnectionString, null, null); + MasterPool = new GBaseConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); if (slaveConnectionStrings != null) { 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); } } diff --git a/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseConnectionPool.cs b/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseConnectionPool.cs index fda36444..e70003c7 100644 --- a/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseConnectionPool.cs +++ b/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseConnectionPool.cs @@ -45,7 +45,7 @@ namespace FreeSql.GBase { 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 TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); @@ -120,8 +120,8 @@ namespace FreeSql.GBase { if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) @@ -150,8 +150,8 @@ namespace FreeSql.GBase { if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) diff --git a/Providers/FreeSql.Provider.GBase/GBaseCodeFirst.cs b/Providers/FreeSql.Provider.GBase/GBaseCodeFirst.cs index 250ace61..60a834fa 100644 --- a/Providers/FreeSql.Provider.GBase/GBaseCodeFirst.cs +++ b/Providers/FreeSql.Provider.GBase/GBaseCodeFirst.cs @@ -92,8 +92,8 @@ namespace FreeSql.GBase { if (sb.Length > 0) sb.Append("\r\n"); var tb = _commonUtils.GetTableByEntity(obj.entityType); - if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移"); - if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移,可迁移属性0个"); + if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { database, tbname[0] }; diff --git a/Providers/FreeSql.Provider.KingbaseES/Curd/KingbaseESOnConflictDoUpdate.cs b/Providers/FreeSql.Provider.KingbaseES/Curd/KingbaseESOnConflictDoUpdate.cs index 063823cc..17b0b3e3 100644 --- a/Providers/FreeSql.Provider.KingbaseES/Curd/KingbaseESOnConflictDoUpdate.cs +++ b/Providers/FreeSql.Provider.KingbaseES/Curd/KingbaseESOnConflictDoUpdate.cs @@ -24,7 +24,7 @@ namespace FreeSql.KingbaseES public KingbaseESOnConflictDoUpdate(IInsert insert, Expression> columns = null) { _insert = insert as KingbaseESInsert; - 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 (columns != null) @@ -38,7 +38,7 @@ namespace FreeSql.KingbaseES } if (_columns == null || _columns.Any() == false) _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() diff --git a/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESAdo.cs b/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESAdo.cs index 459eb34b..26706cc0 100644 --- a/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESAdo.cs +++ b/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESAdo.cs @@ -23,12 +23,12 @@ namespace FreeSql.KingbaseES return; } if (!string.IsNullOrEmpty(masterConnectionString)) - MasterPool = new KingbaseESConnectionPool("主库", masterConnectionString, null, null); + MasterPool = new KingbaseESConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); if (slaveConnectionStrings != null) { 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); } } diff --git a/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESConnectionPool.cs b/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESConnectionPool.cs index e363c42e..70771a05 100644 --- a/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESConnectionPool.cs +++ b/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESConnectionPool.cs @@ -56,7 +56,7 @@ namespace FreeSql.KingbaseES { 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 TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); @@ -131,8 +131,8 @@ namespace FreeSql.KingbaseES { if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) @@ -161,8 +161,8 @@ namespace FreeSql.KingbaseES { if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) diff --git a/Providers/FreeSql.Provider.KingbaseES/KingbaseESCodeFirst.cs b/Providers/FreeSql.Provider.KingbaseES/KingbaseESCodeFirst.cs index 5c4dff19..9dc36dab 100644 --- a/Providers/FreeSql.Provider.KingbaseES/KingbaseESCodeFirst.cs +++ b/Providers/FreeSql.Provider.KingbaseES/KingbaseESCodeFirst.cs @@ -79,8 +79,8 @@ namespace FreeSql.KingbaseES { if (sb.Length > 0) sb.Append("\r\n"); var tb = _commonUtils.GetTableByEntity(obj.entityType); - if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移"); - if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移,可迁移属性0个"); + if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { "PUBLIC", tbname[0] }; diff --git a/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessDelete.cs b/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessDelete.cs index 814bf6f1..fa822e8a 100644 --- a/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessDelete.cs +++ b/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessDelete.cs @@ -16,11 +16,11 @@ namespace FreeSql.MsAccess.Curd { } - public override List ExecuteDeleted() => throw new NotImplementedException("FreeSql.Provider.MsAccess 未实现该功能"); + public override List ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.MsAccess {CoreStrings.S_Not_Implemented_Feature}"); #if net40 #else - public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.MsAccess 未实现该功能"); + public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.MsAccess {CoreStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessInsert.cs b/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessInsert.cs index 464a3ff9..606c2b08 100644 --- a/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessInsert.cs +++ b/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessInsert.cs @@ -26,7 +26,7 @@ namespace FreeSql.MsAccess.Curd public override List ExecuteInserted() => base.SplitExecuteInserted(1, 1000); public override IInsert 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() { diff --git a/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessSelect.cs b/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessSelect.cs index bea29f94..c58a9457 100644 --- a/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessSelect.cs +++ b/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessSelect.cs @@ -36,7 +36,7 @@ namespace FreeSql.MsAccess.Curd if (_limit > 0) sb.Append("TOP ").Append(_skip + _limit).Append(" "); sb.Append(field); if (_skip > 0) - throw new NotImplementedException("FreeSql.Provider.MsAccess 未实现 Skip/Offset 功能,如果需要分页请使用判断上一次 id"); + throw new NotImplementedException(CoreStrings.S_NotImplementSkipOffset("MsAccess")); sb.Append(" \r\nFROM "); var fromIndex = sb.Length; var ioinCounter = 0; diff --git a/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessUpdate.cs b/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessUpdate.cs index e24525e9..0596be08 100644 --- a/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessUpdate.cs +++ b/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessUpdate.cs @@ -25,9 +25,9 @@ namespace FreeSql.MsAccess.Curd public override List ExecuteUpdated() => base.SplitExecuteUpdated(1, 1000); public override IUpdate 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 RawExecuteUpdated() => throw new NotImplementedException("FreeSql.Provider.MsAccess 未实现该功能"); + protected override List RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Provider.MsAccess {CoreStrings.S_Not_Implemented_Feature}"); protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) { @@ -69,7 +69,7 @@ namespace FreeSql.MsAccess.Curd public override Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(1, 1000, cancellationToken); public override Task> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(1, 1000, cancellationToken); - protected override Task> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.MsAccess 未实现该功能"); + protected override Task> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.MsAccess {CoreStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessAdo.cs b/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessAdo.cs index 16f3c32c..2f3690ed 100644 --- a/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessAdo.cs +++ b/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessAdo.cs @@ -23,12 +23,12 @@ namespace FreeSql.MsAccess return; } if (!string.IsNullOrEmpty(masterConnectionString)) - MasterPool = new MsAccessConnectionPool("主库", masterConnectionString, null, null); + MasterPool = new MsAccessConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); if (slaveConnectionStrings != null) { 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); } } diff --git a/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessConnectionPool.cs b/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessConnectionPool.cs index 54bb99c2..4bcc57a0 100644 --- a/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessConnectionPool.cs +++ b/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessConnectionPool.cs @@ -45,7 +45,7 @@ namespace FreeSql.MsAccess { 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 TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(30); public TimeSpan IdleTimeout { get; set; } = TimeSpan.Zero; @@ -120,8 +120,8 @@ namespace FreeSql.MsAccess if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) @@ -151,8 +151,8 @@ namespace FreeSql.MsAccess if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) diff --git a/Providers/FreeSql.Provider.MsAccess/MsAccessCodeFirst.cs b/Providers/FreeSql.Provider.MsAccess/MsAccessCodeFirst.cs index 7fc0c12e..ade42a9c 100644 --- a/Providers/FreeSql.Provider.MsAccess/MsAccessCodeFirst.cs +++ b/Providers/FreeSql.Provider.MsAccess/MsAccessCodeFirst.cs @@ -80,8 +80,8 @@ namespace FreeSql.MsAccess { if (sb.Length > 0) sb.Append("\r\n"); var tb = _commonUtils.GetTableByEntity(obj.entityType); - if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移"); - if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移,可迁移属性0个"); + if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName)); var tbname = tb.DbName; var tboldname = tb.DbOldName; //旧表名 if (string.Compare(tbname, tboldname, true) == 0) tboldname = null; @@ -177,7 +177,7 @@ namespace FreeSql.MsAccess istmpatler = true; } if (tboldname != null && isexistsTb == true) - throw new Exception($"旧表(OldName):{tboldname} 存在,数据库已存在 {tbname} 表,无法改名"); + throw new Exception(CoreStrings.S_OldTableExists(tboldname, tbname)); DataTable schemaColumns = null; DataTable schemaDataTypes = null; @@ -394,7 +394,8 @@ namespace FreeSql.MsAccess } Dictionary dicDropTable = new Dictionary(StringComparer.OrdinalIgnoreCase); - Action dropTable = tn => { + Action dropTable = tn => + { if (dicDropTable.ContainsKey(tn)) return; dicDropTable.Add(tn, true); sb.Append("DROP TABLE ").Append(_commonUtils.QuoteSqlName(tn)).Append(";\r\n"); diff --git a/Providers/FreeSql.Provider.MsAccess/MsAccessProvider.cs b/Providers/FreeSql.Provider.MsAccess/MsAccessProvider.cs index 0ef9e5d8..28ea2474 100644 --- a/Providers/FreeSql.Provider.MsAccess/MsAccessProvider.cs +++ b/Providers/FreeSql.Provider.MsAccess/MsAccessProvider.cs @@ -15,7 +15,7 @@ namespace FreeSql.MsAccess public override IDelete CreateDeleteProvider(object dywhere) => new MsAccessDelete(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere); public override IInsertOrUpdate CreateInsertOrUpdateProvider() => 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 connectionFactory = null) { this.InternalCommonUtils = new MsAccessUtils(this); diff --git a/Providers/FreeSql.Provider.MySql/Curd/MySqlInsertOrUpdate.cs b/Providers/FreeSql.Provider.MySql/Curd/MySqlInsertOrUpdate.cs index 96989800..f779e8fd 100644 --- a/Providers/FreeSql.Provider.MySql/Curd/MySqlInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.MySql/Curd/MySqlInsertOrUpdate.cs @@ -54,7 +54,7 @@ namespace FreeSql.MySql.Curd } 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) => sb.Append(" \r\n FROM dual WHERE NOT EXISTS(").Append( _orm.Select() diff --git a/Providers/FreeSql.Provider.MySql/Curd/OnDuplicateKeyUpdate.cs b/Providers/FreeSql.Provider.MySql/Curd/OnDuplicateKeyUpdate.cs index 8c3a5dcf..ece3c512 100644 --- a/Providers/FreeSql.Provider.MySql/Curd/OnDuplicateKeyUpdate.cs +++ b/Providers/FreeSql.Provider.MySql/Curd/OnDuplicateKeyUpdate.cs @@ -17,7 +17,7 @@ namespace FreeSql.MySql.Curd public OnDuplicateKeyUpdate(IInsert insert) { _mysqlInsert = insert as MySqlInsert; - 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"; } diff --git a/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs b/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs index 68fa8b2c..3499c9bd 100644 --- a/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs +++ b/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs @@ -27,12 +27,12 @@ namespace FreeSql.MySql return; } if (!string.IsNullOrEmpty(masterConnectionString)) - MasterPool = new MySqlConnectionPool("主库", masterConnectionString, null, null); + MasterPool = new MySqlConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); if (slaveConnectionStrings != null) { 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); } } diff --git a/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlConnectionPool.cs b/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlConnectionPool.cs index 39c70ecc..29ba92fb 100644 --- a/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlConnectionPool.cs +++ b/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlConnectionPool.cs @@ -49,7 +49,7 @@ namespace FreeSql.MySql { 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 TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); @@ -125,8 +125,8 @@ namespace FreeSql.MySql { if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) @@ -155,8 +155,8 @@ namespace FreeSql.MySql { if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) diff --git a/Providers/FreeSql.Provider.MySql/MySqlAdo/MygisTypes.cs b/Providers/FreeSql.Provider.MySql/MySqlAdo/MygisTypes.cs index 6672b628..338a68d8 100644 --- a/Providers/FreeSql.Provider.MySql/MySqlAdo/MygisTypes.cs +++ b/Providers/FreeSql.Provider.MySql/MySqlAdo/MygisTypes.cs @@ -3,6 +3,7 @@ using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; +using FreeSql; public struct MygisCoordinate2D : IEquatable { @@ -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("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('(', ')'))); - throw new NotImplementedException($"MygisGeometry.Parse 未实现 \"{wkt}\""); + throw new NotImplementedException(CoreStrings.S_MygisGeometry_NotImplement(wkt)); } static MygisPoint ParsePoint(string str) { diff --git a/Providers/FreeSql.Provider.MySql/MySqlCodeFirst.cs b/Providers/FreeSql.Provider.MySql/MySqlCodeFirst.cs index 42e0c05c..75a2e955 100644 --- a/Providers/FreeSql.Provider.MySql/MySqlCodeFirst.cs +++ b/Providers/FreeSql.Provider.MySql/MySqlCodeFirst.cs @@ -101,8 +101,8 @@ namespace FreeSql.MySql { if (sb.Length > 0) sb.Append("\r\n"); var tb = _commonUtils.GetTableByEntity(obj.entityType); - if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移"); - if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移,可迁移属性0个"); + if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { database, tbname[0] }; diff --git a/Providers/FreeSql.Provider.MySql/MySqlExtensions.cs b/Providers/FreeSql.Provider.MySql/MySqlExtensions.cs index 40e19c5f..48a72c1c 100644 --- a/Providers/FreeSql.Provider.MySql/MySqlExtensions.cs +++ b/Providers/FreeSql.Provider.MySql/MySqlExtensions.cs @@ -32,7 +32,7 @@ public static partial class FreeSqlMySqlGlobalExtensions public static IInsert MySqlIgnoreInto(this IInsert that) where T1 : class { var _mysqlInsert = that as MySqlInsert; - 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; return that; } diff --git a/Providers/FreeSql.Provider.MySqlConnector/FreeSqlMySqlConnectorGlobalExtensions.cs b/Providers/FreeSql.Provider.MySqlConnector/FreeSqlMySqlConnectorGlobalExtensions.cs index 2c4f3bd7..0ee693e5 100644 --- a/Providers/FreeSql.Provider.MySqlConnector/FreeSqlMySqlConnectorGlobalExtensions.cs +++ b/Providers/FreeSql.Provider.MySqlConnector/FreeSqlMySqlConnectorGlobalExtensions.cs @@ -34,7 +34,7 @@ public static class FreeSqlMySqlConnectorGlobalExtensions public static void ExecuteMySqlBulkCopy(this IInsert that, int? bulkCopyTimeout = null) where T : class { var insert = that as FreeSql.MySql.Curd.MySqlInsert; - 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(); if (dt.Rows.Count == 0) return; @@ -81,7 +81,7 @@ public static class FreeSqlMySqlConnectorGlobalExtensions } else { - throw new NotImplementedException("ExecuteMySqlBulkCopy 未实现错误,请反馈给作者"); + throw new NotImplementedException($"ExecuteMySqlBulkCopy {CoreStrings.S_Not_Implemented_FeedBack}"); } } finally @@ -94,7 +94,7 @@ public static class FreeSqlMySqlConnectorGlobalExtensions async public static Task ExecuteMySqlBulkCopyAsync(this IInsert that, int? bulkCopyTimeout = null, CancellationToken cancellationToken = default) where T : class { var insert = that as FreeSql.MySql.Curd.MySqlInsert; - 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(); if (dt.Rows.Count == 0) return; @@ -141,7 +141,7 @@ public static class FreeSqlMySqlConnectorGlobalExtensions } else { - throw new NotImplementedException("ExecuteMySqlBulkCopyAsync 未实现错误,请反馈给作者"); + throw new NotImplementedException($"ExecuteMySqlBulkCopyAsync {CoreStrings.S_Not_Implemented_FeedBack}"); } } finally diff --git a/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengDelete.cs b/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengDelete.cs index 8ee23ec8..53fea915 100644 --- a/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengDelete.cs +++ b/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengDelete.cs @@ -16,11 +16,11 @@ namespace FreeSql.Odbc.Dameng { } - public override List ExecuteDeleted() => throw new NotImplementedException("FreeSql.Odbc.Dameng 未实现该功能"); + public override List ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Odbc.Dameng {CoreStrings.S_Not_Implemented_Feature}"); #if net40 #else - public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Odbc.Dameng 未实现该功能"); + public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Dameng {CoreStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengUpdate.cs b/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengUpdate.cs index f454c2bd..3ca2e3b8 100644 --- a/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengUpdate.cs @@ -22,7 +22,7 @@ namespace FreeSql.Odbc.Dameng public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); public override List ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); - protected override List RawExecuteUpdated() => throw new NotImplementedException("FreeSql.Odbc.Dameng 未实现该功能"); + protected override List RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Odbc.Dameng {CoreStrings.S_Not_Implemented_Feature}"); protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) { @@ -66,7 +66,7 @@ namespace FreeSql.Odbc.Dameng public override Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); public override Task> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); - protected override Task> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Odbc.Dameng 未实现该功能"); + protected override Task> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Dameng {CoreStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengAdo/OdbcDamengAdo.cs b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengAdo/OdbcDamengAdo.cs index e1b0b19e..d5c1e5f3 100644 --- a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengAdo/OdbcDamengAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengAdo/OdbcDamengAdo.cs @@ -22,12 +22,12 @@ namespace FreeSql.Odbc.Dameng return; } if (!string.IsNullOrEmpty(masterConnectionString)) - MasterPool = new OdbcDamengConnectionPool("主库", masterConnectionString, null, null); + MasterPool = new OdbcDamengConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); if (slaveConnectionStrings != null) { 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); } } diff --git a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengAdo/OdbcDamengConnectionPool.cs b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengAdo/OdbcDamengConnectionPool.cs index 4be0c321..04b9d24c 100644 --- a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengAdo/OdbcDamengConnectionPool.cs +++ b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengAdo/OdbcDamengConnectionPool.cs @@ -56,7 +56,7 @@ namespace FreeSql.Odbc.Dameng { 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 TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); @@ -131,8 +131,8 @@ namespace FreeSql.Odbc.Dameng { if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) @@ -161,8 +161,8 @@ namespace FreeSql.Odbc.Dameng { if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) diff --git a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengCodeFirst.cs b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengCodeFirst.cs index 7abc2669..02c6b9b2 100644 --- a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengCodeFirst.cs +++ b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengCodeFirst.cs @@ -93,8 +93,8 @@ namespace FreeSql.Odbc.Dameng { if (sb.Length > 0) sb.Append("\r\n"); var tb = _commonUtils.GetTableByEntity(obj.entityType); - if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移"); - if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移,可迁移属性0个"); + if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { userId, tbname[0] }; @@ -115,7 +115,7 @@ namespace FreeSql.Odbc.Dameng //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) //创建数据库 - throw new NotImplementedException($"达梦 CodeFirst 不支持代码创建 tablespace 与 schemas {tbname[0]}"); + throw new NotImplementedException(CoreStrings.S_Dameng_NotSupport_TablespaceSchemas(tbname[0])); var sbalter = new StringBuilder(); var istmpatler = false; //创建临时表,导入数据,删除旧表,修改 diff --git a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengDbFirst.cs b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengDbFirst.cs index f4384911..cb721b49 100644 --- a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengDbFirst.cs +++ b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengDbFirst.cs @@ -160,7 +160,7 @@ namespace FreeSql.Odbc.Dameng if (dbfull != null) _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]); return OdbcType.NVarChar; } - throw new NotImplementedException($"未实现 {column.DbTypeTextFull} 类型映射"); + throw new NotImplementedException(CoreStrings.S_TypeMappingNotImplemented(column.DbTypeTextFull)); } static ConcurrentDictionary _dicDbToCs = new ConcurrentDictionary(StringComparer.CurrentCultureIgnoreCase); diff --git a/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcDelete.cs b/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcDelete.cs index 76e0495e..671564ff 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcDelete.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcDelete.cs @@ -16,11 +16,11 @@ namespace FreeSql.Odbc.Default { } - public override List ExecuteDeleted() => throw new NotImplementedException("FreeSql.Odbc.Default 未实现该功能"); + public override List ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreStrings.S_Not_Implemented_Feature}"); #if net40 #else - public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Odbc.Default 未实现该功能"); + public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcInsert.cs b/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcInsert.cs index 4ff987f7..681362cb 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcInsert.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcInsert.cs @@ -62,7 +62,7 @@ namespace FreeSql.Odbc.Default return ret; } - protected override List RawExecuteInserted() => throw new NotImplementedException("FreeSql.Odbc.Default 未实现该功能"); + protected override List RawExecuteInserted() => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreStrings.S_Not_Implemented_Feature}"); #if net40 #else @@ -107,7 +107,7 @@ namespace FreeSql.Odbc.Default } return ret; } - protected override Task> RawExecuteInsertedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Odbc.Default 未实现该功能"); + protected override Task> RawExecuteInsertedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreStrings.S_Not_Implemented_Feature}"); #endif } } \ No newline at end of file diff --git a/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcSelect.cs b/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcSelect.cs index 292c933c..e367517b 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcSelect.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcSelect.cs @@ -35,7 +35,7 @@ namespace FreeSql.Odbc.Default if (_limit > 0 && _utils.Adapter.SelectTopStyle == OdbcAdapter.SelecTopStyle.Top) sb.Append("TOP ").Append(_skip + _limit).Append(" "); sb.Append(field); 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 "); var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray(); diff --git a/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcUpdate.cs b/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcUpdate.cs index b3b165f3..78011fd5 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcUpdate.cs @@ -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 List ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255); - protected override List RawExecuteUpdated() => throw new NotImplementedException("FreeSql.Odbc.Default 未实现该功能"); + protected override List RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreStrings.S_Not_Implemented_Feature}"); protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) { @@ -65,7 +65,7 @@ namespace FreeSql.Odbc.Default public override Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken); public override Task> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken); - protected override Task> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Odbc.Default 未实现该功能"); + protected override Task> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcAdo.cs b/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcAdo.cs index 91281364..ea17b6df 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcAdo.cs @@ -22,12 +22,12 @@ namespace FreeSql.Odbc.Default return; } if (!string.IsNullOrEmpty(masterConnectionString)) - MasterPool = new OdbcConnectionPool("主库", masterConnectionString, null, null); + MasterPool = new OdbcConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); if (slaveConnectionStrings != null) { 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); } } diff --git a/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcConnectionPool.cs b/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcConnectionPool.cs index 6af2dab1..2f750c1a 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcConnectionPool.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcConnectionPool.cs @@ -45,7 +45,7 @@ namespace FreeSql.Odbc.Default { 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 TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); @@ -121,8 +121,8 @@ namespace FreeSql.Odbc.Default if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) @@ -152,8 +152,8 @@ namespace FreeSql.Odbc.Default if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) diff --git a/Providers/FreeSql.Provider.Odbc/Default/OdbcCodeFirst.cs b/Providers/FreeSql.Provider.Odbc/Default/OdbcCodeFirst.cs index 5e848443..c7f584a8 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/OdbcCodeFirst.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/OdbcCodeFirst.cs @@ -90,6 +90,6 @@ namespace FreeSql.Odbc.Default 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}"); } } \ No newline at end of file diff --git a/Providers/FreeSql.Provider.Odbc/Default/OdbcProvider.cs b/Providers/FreeSql.Provider.Odbc/Default/OdbcProvider.cs index 383f93f9..152b5e01 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/OdbcProvider.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/OdbcProvider.cs @@ -20,7 +20,7 @@ namespace FreeSql.Odbc.Default public override IDelete CreateDeleteProvider(object dywhere) => new OdbcDelete(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere); public override IInsertOrUpdate CreateInsertOrUpdateProvider() => 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}"); /// /// 生成一个普通访问功能的 IFreeSql 对象,用来访问 odbc diff --git a/Providers/FreeSql.Provider.Odbc/KingbaseES/Curd/OdbcKingbaseESOnConflictDoUpdate.cs b/Providers/FreeSql.Provider.Odbc/KingbaseES/Curd/OdbcKingbaseESOnConflictDoUpdate.cs index 13c27ab3..649bcbdb 100644 --- a/Providers/FreeSql.Provider.Odbc/KingbaseES/Curd/OdbcKingbaseESOnConflictDoUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/KingbaseES/Curd/OdbcKingbaseESOnConflictDoUpdate.cs @@ -24,7 +24,7 @@ namespace FreeSql.Odbc.KingbaseES public OdbcKingbaseESOnConflictDoUpdate(IInsert insert, Expression> columns = null) { _pgsqlInsert = insert as OdbcKingbaseESInsert; - 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 (columns != null) @@ -38,7 +38,7 @@ namespace FreeSql.Odbc.KingbaseES } if (_columns == null || _columns.Any() == false) _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() diff --git a/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESAdo/OdbcKingbaseESAdo.cs b/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESAdo/OdbcKingbaseESAdo.cs index f9773484..fbaa40f4 100644 --- a/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESAdo/OdbcKingbaseESAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESAdo/OdbcKingbaseESAdo.cs @@ -23,12 +23,12 @@ namespace FreeSql.Odbc.KingbaseES return; } if (!string.IsNullOrEmpty(masterConnectionString)) - MasterPool = new OdbcKingbaseESConnectionPool("主库", masterConnectionString, null, null); + MasterPool = new OdbcKingbaseESConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); if (slaveConnectionStrings != null) { 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); } } diff --git a/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESAdo/OdbcKingbaseESConnectionPool.cs b/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESAdo/OdbcKingbaseESConnectionPool.cs index 0ffb42c1..0b315141 100644 --- a/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESAdo/OdbcKingbaseESConnectionPool.cs +++ b/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESAdo/OdbcKingbaseESConnectionPool.cs @@ -56,7 +56,7 @@ namespace FreeSql.Odbc.KingbaseES { 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 TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); @@ -131,8 +131,8 @@ namespace FreeSql.Odbc.KingbaseES { if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) @@ -161,8 +161,8 @@ namespace FreeSql.Odbc.KingbaseES { if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) diff --git a/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESCodeFirst.cs b/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESCodeFirst.cs index 59094729..7c669bf1 100644 --- a/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESCodeFirst.cs +++ b/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESCodeFirst.cs @@ -83,8 +83,8 @@ namespace FreeSql.Odbc.KingbaseES { if (sb.Length > 0) sb.Append("\r\n"); var tb = _commonUtils.GetTableByEntity(obj.entityType); - if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移"); - if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移,可迁移属性0个"); + if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { "PUBLIC", tbname[0] }; diff --git a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlInsertOrUpdate.cs b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlInsertOrUpdate.cs index 4b278196..9c904829 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlInsertOrUpdate.cs @@ -53,7 +53,7 @@ namespace FreeSql.Odbc.MySql } 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) => sb.Append(" \r\n FROM dual WHERE NOT EXISTS(").Append( _orm.Select() diff --git a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlOnDuplicateKeyUpdate.cs b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlOnDuplicateKeyUpdate.cs index 9a5931b6..4f450158 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlOnDuplicateKeyUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlOnDuplicateKeyUpdate.cs @@ -17,7 +17,7 @@ namespace FreeSql.Odbc.MySql public OdbcMySqlOnDuplicateKeyUpdate(IInsert insert) { _mysqlInsert = insert as OdbcMySqlInsert; - 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"; } diff --git a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs index 3d017af9..17846612 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs @@ -23,12 +23,12 @@ namespace FreeSql.Odbc.MySql return; } if (!string.IsNullOrEmpty(masterConnectionString)) - MasterPool = new OdbcMySqlConnectionPool("主库", masterConnectionString, null, null); + MasterPool = new OdbcMySqlConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); if (slaveConnectionStrings != null) { 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); } } diff --git a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlConnectionPool.cs b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlConnectionPool.cs index d4c2f0eb..58c0e0ad 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlConnectionPool.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlConnectionPool.cs @@ -45,7 +45,7 @@ namespace FreeSql.Odbc.MySql { 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 TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); @@ -120,8 +120,8 @@ namespace FreeSql.Odbc.MySql { if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) @@ -150,8 +150,8 @@ namespace FreeSql.Odbc.MySql { if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) diff --git a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlCodeFirst.cs b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlCodeFirst.cs index 132e97e3..d75e2737 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlCodeFirst.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlCodeFirst.cs @@ -90,8 +90,8 @@ namespace FreeSql.Odbc.MySql { if (sb.Length > 0) sb.Append("\r\n"); var tb = _commonUtils.GetTableByEntity(obj.entityType); - if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移"); - if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移,可迁移属性0个"); + if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { database, tbname[0] }; diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleDelete.cs b/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleDelete.cs index b5ceafe7..daea9365 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleDelete.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleDelete.cs @@ -16,11 +16,11 @@ namespace FreeSql.Odbc.Oracle { } - public override List ExecuteDeleted() => throw new NotImplementedException("FreeSql.Odbc.Oracle 未实现该功能"); + public override List ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Odbc.Oracle {CoreStrings.S_Not_Implemented_Feature}"); #if net40 #else - public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Odbc.Oracle 未实现该功能"); + public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Oracle {CoreStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleUpdate.cs b/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleUpdate.cs index b758277b..cd9cb033 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleUpdate.cs @@ -22,7 +22,7 @@ namespace FreeSql.Odbc.Oracle public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); public override List ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); - protected override List RawExecuteUpdated() => throw new NotImplementedException("FreeSql.Odbc.Oracle 未实现该功能"); + protected override List RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Odbc.Oracle {CoreStrings.S_Not_Implemented_Feature}"); protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) { @@ -68,7 +68,7 @@ namespace FreeSql.Odbc.Oracle public override Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); public override Task> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); - protected override Task> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Odbc.Oracle 未实现该功能"); + protected override Task> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Oracle {CoreStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleAdo.cs b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleAdo.cs index cfdf8917..fe973ffb 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleAdo.cs @@ -22,12 +22,12 @@ namespace FreeSql.Odbc.Oracle return; } if (!string.IsNullOrEmpty(masterConnectionString)) - MasterPool = new OdbcOracleConnectionPool("主库", masterConnectionString, null, null); + MasterPool = new OdbcOracleConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); if (slaveConnectionStrings != null) { 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); } } diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleConnectionPool.cs b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleConnectionPool.cs index 58983b72..0c5f9996 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleConnectionPool.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleConnectionPool.cs @@ -56,7 +56,7 @@ namespace FreeSql.Odbc.Oracle { 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 TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); @@ -131,8 +131,8 @@ namespace FreeSql.Odbc.Oracle { if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) @@ -161,8 +161,8 @@ namespace FreeSql.Odbc.Oracle { if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleCodeFirst.cs b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleCodeFirst.cs index 0c7eb91d..ad673448 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleCodeFirst.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleCodeFirst.cs @@ -93,8 +93,8 @@ namespace FreeSql.Odbc.Oracle { if (sb.Length > 0) sb.Append("\r\n"); var tb = _commonUtils.GetTableByEntity(obj.entityType); - if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移"); - if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移,可迁移属性0个"); + if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { userId, tbname[0] }; @@ -115,7 +115,7 @@ namespace FreeSql.Odbc.Oracle //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) //创建数据库 - throw new NotImplementedException($"Oracle CodeFirst 不支持代码创建 tablespace 与 schemas {tbname[0]}"); + throw new NotImplementedException(CoreStrings.S_Oracle_NotSupport_TablespaceSchemas(tbname[0])); var sbalter = new StringBuilder(); var istmpatler = false; //创建临时表,导入数据,删除旧表,修改 diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleDbFirst.cs b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleDbFirst.cs index 1d8f3275..8037ee9e 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleDbFirst.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleDbFirst.cs @@ -113,7 +113,7 @@ namespace FreeSql.Odbc.Oracle if (dbfull != null) _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]); return OdbcType.NVarChar; } - throw new NotImplementedException($"未实现 {column.DbTypeTextFull} 类型映射"); + throw new NotImplementedException(CoreStrings.S_TypeMappingNotImplemented(column.DbTypeTextFull)); } static ConcurrentDictionary _dicDbToCs = new ConcurrentDictionary(StringComparer.CurrentCultureIgnoreCase); diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLOnConflictDoUpdate.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLOnConflictDoUpdate.cs index 1e096d04..6d531add 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLOnConflictDoUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLOnConflictDoUpdate.cs @@ -24,7 +24,7 @@ namespace FreeSql.Odbc.PostgreSQL public OdbcPostgreSQLOnConflictDoUpdate(IInsert insert, Expression> columns = null) { _pgsqlInsert = insert as OdbcPostgreSQLInsert; - 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 (columns != null) @@ -38,7 +38,7 @@ namespace FreeSql.Odbc.PostgreSQL } if (_columns == null || _columns.Any() == false) _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() diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs index 27ef0721..819d66cd 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs @@ -23,12 +23,12 @@ namespace FreeSql.Odbc.PostgreSQL return; } if (!string.IsNullOrEmpty(masterConnectionString)) - MasterPool = new OdbcPostgreSQLConnectionPool("主库", masterConnectionString, null, null); + MasterPool = new OdbcPostgreSQLConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); if (slaveConnectionStrings != null) { 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); } } diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLConnectionPool.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLConnectionPool.cs index 40d06352..3385d513 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLConnectionPool.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLConnectionPool.cs @@ -46,7 +46,7 @@ namespace FreeSql.Odbc.PostgreSQL { 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 TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); @@ -121,8 +121,8 @@ namespace FreeSql.Odbc.PostgreSQL { if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) @@ -151,8 +151,8 @@ namespace FreeSql.Odbc.PostgreSQL { if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLCodeFirst.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLCodeFirst.cs index 2555a628..0613e319 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLCodeFirst.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLCodeFirst.cs @@ -96,8 +96,8 @@ namespace FreeSql.Odbc.PostgreSQL { if (sb.Length > 0) sb.Append("\r\n"); var tb = _commonUtils.GetTableByEntity(obj.entityType); - if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移"); - if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移,可迁移属性0个"); + if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { "public", tbname[0] }; diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerDelete.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerDelete.cs index e0f184e5..868f463b 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerDelete.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerDelete.cs @@ -40,7 +40,7 @@ namespace FreeSql.Odbc.SqlServer } var sql = sb.ToString(); 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)) .Append(sbret) .Append(sql.Substring(validx)).ToString(); @@ -97,7 +97,7 @@ namespace FreeSql.Odbc.SqlServer } var sql = sb.ToString(); 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)) .Append(sbret) .Append(sql.Substring(validx)).ToString(); diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerInsert.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerInsert.cs index baf1aa11..e4650e9e 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerInsert.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerInsert.cs @@ -69,14 +69,14 @@ namespace FreeSql.Odbc.SqlServer if ((_commonUtils as OdbcSqlServerUtils).ServerVersion > 10) { 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.Append(sql.Substring(validx + 1)); } else { 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.Append(sql.Substring(validx + 1)); } @@ -153,14 +153,14 @@ namespace FreeSql.Odbc.SqlServer if ((_commonUtils as OdbcSqlServerUtils).ServerVersion > 10) { 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.Append(sql.Substring(validx + 1)); } else { 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.Append(sql.Substring(validx + 1)); } diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerUpdate.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerUpdate.cs index d1a74591..5a7a17c3 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerUpdate.cs @@ -46,7 +46,7 @@ namespace FreeSql.Odbc.SqlServer } var sql = sb.ToString(); 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)) .Append(sbret) .Append(sql.Substring(validx)).ToString(); @@ -139,7 +139,7 @@ namespace FreeSql.Odbc.SqlServer } var sql = sb.ToString(); 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)) .Append(sbret) .Append(sql.Substring(validx)).ToString(); diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerAdo.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerAdo.cs index e0a567a4..c1363669 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerAdo.cs @@ -23,12 +23,12 @@ namespace FreeSql.Odbc.SqlServer return; } if (!string.IsNullOrEmpty(masterConnectionString)) - MasterPool = new OdbcSqlServerConnectionPool("主库", masterConnectionString, null, null); + MasterPool = new OdbcSqlServerConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); if (slaveConnectionStrings != null) { 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); } } diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerConnectionPool.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerConnectionPool.cs index 752567cc..b3227ac3 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerConnectionPool.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerConnectionPool.cs @@ -45,7 +45,7 @@ namespace FreeSql.Odbc.SqlServer { 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 TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); @@ -121,8 +121,8 @@ namespace FreeSql.Odbc.SqlServer if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) @@ -152,8 +152,8 @@ namespace FreeSql.Odbc.SqlServer if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerCodeFirst.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerCodeFirst.cs index 0e449beb..2a182b8b 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerCodeFirst.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerCodeFirst.cs @@ -150,8 +150,8 @@ ELSE { if (sb.Length > 0) sb.Append("\r\n"); var tb = _commonUtils.GetTableByEntity(obj.entityType); - if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移"); - if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移,可迁移属性0个"); + if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { database, "dbo", tbname[0] }; if (tbname?.Length == 2) tbname = new[] { database, tbname[0], tbname[1] }; diff --git a/Providers/FreeSql.Provider.Oracle/Curd/OracleDelete.cs b/Providers/FreeSql.Provider.Oracle/Curd/OracleDelete.cs index c3f7203d..b823251a 100644 --- a/Providers/FreeSql.Provider.Oracle/Curd/OracleDelete.cs +++ b/Providers/FreeSql.Provider.Oracle/Curd/OracleDelete.cs @@ -16,11 +16,11 @@ namespace FreeSql.Oracle.Curd { } - public override List ExecuteDeleted() => throw new NotImplementedException("FreeSql.Provider.Oracle 未实现该功能"); + public override List ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.Oracle {CoreStrings.S_Not_Implemented_Feature}"); #if net40 #else - public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.Oracle 未实现该功能"); + public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Oracle {CoreStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.Oracle/Curd/OracleUpdate.cs b/Providers/FreeSql.Provider.Oracle/Curd/OracleUpdate.cs index f180ded1..fa46745f 100644 --- a/Providers/FreeSql.Provider.Oracle/Curd/OracleUpdate.cs +++ b/Providers/FreeSql.Provider.Oracle/Curd/OracleUpdate.cs @@ -22,7 +22,7 @@ namespace FreeSql.Oracle.Curd public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); public override List ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); - protected override List RawExecuteUpdated() => throw new NotImplementedException("FreeSql.Provider.Oracle 未实现该功能"); + protected override List RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Provider.Oracle {CoreStrings.S_Not_Implemented_Feature}"); protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) { @@ -68,7 +68,7 @@ namespace FreeSql.Oracle.Curd public override Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); public override Task> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); - protected override Task> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.Oracle 未实现该功能"); + protected override Task> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Oracle {CoreStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleAdo.cs b/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleAdo.cs index 7279eb7a..3afc7fb2 100644 --- a/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleAdo.cs +++ b/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleAdo.cs @@ -22,12 +22,12 @@ namespace FreeSql.Oracle return; } if (!string.IsNullOrEmpty(masterConnectionString)) - MasterPool = new OracleConnectionPool("主库", masterConnectionString, null, null); + MasterPool = new OracleConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); if (slaveConnectionStrings != null) { foreach (var slaveConnectionString in slaveConnectionStrings) { - var slavePool = new OracleConnectionPool($"从库{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); + var slavePool = new OracleConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); SlavePools.Add(slavePool); } } diff --git a/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleConnectionPool.cs b/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleConnectionPool.cs index d29b0637..960f601c 100644 --- a/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleConnectionPool.cs +++ b/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleConnectionPool.cs @@ -56,7 +56,7 @@ namespace FreeSql.Oracle { internal OracleConnectionPool _pool; - public string Name { get; set; } = "Oracle Connection 对象池"; + public string Name { get; set; } = $"Oracle Connection {CoreStrings.S_ObjectPool}"; public int PoolSize { get; set; } = 100; public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); @@ -132,8 +132,8 @@ namespace FreeSql.Oracle { if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) @@ -162,8 +162,8 @@ namespace FreeSql.Oracle { if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) diff --git a/Providers/FreeSql.Provider.Oracle/OracleCodeFirst.cs b/Providers/FreeSql.Provider.Oracle/OracleCodeFirst.cs index e125eb65..86a19c13 100644 --- a/Providers/FreeSql.Provider.Oracle/OracleCodeFirst.cs +++ b/Providers/FreeSql.Provider.Oracle/OracleCodeFirst.cs @@ -94,8 +94,8 @@ namespace FreeSql.Oracle { if (sb.Length > 0) sb.Append("\r\n"); var tb = _commonUtils.GetTableByEntity(obj.entityType); - if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移"); - if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移,可迁移属性0个"); + if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { userId, tbname[0] }; @@ -116,7 +116,7 @@ namespace FreeSql.Oracle //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) //创建数据库 - throw new NotImplementedException($"Oracle CodeFirst 不支持代码创建 tablespace 与 schemas {tbname[0]}"); + throw new NotImplementedException(CoreStrings.S_Oracle_NotSupport_TablespaceSchemas(tbname[0])); var sbalter = new StringBuilder(); var istmpatler = false; //创建临时表,导入数据,删除旧表,修改 diff --git a/Providers/FreeSql.Provider.Oracle/OracleDbFirst.cs b/Providers/FreeSql.Provider.Oracle/OracleDbFirst.cs index cec07b03..9262cdf1 100644 --- a/Providers/FreeSql.Provider.Oracle/OracleDbFirst.cs +++ b/Providers/FreeSql.Provider.Oracle/OracleDbFirst.cs @@ -113,7 +113,7 @@ namespace FreeSql.Oracle if (dbfull != null) _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]); return OracleDbType.NVarchar2; } - throw new NotImplementedException($"未实现 {column.DbTypeTextFull} 类型映射"); + throw new NotImplementedException(CoreStrings.S_TypeMappingNotImplemented(column.DbTypeTextFull)); } static ConcurrentDictionary _dicDbToCs = new ConcurrentDictionary(StringComparer.CurrentCultureIgnoreCase); diff --git a/Providers/FreeSql.Provider.Oracle/OracleExtensions.cs b/Providers/FreeSql.Provider.Oracle/OracleExtensions.cs index 2a216ce4..f4982912 100644 --- a/Providers/FreeSql.Provider.Oracle/OracleExtensions.cs +++ b/Providers/FreeSql.Provider.Oracle/OracleExtensions.cs @@ -29,7 +29,7 @@ public static partial class FreeSqlOracleGlobalExtensions public static void ExecuteOracleBulkCopy(this IInsert that, OracleBulkCopyOptions copyOptions = OracleBulkCopyOptions.Default, int? batchSize = null, int? bulkCopyTimeout = null) where T : class { var insert = that as FreeSql.Oracle.Curd.OracleInsert; - if (insert == null) throw new Exception("ExecuteOracleBulkCopy 是 FreeSql.Provider.Oracle 特有的功能"); + if (insert == null) throw new Exception(CoreStrings.S_Features_Unique("ExecuteOracleBulkCopy", "Oracle")); var dt = that.ToDataTable(); if (dt.Rows.Count == 0) return; @@ -97,7 +97,7 @@ public static partial class FreeSqlOracleGlobalExtensions } else { - throw new NotImplementedException("ExecuteOracleBulkCopy 未实现错误,请反馈给作者"); + throw new NotImplementedException($"ExecuteOracleBulkCopy {CoreStrings.S_Not_Implemented_FeedBack}"); } } finally diff --git a/Providers/FreeSql.Provider.PostgreSQL/Curd/OnConflictDoUpdate.cs b/Providers/FreeSql.Provider.PostgreSQL/Curd/OnConflictDoUpdate.cs index 50145b35..faa1b4f4 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/Curd/OnConflictDoUpdate.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/Curd/OnConflictDoUpdate.cs @@ -24,7 +24,7 @@ namespace FreeSql.PostgreSQL.Curd public OnConflictDoUpdate(IInsert insert, Expression> columns = null) { _pgsqlInsert = insert as PostgreSQLInsert; - if (_pgsqlInsert == null) throw new Exception("OnConflictDoUpdate 是 FreeSql.Provider.PostgreSQL 特有的功能"); + if (_pgsqlInsert == null) throw new Exception(CoreStrings.S_Features_Unique("OnConflictDoUpdate", "PostgreSQL")); if (_pgsqlInsert._noneParameterFlag == "c") _pgsqlInsert._noneParameterFlag = "cu"; if (columns != null) @@ -38,7 +38,7 @@ namespace FreeSql.PostgreSQL.Curd } if (_columns == null || _columns.Any() == false) _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() diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs index 5bf8f97e..cdce586d 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs @@ -25,12 +25,12 @@ namespace FreeSql.PostgreSQL return; } if (!string.IsNullOrEmpty(masterConnectionString)) - MasterPool = new PostgreSQLConnectionPool("主库", masterConnectionString, null, null); + MasterPool = new PostgreSQLConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); if (slaveConnectionStrings != null) { foreach (var slaveConnectionString in slaveConnectionStrings) { - var slavePool = new PostgreSQLConnectionPool($"从库{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); + var slavePool = new PostgreSQLConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); SlavePools.Add(slavePool); } } diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLConnectionPool.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLConnectionPool.cs index 49fef7c7..954e2551 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLConnectionPool.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLConnectionPool.cs @@ -46,7 +46,7 @@ namespace FreeSql.PostgreSQL { internal PostgreSQLConnectionPool _pool; - public string Name { get; set; } = "PostgreSQL NpgsqlConnection 对象池"; + public string Name { get; set; } = $"PostgreSQL NpgsqlConnection {CoreStrings.S_ObjectPool}"; public int PoolSize { get; set; } = 50; public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); @@ -122,8 +122,8 @@ namespace FreeSql.PostgreSQL { if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) @@ -152,8 +152,8 @@ namespace FreeSql.PostgreSQL { if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLCodeFirst.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLCodeFirst.cs index a28b037b..1bfe9ff5 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLCodeFirst.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLCodeFirst.cs @@ -145,8 +145,8 @@ namespace FreeSql.PostgreSQL { if (sb.Length > 0) sb.Append("\r\n"); var tb = _commonUtils.GetTableByEntity(obj.entityType); - if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移"); - if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移,可迁移属性0个"); + if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { "public", tbname[0] }; diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExtensions.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExtensions.cs index 265f9747..8f3b3179 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExtensions.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExtensions.cs @@ -3,6 +3,7 @@ using FreeSql.PostgreSQL.Curd; using Npgsql; using System; using System.Data; +using System.Diagnostics; using System.Linq.Expressions; using System.Text; using System.Threading; @@ -51,7 +52,7 @@ public static partial class FreeSqlPostgreSQLGlobalExtensions public static void ExecutePgCopy(this IInsert that) where T : class { var insert = that as FreeSql.PostgreSQL.Curd.PostgreSQLInsert; - if (insert == null) throw new Exception("ExecutePgCopy 是 FreeSql.Provider.PostgreSQL 特有的功能"); + if (insert == null) throw new Exception(CoreStrings.S_Features_Unique("ExecutePgCopy", "PostgreSQL")); var dt = that.ToDataTable(); if (dt.Rows.Count == 0) return; @@ -109,7 +110,7 @@ public static partial class FreeSqlPostgreSQLGlobalExtensions } else { - throw new NotImplementedException("ExecutePgCopy 未实现错误,请反馈给作者"); + throw new NotImplementedException($"ExecutePgCopy {CoreStrings.S_Not_Implemented_FeedBack}"); } } finally @@ -123,7 +124,7 @@ public static partial class FreeSqlPostgreSQLGlobalExtensions async public static Task ExecutePgCopyAsync(this IInsert that, CancellationToken cancellationToken = default) where T : class { var insert = that as FreeSql.PostgreSQL.Curd.PostgreSQLInsert; - if (insert == null) throw new Exception("ExecutePgCopyAsync 是 FreeSql.Provider.PostgreSQL 特有的功能"); + if (insert == null) throw new Exception(CoreStrings.S_Features_Unique("ExecutePgCopyAsync", "PostgreSQL")); var dt = that.ToDataTable(); if (dt.Rows.Count == 0) return; @@ -180,7 +181,7 @@ public static partial class FreeSqlPostgreSQLGlobalExtensions } else { - throw new NotImplementedException("ExecutePgCopyAsync 未实现错误,请反馈给作者"); + throw new NotImplementedException($"ExecutePgCopyAsync {CoreStrings.S_Not_Implemented_FeedBack}"); } } finally diff --git a/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongAdo.cs b/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongAdo.cs index 0fa64c97..92492211 100644 --- a/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongAdo.cs +++ b/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongAdo.cs @@ -23,12 +23,12 @@ namespace FreeSql.ShenTong return; } if (!string.IsNullOrEmpty(masterConnectionString)) - MasterPool = new ShenTongConnectionPool("主库", masterConnectionString, null, null); + MasterPool = new ShenTongConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); if (slaveConnectionStrings != null) { foreach (var slaveConnectionString in slaveConnectionStrings) { - var slavePool = new ShenTongConnectionPool($"从库{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); + var slavePool = new ShenTongConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); SlavePools.Add(slavePool); } } diff --git a/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongConnectionPool.cs b/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongConnectionPool.cs index 33788535..c41c5ea0 100644 --- a/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongConnectionPool.cs +++ b/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongConnectionPool.cs @@ -44,7 +44,7 @@ namespace FreeSql.ShenTong { internal ShenTongConnectionPool _pool; - public string Name { get; set; } = "ShenTong OscarConnection 对象池"; + public string Name { get; set; } = $"ShenTong OscarConnection {CoreStrings.S_ObjectPool}"; public int PoolSize { get; set; } = 50; public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); @@ -120,8 +120,8 @@ namespace FreeSql.ShenTong { if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) @@ -150,8 +150,8 @@ namespace FreeSql.ShenTong { if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) diff --git a/Providers/FreeSql.Provider.ShenTong/ShenTongCodeFirst.cs b/Providers/FreeSql.Provider.ShenTong/ShenTongCodeFirst.cs index 38bc584e..ecf30709 100644 --- a/Providers/FreeSql.Provider.ShenTong/ShenTongCodeFirst.cs +++ b/Providers/FreeSql.Provider.ShenTong/ShenTongCodeFirst.cs @@ -95,8 +95,8 @@ namespace FreeSql.ShenTong { if (sb.Length > 0) sb.Append("\r\n"); var tb = _commonUtils.GetTableByEntity(obj.entityType); - if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移"); - if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移,可迁移属性0个"); + if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { "PUBLIC", tbname[0] }; diff --git a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerDelete.cs b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerDelete.cs index bd724930..7882a947 100644 --- a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerDelete.cs +++ b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerDelete.cs @@ -40,7 +40,7 @@ namespace FreeSql.SqlServer.Curd } var sql = sb.ToString(); 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)) .Append(sbret) .Append(sql.Substring(validx)).ToString(); @@ -97,7 +97,7 @@ namespace FreeSql.SqlServer.Curd } var sql = sb.ToString(); 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)) .Append(sbret) .Append(sql.Substring(validx)).ToString(); diff --git a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerInsert.cs b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerInsert.cs index 5e89dc8f..798c3b59 100644 --- a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerInsert.cs +++ b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerInsert.cs @@ -74,14 +74,14 @@ namespace FreeSql.SqlServer.Curd if ((_commonUtils as SqlServerUtils).ServerVersion > 10) { 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.Append(sql.Substring(validx + 1)); } else { 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.Append(sql.Substring(validx + 1)); } @@ -158,14 +158,14 @@ namespace FreeSql.SqlServer.Curd if ((_commonUtils as SqlServerUtils).ServerVersion > 10) { 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.Append(sql.Substring(validx + 1)); } else { 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.Append(sql.Substring(validx + 1)); } diff --git a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerUpdate.cs b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerUpdate.cs index d3ada5f8..91a75335 100644 --- a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerUpdate.cs +++ b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerUpdate.cs @@ -47,7 +47,7 @@ namespace FreeSql.SqlServer.Curd } var sql = sb.ToString(); 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)) .Append(sbret) .Append(sql.Substring(validx)).ToString(); @@ -140,7 +140,7 @@ namespace FreeSql.SqlServer.Curd } var sql = sb.ToString(); 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)) .Append(sbret) .Append(sql.Substring(validx)).ToString(); diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerAdo.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerAdo.cs index dd318808..e7df87c4 100644 --- a/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerAdo.cs +++ b/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerAdo.cs @@ -29,12 +29,12 @@ namespace FreeSql.SqlServer return; } if (!string.IsNullOrEmpty(masterConnectionString)) - MasterPool = new SqlServerConnectionPool("主库", masterConnectionString, null, null); + MasterPool = new SqlServerConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); if (slaveConnectionStrings != null) { foreach (var slaveConnectionString in slaveConnectionStrings) { - var slavePool = new SqlServerConnectionPool($"从库{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); + var slavePool = new SqlServerConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); SlavePools.Add(slavePool); } } diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerConnectionPool.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerConnectionPool.cs index 849e13ab..22bca3dc 100644 --- a/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerConnectionPool.cs +++ b/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerConnectionPool.cs @@ -49,7 +49,7 @@ namespace FreeSql.SqlServer { internal SqlServerConnectionPool _pool; - public string Name { get; set; } = "SqlServer SqlConnection 对象池"; + public string Name { get; set; } = $"SqlServer SqlConnection {CoreStrings.S_ObjectPool}"; public int PoolSize { get; set; } = 100; public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); @@ -126,8 +126,8 @@ namespace FreeSql.SqlServer if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) @@ -156,8 +156,8 @@ namespace FreeSql.SqlServer if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerCodeFirst.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerCodeFirst.cs index 9a8d6358..39b524f9 100644 --- a/Providers/FreeSql.Provider.SqlServer/SqlServerCodeFirst.cs +++ b/Providers/FreeSql.Provider.SqlServer/SqlServerCodeFirst.cs @@ -152,8 +152,8 @@ ELSE { if (sb.Length > 0) sb.Append("\r\n"); var tb = _commonUtils.GetTableByEntity(obj.entityType); - if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移"); - if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移,可迁移属性0个"); + if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { database, "dbo", tbname[0] }; if (tbname?.Length == 2) tbname = new[] { database, tbname[0], tbname[1] }; diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerExtensions.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerExtensions.cs index afca4c55..a2a6dfd7 100644 --- a/Providers/FreeSql.Provider.SqlServer/SqlServerExtensions.cs +++ b/Providers/FreeSql.Provider.SqlServer/SqlServerExtensions.cs @@ -73,7 +73,7 @@ public static partial class FreeSqlSqlServerGlobalExtensions public static void ExecuteSqlBulkCopy(this IInsert that, SqlBulkCopyOptions copyOptions = SqlBulkCopyOptions.Default, int? batchSize = null, int? bulkCopyTimeout = null) where T : class { var insert = that as FreeSql.SqlServer.Curd.SqlServerInsert; - if (insert == null) throw new Exception("ExecuteSqlBulkCopy 是 FreeSql.Provider.SqlServer 特有的功能"); + if (insert == null) throw new Exception(CoreStrings.S_Features_Unique("ExecuteSqlBulkCopy", "SqlServer")); var dt = that.ToDataTable(); if (dt.Rows.Count == 0) return; @@ -139,7 +139,7 @@ public static partial class FreeSqlSqlServerGlobalExtensions } else { - throw new NotImplementedException("ExecuteSqlBulkCopy 未实现错误,请反馈给作者"); + throw new NotImplementedException($"ExecuteSqlBulkCopy {CoreStrings.S_Not_Implemented_FeedBack}"); } } finally @@ -152,7 +152,7 @@ public static partial class FreeSqlSqlServerGlobalExtensions async public static Task ExecuteSqlBulkCopyAsync(this IInsert that, SqlBulkCopyOptions copyOptions = SqlBulkCopyOptions.Default, int? batchSize = null, int? bulkCopyTimeout = null, CancellationToken cancellationToken = default) where T : class { var insert = that as FreeSql.SqlServer.Curd.SqlServerInsert; - if (insert == null) throw new Exception("ExecuteSqlBulkCopyAsync 是 FreeSql.Provider.SqlServer 特有的功能"); + if (insert == null) throw new Exception(CoreStrings.S_Features_Unique("ExecuteSqlBulkCopyAsync", "SqlServer")); var dt = that.ToDataTable(); if (dt.Rows.Count == 0) return; @@ -218,7 +218,7 @@ public static partial class FreeSqlSqlServerGlobalExtensions } else { - throw new NotImplementedException("ExecuteSqlBulkCopyAsync 未实现错误,请反馈给作者"); + throw new NotImplementedException($"ExecuteSqlBulkCopyAsync {CoreStrings.S_Not_Implemented_FeedBack}"); } } finally diff --git a/Providers/FreeSql.Provider.Sqlite/Curd/SqliteDelete.cs b/Providers/FreeSql.Provider.Sqlite/Curd/SqliteDelete.cs index 0e46d437..8ae3fd62 100644 --- a/Providers/FreeSql.Provider.Sqlite/Curd/SqliteDelete.cs +++ b/Providers/FreeSql.Provider.Sqlite/Curd/SqliteDelete.cs @@ -16,11 +16,11 @@ namespace FreeSql.Sqlite.Curd { } - public override List ExecuteDeleted() => throw new NotImplementedException("FreeSql.Provider.Sqlite 未实现该功能"); + public override List ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.Sqlite {CoreStrings.S_Not_Implemented_Feature}"); #if net40 #else - public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.Sqlite 未实现该功能"); + public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Sqlite {CoreStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.Sqlite/Curd/SqliteInsertOrUpdate.cs b/Providers/FreeSql.Provider.Sqlite/Curd/SqliteInsertOrUpdate.cs index 34d9ad1f..824e837f 100644 --- a/Providers/FreeSql.Provider.Sqlite/Curd/SqliteInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.Sqlite/Curd/SqliteInsertOrUpdate.cs @@ -46,14 +46,14 @@ namespace FreeSql.Sqlite.Curd insert.InsertIdentity(); if (_doNothing == false) { - if (_updateIgnore.Any()) throw new Exception($"fsql.InsertOrUpdate Sqlite 无法完成 UpdateColumns 操作"); + if (_updateIgnore.Any()) throw new Exception(CoreStrings.S_InsertOrUpdate_Unable_UpdateColumns); sql = insert.ToSql(); if (sql?.StartsWith("INSERT INTO ") == true) sql = $"REPLACE INTO {sql.Substring("INSERT INTO ".Length)}"; } else { - if (_table.Primarys.Any() == false) throw new Exception($"fsql.InsertOrUpdate + IfExistsDoNothing + Sqlite 要求实体类 {_table.CsName} 必须有主键"); + if (_table.Primarys.Any() == false) throw new Exception(CoreStrings.Entity_Must_Primary_Key("fsql.InsertOrUpdate + IfExistsDoNothing + Sqlite ", _table.CsName)); sql = insert.ToSqlValuesOrSelectUnionAllExtension101(false, (rowd, idx, sb) => sb.Append(" \r\n WHERE NOT EXISTS(").Append( _orm.Select() diff --git a/Providers/FreeSql.Provider.Sqlite/Curd/SqliteUpdate.cs b/Providers/FreeSql.Provider.Sqlite/Curd/SqliteUpdate.cs index e88cf832..ff1c752f 100644 --- a/Providers/FreeSql.Provider.Sqlite/Curd/SqliteUpdate.cs +++ b/Providers/FreeSql.Provider.Sqlite/Curd/SqliteUpdate.cs @@ -22,7 +22,7 @@ namespace FreeSql.Sqlite.Curd public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); public override List ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); - protected override List RawExecuteUpdated() => throw new NotImplementedException("FreeSql.Provider.Sqlite 未实现该功能"); + protected override List RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Provider.Sqlite {CoreStrings.S_Not_Implemented_Feature}"); protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) { @@ -66,7 +66,7 @@ namespace FreeSql.Sqlite.Curd public override Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); public override Task> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); - protected override Task> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.Sqlite 未实现该功能"); + protected override Task> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Sqlite {CoreStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs b/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs index f3294901..dc15959c 100644 --- a/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs +++ b/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs @@ -29,12 +29,12 @@ namespace FreeSql.Sqlite return; } if (!string.IsNullOrEmpty(masterConnectionString)) - MasterPool = new SqliteConnectionPool("主库", masterConnectionString, null, null); + MasterPool = new SqliteConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); if (slaveConnectionStrings != null) { foreach (var slaveConnectionString in slaveConnectionStrings) { - var slavePool = new SqliteConnectionPool($"从库{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); + var slavePool = new SqliteConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); SlavePools.Add(slavePool); } } diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteConnectionPool.cs b/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteConnectionPool.cs index 88fef4de..6fa2f9f7 100644 --- a/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteConnectionPool.cs +++ b/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteConnectionPool.cs @@ -57,7 +57,7 @@ namespace FreeSql.Sqlite { internal SqliteConnectionPool _pool; - public string Name { get; set; } = "Sqlite SQLiteConnection 对象池"; + public string Name { get; set; } = $"Sqlite SQLiteConnection {CoreStrings.S_ObjectPool}"; public int PoolSize { get; set; } = 100; public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.Zero; @@ -160,8 +160,8 @@ namespace FreeSql.Sqlite { if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) @@ -190,8 +190,8 @@ namespace FreeSql.Sqlite { if (obj.Value == null) { - _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); - throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); + _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + 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) diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteCodeFirst.cs b/Providers/FreeSql.Provider.Sqlite/SqliteCodeFirst.cs index fee7a0b0..6845d10d 100644 --- a/Providers/FreeSql.Provider.Sqlite/SqliteCodeFirst.cs +++ b/Providers/FreeSql.Provider.Sqlite/SqliteCodeFirst.cs @@ -79,8 +79,8 @@ namespace FreeSql.Sqlite { if (sb.Length > 0) sb.Append("\r\n"); var tb = _commonUtils.GetTableByEntity(obj.entityType); - if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移"); - if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移,可迁移属性0个"); + if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { "main", tbname[0] }; diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteDbFirst.cs b/Providers/FreeSql.Provider.Sqlite/SqliteDbFirst.cs index e304a213..74478bbc 100644 --- a/Providers/FreeSql.Provider.Sqlite/SqliteDbFirst.cs +++ b/Providers/FreeSql.Provider.Sqlite/SqliteDbFirst.cs @@ -102,7 +102,7 @@ namespace FreeSql.Sqlite if (dbfull != null) _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar(255)"]); return DbType.String; } - throw new NotImplementedException($"未实现 {column.DbTypeTextFull} 类型映射"); + throw new NotImplementedException(CoreStrings.S_TypeMappingNotImplemented(column.DbTypeTextFull)); } static ConcurrentDictionary _dicDbToCs = new ConcurrentDictionary(StringComparer.CurrentCultureIgnoreCase); From b1dbcfe89d8bd283cf973a5d2d09e03703569a23 Mon Sep 17 00:00:00 2001 From: IGeekFan Date: Fri, 10 Jun 2022 03:10:51 +0800 Subject: [PATCH 2/2] Update README.MD --- Extensions/FreeSql.Extensions.BaseEntity/README.MD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Extensions/FreeSql.Extensions.BaseEntity/README.MD b/Extensions/FreeSql.Extensions.BaseEntity/README.MD index 9f850945..0c106102 100644 --- a/Extensions/FreeSql.Extensions.BaseEntity/README.MD +++ b/Extensions/FreeSql.Extensions.BaseEntity/README.MD @@ -1,4 +1,4 @@ -[中文](README.zh-CN.md) | **English** +[中文](README.zh-CN.MD) | **English** # Preface