support provider、Extensions Exceptions 多语言

This commit is contained in:
igeekfan 2022-06-10 03:05:27 +08:00
parent e9949b58ff
commit 4fa125e93c
128 changed files with 1369 additions and 608 deletions

View File

@ -24,7 +24,7 @@ namespace FreeSql
static Func<IFreeSql> _resoleOrm; static Func<IFreeSql> _resoleOrm;
internal static Func<IUnitOfWork> _resolveUow; internal static Func<IUnitOfWork> _resolveUow;
public static IFreeSql Orm => _resoleOrm?.Invoke() ?? throw new Exception("BaseEntity.Initialization 初始化错误,获取到 IFreeSql 是 null"); public static IFreeSql Orm => _resoleOrm?.Invoke() ?? throw new Exception(CoreStrings.S_BaseEntity_Initialization_Error);
public static void Initialization(IFreeSql fsql, Func<IUnitOfWork> resolveUow) => Initialization(() => fsql, resolveUow); public static void Initialization(IFreeSql fsql, Func<IUnitOfWork> resolveUow) => Initialization(() => fsql, resolveUow);
public static void Initialization(Func<IFreeSql> resoleOrm, Func<IUnitOfWork> resolveUow) public static void Initialization(Func<IFreeSql> resoleOrm, Func<IUnitOfWork> resolveUow)

View File

@ -33,7 +33,7 @@ public static class FreeSqlExtensionsLinqSql
/// <returns></returns> /// <returns></returns>
public static ISelect<T1> RestoreToSelect<T1>(this IQueryable<T1> that) where T1 : class public static ISelect<T1> RestoreToSelect<T1>(this IQueryable<T1> that) where T1 : class
{ {
var queryable = that as QueryableProvider<T1, T1> ?? throw new Exception($"无法将 IQueryable<{typeof(T1).Name}> 转换为 ISelect<{typeof(T1).Name}>,因为他的实现不是 FreeSql.Extensions.Linq.QueryableProvider"); var queryable = that as QueryableProvider<T1, T1> ?? throw new Exception(CoreStrings.S_CannotBeConverted_To_ISelect(typeof(T1).Name));
return queryable._select; return queryable._select;
} }

View File

@ -121,7 +121,7 @@ namespace FreeSql.Extensions.Linq
case "Average": return tplMaxMinAvgSum("Avg"); case "Average": return tplMaxMinAvgSum("Avg");
case "Concat": case "Concat":
return throwCallExp(" 不支持"); return throwCallExp(CoreStrings.Not_Support);
case "Contains": case "Contains":
if (callExp.Arguments.Count == 2) if (callExp.Arguments.Count == 2)
{ {
@ -141,7 +141,7 @@ namespace FreeSql.Extensions.Linq
_select.Distinct(); _select.Distinct();
break; break;
} }
return throwCallExp(" 不支持"); return throwCallExp(CoreStrings.Not_Support);
case "ElementAt": case "ElementAt":
case "ElementAtOrDefault": case "ElementAtOrDefault":
@ -178,7 +178,7 @@ namespace FreeSql.Extensions.Linq
_select.InternalWhere(whereParam); _select.InternalWhere(whereParam);
break; break;
} }
return throwCallExp(" 不支持"); return throwCallExp(CoreStrings.Not_Support);
case "Skip": case "Skip":
_select.Offset((int)callExp.Arguments[1].GetConstExprValue()); _select.Offset((int)callExp.Arguments[1].GetConstExprValue());
@ -190,7 +190,7 @@ namespace FreeSql.Extensions.Linq
case "ToList": case "ToList":
if (callExp.Arguments.Count == 1) if (callExp.Arguments.Count == 1)
return _select.ToList(); return _select.ToList();
return throwCallExp(" 不支持"); return throwCallExp(CoreStrings.Not_Support);
case "Select": case "Select":
var selectParam = (callExp.Arguments[1] as UnaryExpression)?.Operand as LambdaExpression; var selectParam = (callExp.Arguments[1] as UnaryExpression)?.Operand as LambdaExpression;
@ -199,7 +199,7 @@ namespace FreeSql.Extensions.Linq
_select._selectExpression = selectParam; _select._selectExpression = selectParam;
break; break;
} }
return throwCallExp(" 不支持"); return throwCallExp(CoreStrings.Not_Support);
case "Join": case "Join":
if (callExp.Arguments.Count == 5) if (callExp.Arguments.Count == 5)
@ -241,13 +241,13 @@ namespace FreeSql.Extensions.Linq
case "Last": case "Last":
case "LastOrDefault": case "LastOrDefault":
return throwCallExp(" 不支持"); return throwCallExp(CoreStrings.Not_Support);
case "GroupBy": case "GroupBy":
return throwCallExp(" 不支持"); return throwCallExp(CoreStrings.Not_Support);
default: default:
return throwCallExp(" 不支持"); return throwCallExp(CoreStrings.Not_Support);
} }
} }
if (tresult == null) return null; if (tresult == null) return null;

View File

@ -159,7 +159,7 @@ new Colorful.Formatter("推荐在实体类目录创建 gen.bat双击它重新
case "-nameoptions": case "-nameoptions":
ArgsNameOptions = args[a + 1].Split(',').Select(opt => opt == "1").ToArray(); ArgsNameOptions = args[a + 1].Split(',').Select(opt => opt == "1").ToArray();
if (ArgsNameOptions.Length != 4) throw new ArgumentException("-NameOptions 参数错误格式为0,0,0,0"); if (ArgsNameOptions.Length != 4) throw new ArgumentException(CoreStrings.S_NameOptions_Incorrect);
a++; a++;
break; break;
case "-namespace": case "-namespace":
@ -168,7 +168,8 @@ new Colorful.Formatter("推荐在实体类目录创建 gen.bat双击它重新
break; break;
case "-db": case "-db":
var dbargs = args[a + 1].Split(',', 2); var dbargs = args[a + 1].Split(',', 2);
if (dbargs.Length != 2) throw new ArgumentException("-DB 参数错误格式为MySql,ConnectionString"); if (dbargs.Length != 2) throw new ArgumentException(CoreStrings.S_DB_ParameterError);
switch (dbargs[0].Trim().ToLower()) switch (dbargs[0].Trim().ToLower())
{ {
case "mysql": ArgsDbType = DataType.MySql; break; case "mysql": ArgsDbType = DataType.MySql; break;
@ -181,7 +182,7 @@ new Colorful.Formatter("推荐在实体类目录创建 gen.bat双击它重新
case "kingbasees": ArgsDbType = DataType.KingbaseES; break; case "kingbasees": ArgsDbType = DataType.KingbaseES; break;
case "shentong": ArgsDbType = DataType.ShenTong; break; case "shentong": ArgsDbType = DataType.ShenTong; break;
case "clickhouse": ArgsDbType = DataType.ClickHouse; break; case "clickhouse": ArgsDbType = DataType.ClickHouse; break;
default: throw new ArgumentException($"-DB 参数错误,不支持的类型:\"{dbargs[0]}\""); default: throw new ArgumentException(CoreStrings.S_DB_ParameterError_UnsupportedType(dbargs[0]));
} }
ArgsConnectionString = dbargs[1].Trim(); ArgsConnectionString = dbargs[1].Trim();
a++; a++;
@ -208,11 +209,11 @@ new Colorful.Formatter("推荐在实体类目录创建 gen.bat双击它重新
a++; a++;
break; break;
default: default:
throw new ArgumentException($"错误的参数设置:{args[a]}"); throw new ArgumentException(CoreStrings.S_WrongParameter(args[a]));
} }
} }
if (string.IsNullOrEmpty(ArgsConnectionString)) throw new ArgumentException($"-DB 参数错误,未提供 ConnectionString"); if (string.IsNullOrEmpty(ArgsConnectionString)) throw new ArgumentException(CoreStrings.S_DB_Parameter_Error_NoConnectionString);
RazorEngine.Engine.Razor = RazorEngineService.Create(new RazorEngine.Configuration.TemplateServiceConfiguration RazorEngine.Engine.Razor = RazorEngineService.Create(new RazorEngine.Configuration.TemplateServiceConfiguration
{ {

View File

@ -795,14 +795,5 @@
<param name="that"></param> <param name="that"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Microsoft.Extensions.DependencyInjection.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{FreeSql.FluentDataFilter},System.Reflection.Assembly[])">
<summary>
批量注入 Repository可以参考代码自行调整
</summary>
<param name="services"></param>
<param name="globalDataFilter"></param>
<param name="assemblies"></param>
<returns></returns>
</member>
</members> </members>
</doc> </doc>

View File

@ -53,6 +53,7 @@
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64 mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter

View File

@ -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);
}
}
}

View File

@ -5259,6 +5259,181 @@
运行时错误,反射获取 IncludeMany 方法失败 运行时错误,反射获取 IncludeMany 方法失败
</summary> </summary>
</member> </member>
<member name="P:FreeSql.CoreStrings.S_Access_InsertOnlyOneAtTime">
<summary>
蛋疼的 Access 插入只能一条一条执行,不支持 values(..),(..) 也不支持 select .. UNION ALL select ..
</summary>
</member>
<member name="P:FreeSql.CoreStrings.S_BaseEntity_Initialization_Error">
<summary>
BaseEntity.Initialization 初始化错误,获取到 IFreeSql 是 null
</summary>
</member>
<member name="M:FreeSql.CoreStrings.S_BlockAccess_WaitForRecovery(System.Object,System.Object)">
<summary>
【{thisName}】Block access and wait for recovery: {exMessage}
</summary>
</member>
<member name="M:FreeSql.CoreStrings.S_CannotBeConverted_To_ISelect(System.Object)">
<summary>
无法将 IQueryable&lt;{typeofName}&gt; 转换为 ISelect&lt;{typeofName}&gt;,因为他的实现不是 FreeSql.Extensions.Linq.QueryableProvider
</summary>
</member>
<member name="P:FreeSql.CoreStrings.S_ConnectionStringError">
<summary>
连接字符串错误
</summary>
</member>
<member name="M:FreeSql.CoreStrings.S_ConnectionStringError_Check(System.Object)">
<summary>
【{thisName}】连接字符串错误,请检查。
</summary>
</member>
<member name="P:FreeSql.CoreStrings.S_ConnectionStringError_CheckProject">
<summary>
连接字符串错误,或者检查项目属性 &gt; 生成 &gt; 目标平台x86 | x64
</summary>
</member>
<member name="M:FreeSql.CoreStrings.S_ConnectionStringError_CheckProjectConnection(System.Object)">
<summary>
【{thisName}】连接字符串错误,请检查。或者检查项目属性 &gt; 生成 &gt; 目标平台x86 | x64
</summary>
</member>
<member name="P:FreeSql.CoreStrings.S_CustomAdapter_Cannot_Use_CreateCommand">
<summary>
FreeSql.Provider.CustomAdapter 无法使用 CreateCommand
</summary>
</member>
<member name="P:FreeSql.CoreStrings.S_CustomAdapter_OnlySuppport_UseConnectionFactory">
<summary>
FreeSql.Provider.CustomAdapter 仅支持 UseConnectionFactory 方式构建 IFreeSql
</summary>
</member>
<member name="M:FreeSql.CoreStrings.S_Dameng_NotSupport_TablespaceSchemas(System.Object)">
<summary>
达梦 CodeFirst 不支持代码创建 tablespace 与 schemas {tbname}
</summary>
</member>
<member name="P:FreeSql.CoreStrings.S_DB_Parameter_Error_NoConnectionString">
<summary>
-DB 参数错误,未提供 ConnectionString
</summary>
</member>
<member name="P:FreeSql.CoreStrings.S_DB_ParameterError">
<summary>
-DB 参数错误格式为MySql,ConnectionString
</summary>
</member>
<member name="M:FreeSql.CoreStrings.S_DB_ParameterError_UnsupportedType(System.Object)">
<summary>
-DB 参数错误,不支持的类型:\"{dbargs}\"
</summary>
</member>
<member name="M:FreeSql.CoreStrings.S_Features_Unique(System.Object,System.Object)">
<summary>
{method} 是 FreeSql.Provider.{provider} 特有的功能
</summary>
</member>
<member name="P:FreeSql.CoreStrings.S_InsertOrUpdate_Unable_UpdateColumns">
<summary>
fsql.InsertOrUpdate Sqlite 无法完成 UpdateColumns 操作
</summary>
</member>
<member name="P:FreeSql.CoreStrings.S_MasterDatabase">
<summary>
主库
</summary>
</member>
<member name="M:FreeSql.CoreStrings.S_MygisGeometry_NotImplement(System.Object)">
<summary>
MygisGeometry.Parse 未实现 \"{wkt}\"
</summary>
</member>
<member name="P:FreeSql.CoreStrings.S_NameOptions_Incorrect">
<summary>
-NameOptions 参数错误格式为0,0,0,0
</summary>
</member>
<member name="P:FreeSql.CoreStrings.S_Not_Implemented_Feature">
<summary>
未实现该功能
</summary>
</member>
<member name="P:FreeSql.CoreStrings.S_Not_Implemented_FeedBack">
<summary>
未实现错误,请反馈给作者
</summary>
</member>
<member name="M:FreeSql.CoreStrings.S_NotFound_Name(System.Object)">
<summary>
找不到 {name}
</summary>
</member>
<member name="M:FreeSql.CoreStrings.S_NotImplementSkipOffset(System.Object)">
<summary>
FreeSql.Provider.{providerName} 未实现 Skip/Offset 功能,如果需要分页请使用判断上一次 id
</summary>
</member>
<member name="P:FreeSql.CoreStrings.S_ObjectPool">
<summary>
对象池
</summary>
</member>
<member name="M:FreeSql.CoreStrings.S_OldTableExists(System.Object,System.Object)">
<summary>
旧表(OldName){tboldname} 存在,数据库已存在 {tbname} 表,无法改名
</summary>
</member>
<member name="P:FreeSql.CoreStrings.S_OnConflictDoUpdate_MustIsPrimary">
<summary>
OnConflictDoUpdate 功能要求实体类必须设置 IsPrimary 属性
</summary>
</member>
<member name="M:FreeSql.CoreStrings.S_Oracle_NotSupport_TablespaceSchemas(System.Object)">
<summary>
Oracle CodeFirst 不支持代码创建 tablespace 与 schemas {tbname}
</summary>
</member>
<member name="M:FreeSql.CoreStrings.S_ParsingFailed_UseRestoreToSelect(System.Object,System.Object)">
<summary>
解析失败 {callExpMethodName} {message},提示:可以使用扩展方法 IQueryable.RestoreToSelect() 还原为 ISelect 再查询
</summary>
</member>
<member name="M:FreeSql.CoreStrings.S_RequiresEntityPrimaryKey(System.Object,System.Object)">
<summary>
fsql.InsertOrUpdate + IfExistsDoNothing + {providerName}要求实体类 {tableCsName} 必须有主键
</summary>
</member>
<member name="M:FreeSql.CoreStrings.S_SelectManayErrorType(System.Object)">
<summary>
SelectMany 错误的类型:{typeFullName}
</summary>
</member>
<member name="P:FreeSql.CoreStrings.S_SlaveDatabase">
<summary>
从库
</summary>
</member>
<member name="M:FreeSql.CoreStrings.S_Type_IsNot_Migrable(System.Object)">
<summary>
类型 {objentityTypeFullName} 不可迁移
</summary>
</member>
<member name="M:FreeSql.CoreStrings.S_Type_IsNot_Migrable_0Attributes(System.Object)">
<summary>
类型 {objentityTypeFullName} 不可迁移可迁移属性0个
</summary>
</member>
<member name="M:FreeSql.CoreStrings.S_TypeMappingNotImplemented(System.Object)">
<summary>
未实现 {columnDbTypeTextFull} 类型映射
</summary>
</member>
<member name="M:FreeSql.CoreStrings.S_WrongParameter(System.Object)">
<summary>
错误的参数设置:{args}
</summary>
</member>
<member name="M:FreeSql.CoreStrings.Set_Column_IsNullable_False(System.Object)"> <member name="M:FreeSql.CoreStrings.Set_Column_IsNullable_False(System.Object)">
<summary> <summary>
{qoteSql} is NULL除非设置特性 [Column(IsNullable = false)] {qoteSql} is NULL除非设置特性 [Column(IsNullable = false)]

View File

@ -1,11 +1,8 @@
 
// <auto-generated /> // <auto-generated />
using System;
using System.Reflection;
using System.Resources;
using System.Globalization; using System.Globalization;
using System.Threading; using System.Resources;
namespace FreeSql namespace FreeSql
{ {
@ -866,6 +863,254 @@ namespace FreeSql
public static string RunTimeError_Reflection_IncludeMany public static string RunTimeError_Reflection_IncludeMany
=> GetString("RunTimeError_Reflection_IncludeMany"); => GetString("RunTimeError_Reflection_IncludeMany");
/// <summary>
/// 蛋疼的 Access 插入只能一条一条执行,不支持 values(..),(..) 也不支持 select .. UNION ALL select ..
/// </summary>
public static string S_Access_InsertOnlyOneAtTime
=> GetString("S_Access_InsertOnlyOneAtTime");
/// <summary>
/// BaseEntity.Initialization 初始化错误,获取到 IFreeSql 是 null
/// </summary>
public static string S_BaseEntity_Initialization_Error
=> GetString("S_BaseEntity_Initialization_Error");
/// <summary>
/// 【{thisName}】Block access and wait for recovery: {exMessage}
/// </summary>
public static string S_BlockAccess_WaitForRecovery(object thisName, object exMessage)
=> string.Format(
GetString("S_BlockAccess_WaitForRecovery", nameof(thisName), nameof(exMessage)),
thisName, exMessage);
/// <summary>
/// 无法将 IQueryable&lt;{typeofName}&gt; 转换为 ISelect&lt;{typeofName}&gt;,因为他的实现不是 FreeSql.Extensions.Linq.QueryableProvider
/// </summary>
public static string S_CannotBeConverted_To_ISelect(object typeofName)
=> string.Format(
GetString("S_CannotBeConverted_To_ISelect", nameof(typeofName)),
typeofName);
/// <summary>
/// 连接字符串错误
/// </summary>
public static string S_ConnectionStringError
=> GetString("S_ConnectionStringError");
/// <summary>
/// 【{thisName}】连接字符串错误,请检查。
/// </summary>
public static string S_ConnectionStringError_Check(object thisName)
=> string.Format(
GetString("S_ConnectionStringError_Check", nameof(thisName)),
thisName);
/// <summary>
/// 连接字符串错误,或者检查项目属性 &gt; 生成 &gt; 目标平台x86 | x64
/// </summary>
public static string S_ConnectionStringError_CheckProject
=> GetString("S_ConnectionStringError_CheckProject ");
/// <summary>
/// 【{thisName}】连接字符串错误,请检查。或者检查项目属性 &gt; 生成 &gt; 目标平台x86 | x64
/// </summary>
public static string S_ConnectionStringError_CheckProjectConnection(object thisName)
=> string.Format(
GetString("S_ConnectionStringError_CheckProjectConnection", nameof(thisName)),
thisName);
/// <summary>
/// FreeSql.Provider.CustomAdapter 无法使用 CreateCommand
/// </summary>
public static string S_CustomAdapter_Cannot_Use_CreateCommand
=> GetString("S_CustomAdapter_Cannot_Use_CreateCommand");
/// <summary>
/// FreeSql.Provider.CustomAdapter 仅支持 UseConnectionFactory 方式构建 IFreeSql
/// </summary>
public static string S_CustomAdapter_OnlySuppport_UseConnectionFactory
=> GetString("S_CustomAdapter_OnlySuppport_UseConnectionFactory ");
/// <summary>
/// 达梦 CodeFirst 不支持代码创建 tablespace 与 schemas {tbname}
/// </summary>
public static string S_Dameng_NotSupport_TablespaceSchemas (object tbname)
=> string.Format(
GetString("S_Dameng_NotSupport_TablespaceSchemas ", nameof(tbname)),
tbname);
/// <summary>
/// -DB 参数错误,未提供 ConnectionString
/// </summary>
public static string S_DB_Parameter_Error_NoConnectionString
=> GetString("S_DB_Parameter_Error_NoConnectionString");
/// <summary>
/// -DB 参数错误格式为MySql,ConnectionString
/// </summary>
public static string S_DB_ParameterError
=> GetString("S_DB_ParameterError");
/// <summary>
/// -DB 参数错误,不支持的类型:\"{dbargs}\"
/// </summary>
public static string S_DB_ParameterError_UnsupportedType(object dbargs)
=> string.Format(
GetString("S_DB_ParameterError_UnsupportedType", nameof(dbargs)),
dbargs);
/// <summary>
/// {method} 是 FreeSql.Provider.{provider} 特有的功能
/// </summary>
public static string S_Features_Unique(object method, object provider)
=> string.Format(
GetString("S_Features_Unique", nameof(method), nameof(provider)),
method, provider);
/// <summary>
/// fsql.InsertOrUpdate Sqlite 无法完成 UpdateColumns 操作
/// </summary>
public static string S_InsertOrUpdate_Unable_UpdateColumns
=> GetString("S_InsertOrUpdate_Unable_UpdateColumns");
/// <summary>
/// 主库
/// </summary>
public static string S_MasterDatabase
=> GetString("S_MasterDatabase");
/// <summary>
/// MygisGeometry.Parse 未实现 \"{wkt}\"
/// </summary>
public static string S_MygisGeometry_NotImplement(object wkt)
=> string.Format(
GetString("S_MygisGeometry_NotImplement", nameof(wkt)),
wkt);
/// <summary>
/// -NameOptions 参数错误格式为0,0,0,0
/// </summary>
public static string S_NameOptions_Incorrect
=> GetString("S_NameOptions_Incorrect");
/// <summary>
/// 未实现该功能
/// </summary>
public static string S_Not_Implemented_Feature
=> GetString("S_Not_Implemented_Feature");
/// <summary>
/// 未实现错误,请反馈给作者
/// </summary>
public static string S_Not_Implemented_FeedBack
=> GetString("S_Not_Implemented_FeedBack");
/// <summary>
/// 找不到 {name}
/// </summary>
public static string S_NotFound_Name(object name)
=> string.Format(
GetString("S_NotFound_Name", nameof(name)),
name);
/// <summary>
/// FreeSql.Provider.{providerName} 未实现 Skip/Offset 功能,如果需要分页请使用判断上一次 id
/// </summary>
public static string S_NotImplementSkipOffset(object providerName)
=> string.Format(
GetString("S_NotImplementSkipOffset", nameof(providerName)),
providerName);
/// <summary>
/// 对象池
/// </summary>
public static string S_ObjectPool
=> GetString("S_ObjectPool");
/// <summary>
/// 旧表(OldName){tboldname} 存在,数据库已存在 {tbname} 表,无法改名
/// </summary>
public static string S_OldTableExists(object tboldname, object tbname)
=> string.Format(
GetString("S_OldTableExists", nameof(tboldname), nameof(tbname)),
tboldname, tbname);
/// <summary>
/// OnConflictDoUpdate 功能要求实体类必须设置 IsPrimary 属性
/// </summary>
public static string S_OnConflictDoUpdate_MustIsPrimary
=> GetString("S_OnConflictDoUpdate_MustIsPrimary");
/// <summary>
/// Oracle CodeFirst 不支持代码创建 tablespace 与 schemas {tbname}
/// </summary>
public static string S_Oracle_NotSupport_TablespaceSchemas(object tbname)
=> string.Format(
GetString("S_Oracle_NotSupport_TablespaceSchemas", nameof(tbname)),
tbname);
/// <summary>
/// 解析失败 {callExpMethodName} {message},提示:可以使用扩展方法 IQueryable.RestoreToSelect() 还原为 ISelect 再查询
/// </summary>
public static string S_ParsingFailed_UseRestoreToSelect(object callExpMethodName, object message)
=> string.Format(
GetString("S_ParsingFailed_UseRestoreToSelect", nameof(callExpMethodName), nameof(message)),
callExpMethodName, message);
/// <summary>
/// fsql.InsertOrUpdate + IfExistsDoNothing + {providerName}要求实体类 {tableCsName} 必须有主键
/// </summary>
public static string S_RequiresEntityPrimaryKey(object providerName, object tableCsName)
=> string.Format(
GetString("S_RequiresEntityPrimaryKey", nameof(providerName), nameof(tableCsName)),
providerName, tableCsName);
/// <summary>
/// SelectMany 错误的类型:{typeFullName}
/// </summary>
public static string S_SelectManayErrorType(object typeFullName)
=> string.Format(
GetString("S_SelectManayErrorType", nameof(typeFullName)),
typeFullName);
/// <summary>
/// 从库
/// </summary>
public static string S_SlaveDatabase
=> GetString("S_SlaveDatabase");
/// <summary>
/// 类型 {objentityTypeFullName} 不可迁移
/// </summary>
public static string S_Type_IsNot_Migrable(object objentityTypeFullName)
=> string.Format(
GetString("S_Type_IsNot_Migrable", nameof(objentityTypeFullName)),
objentityTypeFullName);
/// <summary>
/// 类型 {objentityTypeFullName} 不可迁移可迁移属性0个
/// </summary>
public static string S_Type_IsNot_Migrable_0Attributes(object objentityTypeFullName)
=> string.Format(
GetString("S_Type_IsNot_Migrable_0Attributes", nameof(objentityTypeFullName)),
objentityTypeFullName);
/// <summary>
/// 未实现 {columnDbTypeTextFull} 类型映射
/// </summary>
public static string S_TypeMappingNotImplemented(object columnDbTypeTextFull)
=> string.Format(
GetString("S_TypeMappingNotImplemented", nameof(columnDbTypeTextFull)),
columnDbTypeTextFull);
/// <summary>
/// 错误的参数设置:{args}
/// </summary>
public static string S_WrongParameter(object args)
=> string.Format(
GetString("S_WrongParameter", nameof(args)),
args);
/// <summary> /// <summary>
/// {qoteSql} is NULL除非设置特性 [Column(IsNullable = false)] /// {qoteSql} is NULL除非设置特性 [Column(IsNullable = false)]
/// </summary> /// </summary>

View File

@ -53,6 +53,7 @@
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64 mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter
@ -494,4 +495,109 @@
<data name="Use_InsertDict_Method" xml:space="preserve"> <data name="Use_InsertDict_Method" xml:space="preserve">
<value>FreeSql:Please use fsql. InsertDict (dict) method inserts dictionary data</value> <value>FreeSql:Please use fsql. InsertDict (dict) method inserts dictionary data</value>
</data> </data>
<data name="S_NotFound_Name" xml:space="preserve">
<value>FreeSql:{name} not found</value>
</data>
<data name="S_SlaveDatabase" xml:space="preserve">
<value>FreeSql:Slave Database</value>
</data>
<data name="S_MasterDatabase" xml:space="preserve">
<value>FreeSql:Master Database</value>
</data>
<data name="S_Access_InsertOnlyOneAtTime" xml:space="preserve">
<value>FreeSql:Egg pain Accs insertion can only be performed one at a time, values (..) are not supported. (..) Select is also not supported.. UNION ALL select..</value>
</data>
<data name="S_BaseEntity_Initialization_Error" xml:space="preserve">
<value>FreeSql:BaseEntity. Initialization initialization error, get IFreeSql is null</value>
</data>
<data name="S_BlockAccess_WaitForRecovery" xml:space="preserve">
<value>FreeSql:[{thisName}] Block access and wait for recovery: {exMessage}</value>
</data>
<data name="S_CannotBeConverted_To_ISelect" xml:space="preserve">
<value>FreeSql:IQueryable&lt;{typeofName}&gt; cannot be converted to ISelect&lt;{typeofName}&gt; because its implementation is not FreeSql.Extensions.Linq.QueryableProvider</value>
</data>
<data name="S_ConnectionStringError" xml:space="preserve">
<value>FreeSql:Connection string error</value>
</data>
<data name="S_ConnectionStringError_Check" xml:space="preserve">
<value>FreeSql:[{thisName}] Connection string error, please check.</value>
</data>
<data name="S_ConnectionStringError_CheckProject " xml:space="preserve">
<value>FreeSql:Connection string error, or check project properties &gt; Build &gt; Target Platform: x86 | x64</value>
</data>
<data name="S_ConnectionStringError_CheckProjectConnection" xml:space="preserve">
<value>FreeSql:[{thisName}] Connection string error, please check. Or check Project Properties &gt; Build &gt; Target Platform: x86 | x64</value>
</data>
<data name="S_CustomAdapter_Cannot_Use_CreateCommand" xml:space="preserve">
<value>FreeSql:FreeSql.Provider.CustomAdapter cannot use CreateCommand</value>
</data>
<data name="S_CustomAdapter_OnlySuppport_UseConnectionFactory " xml:space="preserve">
<value>FreeSql:FreeSql.Provider.CustomAdapter only supports building IFreeSql in the UseConnectionFactory way</value>
</data>
<data name="S_Dameng_NotSupport_TablespaceSchemas " xml:space="preserve">
<value>FreeSql:Dream CodeFirst does not support code creation tablespace and schemas {tbname}</value>
</data>
<data name="S_DB_Parameter_Error_NoConnectionString" xml:space="preserve">
<value>FreeSql:-DB parameter error, no ConnectionString provided</value>
</data>
<data name="S_DB_ParameterError" xml:space="preserve">
<value>FreeSql:-DB parameter error, format: MySql, ConnectionString</value>
</data>
<data name="S_DB_ParameterError_UnsupportedType" xml:space="preserve">
<value>FreeSql:-DB parameter error, unsupported type: "{dbargs}"</value>
</data>
<data name="S_Features_Unique" xml:space="preserve">
<value>FreeSql:{method} is FreeSql.Provider.{provider} specific features</value>
</data>
<data name="S_InsertOrUpdate_Unable_UpdateColumns" xml:space="preserve">
<value>FreeSql:Fsql. InsertOrUpdate Sqlite was unable to complete the UpdateColumns operation</value>
</data>
<data name="S_MygisGeometry_NotImplement" xml:space="preserve">
<value>FreeSql:MygisGeometry. Parse does not implement "{wkt}"</value>
</data>
<data name="S_NameOptions_Incorrect" xml:space="preserve">
<value>FreeSql:-NameOptions parameter incorrect, format: 0,0,0,0</value>
</data>
<data name="S_Not_Implemented_Feature" xml:space="preserve">
<value>FreeSql:This function is not implemented</value>
</data>
<data name="S_Not_Implemented_FeedBack" xml:space="preserve">
<value>FreeSql:Unrealized error, please feedback to author</value>
</data>
<data name="S_NotImplementSkipOffset" xml:space="preserve">
<value>FreeSql:FreeSql.Provider.{providerName} does not implement Skip/Offset functionality, use to determine last ID if paging is required</value>
</data>
<data name="S_OldTableExists" xml:space="preserve">
<value>FreeSql:Old table (OldName): {tboldname} exists, database already exists {tbname} table, cannot rename</value>
</data>
<data name="S_OnConflictDoUpdate_MustIsPrimary" xml:space="preserve">
<value>FreeSql:The OnConflictDoUpdate feature requires that entity classes must set the IsPrimary property</value>
</data>
<data name="S_Oracle_NotSupport_TablespaceSchemas" xml:space="preserve">
<value>FreeSql:Oracle CodeFirst does not support code creation of tablespace and schemas {tbname}</value>
</data>
<data name="S_ParsingFailed_UseRestoreToSelect" xml:space="preserve">
<value>FreeSql:Parsing failed {callExpMethodName} {message}, hint: Extension method IQueryable can be used. RestoreToSelect() reverted to ISelect re-query</value>
</data>
<data name="S_RequiresEntityPrimaryKey" xml:space="preserve">
<value>FreeSql:Fsql. InsertOrUpdate + IfExistsDoNothing + {providerName} requires the entity class {tableCsName} to have a primary key</value>
</data>
<data name="S_SelectManayErrorType" xml:space="preserve">
<value>FreeSql:SelectMany error type: {typeFullName}</value>
</data>
<data name="S_Type_IsNot_Migrable" xml:space="preserve">
<value>FreeSql:Type {objentityTypeFullName} is not migrable</value>
</data>
<data name="S_Type_IsNot_Migrable_0Attributes" xml:space="preserve">
<value>FreeSql:Type {objentityTypeFullName} is not migrable, migratable property 0</value>
</data>
<data name="S_TypeMappingNotImplemented" xml:space="preserve">
<value>FreeSql:{columnDbTypeTextFull} type mapping not implemented</value>
</data>
<data name="S_WrongParameter" xml:space="preserve">
<value>FreeSql:Wrong parameter setting: {args}</value>
</data>
<data name="S_ObjectPool" xml:space="preserve">
<value>FreeSql:Object pool</value>
</data>
</root> </root>

View File

@ -450,6 +450,146 @@
<data name="RunTimeError_Reflection_IncludeMany" xml:space="preserve"> <data name="RunTimeError_Reflection_IncludeMany" xml:space="preserve">
<value>运行时错误,反射获取 IncludeMany 方法失败</value> <value>运行时错误,反射获取 IncludeMany 方法失败</value>
</data> </data>
<data name="S_Access_InsertOnlyOneAtTime" xml:space="preserve">
<value>蛋疼的 Access 插入只能一条一条执行,不支持 values(..),(..) 也不支持 select .. UNION ALL select ..</value>
<comment>Providers</comment>
</data>
<data name="S_BaseEntity_Initialization_Error" xml:space="preserve">
<value>BaseEntity.Initialization 初始化错误,获取到 IFreeSql 是 null</value>
<comment>Extensions</comment>
</data>
<data name="S_BlockAccess_WaitForRecovery" xml:space="preserve">
<value>【{thisName}】Block access and wait for recovery: {exMessage}</value>
<comment>Providers</comment>
</data>
<data name="S_CannotBeConverted_To_ISelect" xml:space="preserve">
<value>无法将 IQueryable&lt;{typeofName}&gt; 转换为 ISelect&lt;{typeofName}&gt;,因为他的实现不是 FreeSql.Extensions.Linq.QueryableProvider</value>
<comment>Extensions</comment>
</data>
<data name="S_ConnectionStringError" xml:space="preserve">
<value>连接字符串错误</value>
<comment>Providers</comment>
</data>
<data name="S_ConnectionStringError_Check" xml:space="preserve">
<value>【{thisName}】连接字符串错误,请检查。</value>
<comment>Providers</comment>
</data>
<data name="S_ConnectionStringError_CheckProject " xml:space="preserve">
<value>连接字符串错误,或者检查项目属性 &gt; 生成 &gt; 目标平台x86 | x64</value>
<comment>Providers</comment>
</data>
<data name="S_ConnectionStringError_CheckProjectConnection" xml:space="preserve">
<value>【{thisName}】连接字符串错误,请检查。或者检查项目属性 &gt; 生成 &gt; 目标平台x86 | x64</value>
<comment>Providers</comment>
</data>
<data name="S_CustomAdapter_Cannot_Use_CreateCommand" xml:space="preserve">
<value>FreeSql.Provider.CustomAdapter 无法使用 CreateCommand</value>
<comment>Providers</comment>
</data>
<data name="S_CustomAdapter_OnlySuppport_UseConnectionFactory " xml:space="preserve">
<value>FreeSql.Provider.CustomAdapter 仅支持 UseConnectionFactory 方式构建 IFreeSql</value>
<comment>Providers</comment>
</data>
<data name="S_Dameng_NotSupport_TablespaceSchemas " xml:space="preserve">
<value>达梦 CodeFirst 不支持代码创建 tablespace 与 schemas {tbname}</value>
<comment>Providers</comment>
</data>
<data name="S_DB_Parameter_Error_NoConnectionString" xml:space="preserve">
<value>-DB 参数错误,未提供 ConnectionString</value>
<comment>Extensions</comment>
</data>
<data name="S_DB_ParameterError" xml:space="preserve">
<value>-DB 参数错误格式为MySql,ConnectionString</value>
<comment>Extensions</comment>
</data>
<data name="S_DB_ParameterError_UnsupportedType" xml:space="preserve">
<value>-DB 参数错误,不支持的类型:"{dbargs}"</value>
<comment>Extensions</comment>
</data>
<data name="S_Features_Unique" xml:space="preserve">
<value>{method} 是 FreeSql.Provider.{provider} 特有的功能</value>
<comment>Providers</comment>
</data>
<data name="S_InsertOrUpdate_Unable_UpdateColumns" xml:space="preserve">
<value>fsql.InsertOrUpdate Sqlite 无法完成 UpdateColumns 操作</value>
<comment>Providers</comment>
</data>
<data name="S_MasterDatabase" xml:space="preserve">
<value>主库</value>
<comment>Providers</comment>
</data>
<data name="S_MygisGeometry_NotImplement" xml:space="preserve">
<value>MygisGeometry.Parse 未实现 "{wkt}"</value>
<comment>Providers</comment>
</data>
<data name="S_NameOptions_Incorrect" xml:space="preserve">
<value>-NameOptions 参数错误格式为0,0,0,0</value>
<comment>Extensions</comment>
</data>
<data name="S_Not_Implemented_Feature" xml:space="preserve">
<value> 未实现该功能</value>
<comment>Providers</comment>
</data>
<data name="S_Not_Implemented_FeedBack" xml:space="preserve">
<value>未实现错误,请反馈给作者</value>
<comment>Providers</comment>
</data>
<data name="S_NotFound_Name" xml:space="preserve">
<value>找不到 {name}</value>
<comment>Providers</comment>
</data>
<data name="S_NotImplementSkipOffset" xml:space="preserve">
<value>FreeSql.Provider.{providerName} 未实现 Skip/Offset 功能,如果需要分页请使用判断上一次 id</value>
<comment>Providers</comment>
</data>
<data name="S_ObjectPool" xml:space="preserve">
<value>对象池</value>
<comment>Providers</comment>
</data>
<data name="S_OldTableExists" xml:space="preserve">
<value>旧表(OldName){tboldname} 存在,数据库已存在 {tbname} 表,无法改名</value>
<comment>Providers</comment>
</data>
<data name="S_OnConflictDoUpdate_MustIsPrimary" xml:space="preserve">
<value>OnConflictDoUpdate 功能要求实体类必须设置 IsPrimary 属性</value>
<comment>Providers</comment>
</data>
<data name="S_Oracle_NotSupport_TablespaceSchemas" xml:space="preserve">
<value>Oracle CodeFirst 不支持代码创建 tablespace 与 schemas {tbname}</value>
<comment>Providers</comment>
</data>
<data name="S_ParsingFailed_UseRestoreToSelect" xml:space="preserve">
<value>解析失败 {callExpMethodName} {message},提示:可以使用扩展方法 IQueryable.RestoreToSelect() 还原为 ISelect 再查询</value>
<comment>Extensions</comment>
</data>
<data name="S_RequiresEntityPrimaryKey" xml:space="preserve">
<value>fsql.InsertOrUpdate + IfExistsDoNothing + {providerName}要求实体类 {tableCsName} 必须有主键</value>
<comment>Providers</comment>
</data>
<data name="S_SelectManayErrorType" xml:space="preserve">
<value>SelectMany 错误的类型:{typeFullName}</value>
<comment>Extensions</comment>
</data>
<data name="S_SlaveDatabase" xml:space="preserve">
<value>从库</value>
<comment>Providers</comment>
</data>
<data name="S_Type_IsNot_Migrable" xml:space="preserve">
<value>类型 {objentityTypeFullName} 不可迁移</value>
<comment>Providers</comment>
</data>
<data name="S_Type_IsNot_Migrable_0Attributes" xml:space="preserve">
<value>类型 {objentityTypeFullName} 不可迁移可迁移属性0个</value>
<comment>Providers</comment>
</data>
<data name="S_TypeMappingNotImplemented" xml:space="preserve">
<value>未实现 {columnDbTypeTextFull} 类型映射</value>
<comment>Providers</comment>
</data>
<data name="S_WrongParameter" xml:space="preserve">
<value>错误的参数设置:{args}</value>
<comment>Extensions</comment>
</data>
<data name="Set_Column_IsNullable_False" xml:space="preserve"> <data name="Set_Column_IsNullable_False" xml:space="preserve">
<value>{qoteSql} is NULL除非设置特性 [Column(IsNullable = false)]</value> <value>{qoteSql} is NULL除非设置特性 [Column(IsNullable = false)]</value>
</data> </data>
@ -495,7 +635,4 @@
<data name="Use_InsertDict_Method" xml:space="preserve"> <data name="Use_InsertDict_Method" xml:space="preserve">
<value>请使用 fsql.InsertDict(dict) 方法插入字典数据</value> <value>请使用 fsql.InsertDict(dict) 方法插入字典数据</value>
</data> </data>
<data name="A" xml:space="preserve">
<value>Test</value>
</data>
</root> </root>

View File

@ -180,9 +180,12 @@ namespace <#= model.Namespace #>
result.Class = Path.GetFileNameWithoutExtension(resourceFile); result.Class = Path.GetFileNameWithoutExtension(resourceFile);
result.ResourceName = resourceNamespace + "." + result.Class; result.ResourceName = resourceNamespace + "." + result.Class;
if(File.Exists(resourceFile.Replace(".resx", ".zh-Hans.resx")))
{
resourceFile = resourceFile.Replace(".resx", ".zh-Hans.resx");
}
List<ResXDataNode> sortedResources; List<ResXDataNode> sortedResources;
using (var reader = new ResXResourceReader(resourceFile.Replace(".resx", ".zh-Hans.resx"))) using (var reader = new ResXResourceReader(resourceFile))
{ {
reader.UseResXDataNodes = true; reader.UseResXDataNodes = true;
sortedResources = Enumerable.ToList( sortedResources = Enumerable.ToList(

View File

@ -23,12 +23,12 @@ namespace FreeSql.ClickHouse
return; return;
} }
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new ClickHouseConnectionPool("主库", masterConnectionString, null, null); MasterPool = new ClickHouseConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
if (slaveConnectionStrings != null) if (slaveConnectionStrings != null)
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) foreach (var slaveConnectionString in slaveConnectionStrings)
{ {
var slavePool = new ClickHouseConnectionPool($"从库{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); var slavePool = new ClickHouseConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} }
} }

View File

@ -57,7 +57,7 @@ namespace FreeSql.ClickHouse
{ {
internal ClickHouseConnectionPool _pool; internal ClickHouseConnectionPool _pool;
public string Name { get; set; } = "ClickHouse ClickHouseConnection 对象池"; public string Name { get; set; } = $"ClickHouse ClickHouseConnection {CoreStrings.S_ObjectPool}";
public int PoolSize { get; set; } = 100; public int PoolSize { get; set; } = 100;
public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
@ -131,8 +131,8 @@ namespace FreeSql.ClickHouse
{ {
if (obj.Value == null) if (obj.Value == null)
{ {
_pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
} }
if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false) if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
@ -161,8 +161,8 @@ namespace FreeSql.ClickHouse
{ {
if (obj.Value == null) if (obj.Value == null)
{ {
_pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
} }
if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)

View File

@ -67,8 +67,8 @@ namespace FreeSql.ClickHouse
{ {
if (sb.Length > 0) sb.Append("\r\n"); if (sb.Length > 0) sb.Append("\r\n");
var tb = _commonUtils.GetTableByEntity(obj.entityType); var tb = _commonUtils.GetTableByEntity(obj.entityType);
if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移"); if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName));
if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移可迁移属性0个"); if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName));
var tbname = _commonUtils.SplitTableName(tb.DbName); var tbname = _commonUtils.SplitTableName(tb.DbName);
if (tbname?.Length == 1) tbname = new[] { database, tbname[0] }; if (tbname?.Length == 1) tbname = new[] { database, tbname[0] };

View File

@ -16,7 +16,7 @@ namespace FreeSql.ClickHouse.Curd
{ {
} }
public override List<T1> ExecuteDeleted() => throw new NotImplementedException("FreeSql.Provider.ClickHouse 未实现该功能"); public override List<T1> ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreStrings.S_Not_Implemented_Feature}");
public override string ToSql() public override string ToSql()
{ {
@ -25,7 +25,7 @@ namespace FreeSql.ClickHouse.Curd
#if net40 #if net40
#else #else
public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.ClickHouse 未实现该功能"); public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreStrings.S_Not_Implemented_Feature}");
#endif #endif
} }
} }

View File

@ -28,7 +28,7 @@ namespace FreeSql.ClickHouse.Curd
public override int ExecuteAffrows() => SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); public override int ExecuteAffrows() => SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000);
public override List<T1> ExecuteUpdated() => SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); public override List<T1> ExecuteUpdated() => SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000);
protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException("FreeSql.ClickHouse.Custom 未实现该功能 未实现该功能"); protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreStrings.S_Not_Implemented_Feature}");
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
{ {
if (primarys.Length == 1) if (primarys.Length == 1)
@ -293,7 +293,7 @@ namespace FreeSql.ClickHouse.Curd
#else #else
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken); public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken);
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken); public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken);
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.ClickHouse.Custom 未实现该功能 未实现该功能"); protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreStrings.S_Not_Implemented_Feature}");
async protected override Task<int> SplitExecuteAffrowsAsync(int valuesLimit, int parameterLimit, CancellationToken cancellationToken = default) async protected override Task<int> SplitExecuteAffrowsAsync(int valuesLimit, int parameterLimit, CancellationToken cancellationToken = default)

View File

@ -16,11 +16,11 @@ namespace FreeSql.Custom
{ {
} }
public override List<T1> ExecuteDeleted() => throw new NotImplementedException("FreeSql.Provider.Custom 未实现该功能"); public override List<T1> ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}");
#if net40 #if net40
#else #else
public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.Custom 未实现该功能"); public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}");
#endif #endif
} }
} }

View File

@ -62,7 +62,7 @@ namespace FreeSql.Custom
return ret; return ret;
} }
protected override List<T1> RawExecuteInserted() => throw new NotImplementedException("FreeSql.Provider.Custom 未实现该功能"); protected override List<T1> RawExecuteInserted() => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}");
#if net40 #if net40
#else #else
@ -107,7 +107,7 @@ namespace FreeSql.Custom
} }
return ret; return ret;
} }
protected override Task<List<T1>> RawExecuteInsertedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.Custom 未实现该功能"); protected override Task<List<T1>> RawExecuteInsertedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}");
#endif #endif
} }
} }

View File

@ -35,7 +35,7 @@ namespace FreeSql.Custom
if (_limit > 0 && _utils.Adapter.SelectTopStyle == CustomAdapter.SelecTopStyle.Top) sb.Append("TOP ").Append(_skip + _limit).Append(" "); if (_limit > 0 && _utils.Adapter.SelectTopStyle == CustomAdapter.SelecTopStyle.Top) sb.Append("TOP ").Append(_skip + _limit).Append(" ");
sb.Append(field); sb.Append(field);
if (_skip > 0 && _utils.Adapter.SelectTopStyle == CustomAdapter.SelecTopStyle.Top) if (_skip > 0 && _utils.Adapter.SelectTopStyle == CustomAdapter.SelecTopStyle.Top)
throw new NotImplementedException("FreeSql.Provider.Custom 未实现 Skip/Offset 功能,如果需要分页请使用判断上一次 id"); throw new NotImplementedException(CoreStrings.S_NotImplementSkipOffset("Custom"));
sb.Append(" \r\nFROM "); sb.Append(" \r\nFROM ");
var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray(); var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray();

View File

@ -23,7 +23,7 @@ namespace FreeSql.Custom
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255); public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255);
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255); public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255);
protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException("FreeSql.Provider.Custom 未实现该功能"); protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}");
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
{ {
@ -65,7 +65,7 @@ namespace FreeSql.Custom
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken); public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken);
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken); public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken);
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.Custom 未实现该功能"); protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}");
#endif #endif
} }
} }

View File

@ -23,7 +23,7 @@ namespace FreeSql.Custom
_CreateParameterCommand = CreateCommand(); _CreateParameterCommand = CreateCommand();
return; return;
} }
throw new Exception("FreeSql.Provider.CustomAdapter 仅支持 UseConnectionFactory 方式构建 IFreeSql"); throw new Exception(CoreStrings.S_CustomAdapter_OnlySuppport_UseConnectionFactory);
} }
CustomAdapter Adapter => (_util == null ? FreeSqlCustomAdapterGlobalExtensions.DefaultAdapter : _util._orm.GetCustomAdapter()); CustomAdapter Adapter => (_util == null ? FreeSqlCustomAdapterGlobalExtensions.DefaultAdapter : _util._orm.GetCustomAdapter());
@ -65,7 +65,7 @@ namespace FreeSql.Custom
cmd.Connection = null; cmd.Connection = null;
return cmd; return cmd;
} }
throw new Exception("FreeSql.Provider.CustomAdapter 无法使用 CreateCommand"); throw new Exception(CoreStrings.S_CustomAdapter_Cannot_Use_CreateCommand);
} }
public DbParameter CreateParameter() public DbParameter CreateParameter()
{ {

View File

@ -90,6 +90,6 @@ namespace FreeSql.Custom
return null; return null;
} }
protected override string GetComparisonDDLStatements(params TypeAndName[] objects) => throw new NotImplementedException("FreeSql.Provider.Custom 未实现该功能"); protected override string GetComparisonDDLStatements(params TypeAndName[] objects) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}");
} }
} }

View File

@ -18,9 +18,9 @@ namespace FreeSql.Custom
public override IInsert<T1> CreateInsertProvider<T1>() => new CustomInsert<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression); public override IInsert<T1> CreateInsertProvider<T1>() => new CustomInsert<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression);
public override IUpdate<T1> CreateUpdateProvider<T1>(object dywhere) => new CustomUpdate<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere); public override IUpdate<T1> CreateUpdateProvider<T1>(object dywhere) => new CustomUpdate<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere);
public override IDelete<T1> CreateDeleteProvider<T1>(object dywhere) => new CustomDelete<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere); public override IDelete<T1> CreateDeleteProvider<T1>(object dywhere) => new CustomDelete<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere);
public override IInsertOrUpdate<T1> CreateInsertOrUpdateProvider<T1>() => throw new NotImplementedException("FreeSql.Provider.Custom 未实现该功能"); public override IInsertOrUpdate<T1> CreateInsertOrUpdateProvider<T1>() => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}");
public override IDbFirst DbFirst => throw new NotImplementedException("FreeSql.Provider.Custom 未实现该功能"); public override IDbFirst DbFirst => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}");
public CustomProvider(string masterConnectionString, string[] slaveConnectionString, Func<DbConnection> connectionFactory = null) public CustomProvider(string masterConnectionString, string[] slaveConnectionString, Func<DbConnection> connectionFactory = null)
{ {

View File

@ -16,11 +16,11 @@ namespace FreeSql.Dameng.Curd
{ {
} }
public override List<T1> ExecuteDeleted() => throw new NotImplementedException("FreeSql.Provider.Dameng 未实现该功能"); public override List<T1> ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.Dameng {CoreStrings.S_Not_Implemented_Feature}");
#if net40 #if net40
#else #else
public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.Dameng 未实现该功能"); public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Dameng {CoreStrings.S_Not_Implemented_Feature}");
#endif #endif
} }
} }

View File

@ -21,7 +21,7 @@ namespace FreeSql.Dameng.Curd
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException("FreeSql.Provider.Dameng 未实现该功能"); protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Provider.Dameng {CoreStrings.S_Not_Implemented_Feature}");
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
{ {
@ -65,7 +65,7 @@ namespace FreeSql.Dameng.Curd
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.Dameng 未实现该功能"); protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Dameng {CoreStrings.S_Not_Implemented_Feature}");
#endif #endif
} }
} }

View File

@ -21,12 +21,12 @@ namespace FreeSql.Dameng
return; return;
} }
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new DamengConnectionPool("主库", masterConnectionString, null, null); MasterPool = new DamengConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
if (slaveConnectionStrings != null) if (slaveConnectionStrings != null)
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) foreach (var slaveConnectionString in slaveConnectionStrings)
{ {
var slavePool = new DamengConnectionPool($"从库{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); var slavePool = new DamengConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} }
} }

View File

@ -54,7 +54,7 @@ namespace FreeSql.Dameng
{ {
internal DamengConnectionPool _pool; internal DamengConnectionPool _pool;
public string Name { get; set; } = "Dameng DmConnection 对象池"; public string Name { get; set; } = $"Dameng DmConnection {CoreStrings.S_ObjectPool}";
public int PoolSize { get; set; } = 100; public int PoolSize { get; set; } = 100;
public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
@ -130,8 +130,8 @@ namespace FreeSql.Dameng
{ {
if (obj.Value == null) if (obj.Value == null)
{ {
_pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
} }
if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false) if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
@ -160,8 +160,8 @@ namespace FreeSql.Dameng
{ {
if (obj.Value == null) if (obj.Value == null)
{ {
_pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
} }
if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)

View File

@ -92,8 +92,8 @@ namespace FreeSql.Dameng
{ {
if (sb.Length > 0) sb.Append("\r\n"); if (sb.Length > 0) sb.Append("\r\n");
var tb = _commonUtils.GetTableByEntity(obj.entityType); var tb = _commonUtils.GetTableByEntity(obj.entityType);
if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移"); if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName));
if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移可迁移属性0个"); if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName));
var tbname = _commonUtils.SplitTableName(tb.DbName); var tbname = _commonUtils.SplitTableName(tb.DbName);
if (tbname?.Length == 1) tbname = new[] { userId, tbname[0] }; if (tbname?.Length == 1) tbname = new[] { userId, tbname[0] };
@ -114,7 +114,7 @@ namespace FreeSql.Dameng
//codefirst 不支持表名中带 . //codefirst 不支持表名中带 .
if (string.Compare(tbname[0], userId) != 0 && _orm.Ado.ExecuteScalar(CommandType.Text, _commonUtils.FormatSql(" select 1 from sys.dba_users where username={0}", tbname[0])) == null) //创建数据库 if (string.Compare(tbname[0], userId) != 0 && _orm.Ado.ExecuteScalar(CommandType.Text, _commonUtils.FormatSql(" select 1 from sys.dba_users where username={0}", tbname[0])) == null) //创建数据库
throw new NotImplementedException($"达梦 CodeFirst 不支持代码创建 tablespace 与 schemas {tbname[0]}"); throw new NotImplementedException(CoreStrings.S_Dameng_NotSupport_TablespaceSchemas(tbname[0]));
var sbalter = new StringBuilder(); var sbalter = new StringBuilder();
var istmpatler = false; //创建临时表,导入数据,删除旧表,修改 var istmpatler = false; //创建临时表,导入数据,删除旧表,修改

View File

@ -160,7 +160,7 @@ namespace FreeSql.Dameng
if (dbfull != null) _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]); if (dbfull != null) _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]);
return DmDbType.VarChar; return DmDbType.VarChar;
} }
throw new NotImplementedException($"未实现 {column.DbTypeTextFull} 类型映射"); throw new NotImplementedException(CoreStrings.S_TypeMappingNotImplemented(column.DbTypeTextFull));
} }
static ConcurrentDictionary<string, DbToCs> _dicDbToCs = new ConcurrentDictionary<string, DbToCs>(StringComparer.CurrentCultureIgnoreCase); static ConcurrentDictionary<string, DbToCs> _dicDbToCs = new ConcurrentDictionary<string, DbToCs>(StringComparer.CurrentCultureIgnoreCase);

View File

@ -29,7 +29,7 @@ public static partial class FreeSqlDamengGlobalExtensions
public static void ExecuteDmBulkCopy<T>(this IInsert<T> that, DmBulkCopyOptions copyOptions = DmBulkCopyOptions.Default, int? batchSize = null, int? bulkCopyTimeout = null) where T : class public static void ExecuteDmBulkCopy<T>(this IInsert<T> that, DmBulkCopyOptions copyOptions = DmBulkCopyOptions.Default, int? batchSize = null, int? bulkCopyTimeout = null) where T : class
{ {
var insert = that as FreeSql.Dameng.Curd.DamengInsert<T>; var insert = that as FreeSql.Dameng.Curd.DamengInsert<T>;
if (insert == null) throw new Exception("ExecuteDmBulkCopy 是 FreeSql.Provider.Dameng 特有的功能"); if (insert == null) throw new Exception(CoreStrings.S_Features_Unique("ExecuteDmBulkCopy", "Dameng"));
var dt = that.ToDataTable(); var dt = that.ToDataTable();
if (dt.Rows.Count == 0) return; if (dt.Rows.Count == 0) return;
@ -95,7 +95,7 @@ public static partial class FreeSqlDamengGlobalExtensions
} }
else else
{ {
throw new NotImplementedException("ExecuteDmBulkCopy 未实现错误,请反馈给作者"); throw new NotImplementedException($"ExecuteDmBulkCopy {CoreStrings.S_Not_Implemented_FeedBack}");
} }
} }
finally finally

View File

@ -25,12 +25,12 @@ namespace FreeSql.Firebird
return; return;
} }
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new FirebirdConnectionPool("主库", masterConnectionString, null, null); MasterPool = new FirebirdConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
if (slaveConnectionStrings != null) if (slaveConnectionStrings != null)
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) foreach (var slaveConnectionString in slaveConnectionStrings)
{ {
var slavePool = new FirebirdConnectionPool($"从库{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); var slavePool = new FirebirdConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} }
} }

View File

@ -45,7 +45,7 @@ namespace FreeSql.Firebird
{ {
internal FirebirdConnectionPool _pool; internal FirebirdConnectionPool _pool;
public string Name { get; set; } = "Firebird FbConnection 对象池"; public string Name { get; set; } = $"Firebird FbConnection {CoreStrings.S_ObjectPool}";
public int PoolSize { get; set; } = 100; public int PoolSize { get; set; } = 100;
public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
@ -121,8 +121,8 @@ namespace FreeSql.Firebird
{ {
if (obj.Value == null) if (obj.Value == null)
{ {
_pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
} }
if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false) if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
@ -151,8 +151,8 @@ namespace FreeSql.Firebird
{ {
if (obj.Value == null) if (obj.Value == null)
{ {
_pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
} }
if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)

View File

@ -89,8 +89,8 @@ namespace FreeSql.Firebird
{ {
if (sb.Length > 0) sb.Append("\r\n"); if (sb.Length > 0) sb.Append("\r\n");
var tb = _commonUtils.GetTableByEntity(obj.entityType); var tb = _commonUtils.GetTableByEntity(obj.entityType);
if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移"); if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName));
if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移可迁移属性0个"); if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName));
var tbname = tb.DbName; var tbname = tb.DbName;
var tboldname = tb.DbOldName; //旧表名 var tboldname = tb.DbOldName; //旧表名
if (string.IsNullOrEmpty(obj.tableName) == false) if (string.IsNullOrEmpty(obj.tableName) == false)

View File

@ -16,11 +16,11 @@ namespace FreeSql.GBase.Curd
{ {
} }
public override List<T1> ExecuteDeleted() => throw new NotImplementedException("FreeSql.Provider.GBase 未实现该功能"); public override List<T1> ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.GBase {CoreStrings.S_Not_Implemented_Feature}");
#if net40 #if net40
#else #else
public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.GBase 未实现该功能"); public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.GBase {CoreStrings.S_Not_Implemented_Feature}");
#endif #endif
} }
} }

View File

@ -28,7 +28,7 @@ namespace FreeSql.GBase.Curd
if (_source?.Count <= 1) return base.ToSqlValuesOrSelectUnionAll(); if (_source?.Count <= 1) return base.ToSqlValuesOrSelectUnionAll();
var sql = base.ToSqlValuesOrSelectUnionAllExtension102(false, null, (rowd, idx, sb) => sb.Append(" FROM dual")); var sql = base.ToSqlValuesOrSelectUnionAllExtension102(false, null, (rowd, idx, sb) => sb.Append(" FROM dual"));
var validx = sql.IndexOf(") SELECT "); var validx = sql.IndexOf(") SELECT ");
if (validx == -1) throw new ArgumentException("找不到 SELECT"); if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("SELECT"));
return new StringBuilder() return new StringBuilder()
.Insert(0, sql.Substring(0, validx + 1)) .Insert(0, sql.Substring(0, validx + 1))
.Append("\r\nSELECT * FROM (\r\n") .Append("\r\nSELECT * FROM (\r\n")

View File

@ -22,7 +22,7 @@ namespace FreeSql.GBase.Curd
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException("FreeSql.Provider.GBase 未实现该功能"); protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Provider.GBase {CoreStrings.S_Not_Implemented_Feature}");
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
{ {
@ -66,7 +66,7 @@ namespace FreeSql.GBase.Curd
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.GBase 未实现该功能"); protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.GBase {CoreStrings.S_Not_Implemented_Feature}");
#endif #endif
} }
} }

View File

@ -25,12 +25,12 @@ namespace FreeSql.GBase
return; return;
} }
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new GBaseConnectionPool("主库", masterConnectionString, null, null); MasterPool = new GBaseConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
if (slaveConnectionStrings != null) if (slaveConnectionStrings != null)
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) foreach (var slaveConnectionString in slaveConnectionStrings)
{ {
var slavePool = new GBaseConnectionPool($"从库{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); var slavePool = new GBaseConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} }
} }

View File

@ -45,7 +45,7 @@ namespace FreeSql.GBase
{ {
internal GBaseConnectionPool _pool; internal GBaseConnectionPool _pool;
public string Name { get; set; } = "GBase IfxConnection 对象池"; public string Name { get; set; } = $"GBase IfxConnection {CoreStrings.S_ObjectPool}";
public int PoolSize { get; set; } = 100; public int PoolSize { get; set; } = 100;
public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
@ -120,8 +120,8 @@ namespace FreeSql.GBase
{ {
if (obj.Value == null) if (obj.Value == null)
{ {
_pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
} }
if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false) if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
@ -150,8 +150,8 @@ namespace FreeSql.GBase
{ {
if (obj.Value == null) if (obj.Value == null)
{ {
_pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
} }
if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)

View File

@ -92,8 +92,8 @@ namespace FreeSql.GBase
{ {
if (sb.Length > 0) sb.Append("\r\n"); if (sb.Length > 0) sb.Append("\r\n");
var tb = _commonUtils.GetTableByEntity(obj.entityType); var tb = _commonUtils.GetTableByEntity(obj.entityType);
if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移"); if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName));
if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移可迁移属性0个"); if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName));
var tbname = _commonUtils.SplitTableName(tb.DbName); var tbname = _commonUtils.SplitTableName(tb.DbName);
if (tbname?.Length == 1) tbname = new[] { database, tbname[0] }; if (tbname?.Length == 1) tbname = new[] { database, tbname[0] };

View File

@ -24,7 +24,7 @@ namespace FreeSql.KingbaseES
public KingbaseESOnConflictDoUpdate(IInsert<T1> insert, Expression<Func<T1, object>> columns = null) public KingbaseESOnConflictDoUpdate(IInsert<T1> insert, Expression<Func<T1, object>> columns = null)
{ {
_insert = insert as KingbaseESInsert<T1>; _insert = insert as KingbaseESInsert<T1>;
if (_insert == null) throw new Exception("OnConflictDoUpdate 是 FreeSql.Provider.KingbaseES 特有的功能"); if (_insert == null) throw new Exception(CoreStrings.S_Features_Unique("OnConflictDoUpdate", "KingbaseES"));
if (_insert._noneParameterFlag == "c") _insert._noneParameterFlag = "cu"; if (_insert._noneParameterFlag == "c") _insert._noneParameterFlag = "cu";
if (columns != null) if (columns != null)
@ -38,7 +38,7 @@ namespace FreeSql.KingbaseES
} }
if (_columns == null || _columns.Any() == false) if (_columns == null || _columns.Any() == false)
_columns = _insert.InternalTable.Primarys; _columns = _insert.InternalTable.Primarys;
if (_columns.Any() == false) throw new Exception("OnConflictDoUpdate 功能要求实体类必须设置 IsPrimary 属性"); if (_columns.Any() == false) throw new Exception(CoreStrings.S_OnConflictDoUpdate_MustIsPrimary);
} }
protected void ClearData() protected void ClearData()

View File

@ -23,12 +23,12 @@ namespace FreeSql.KingbaseES
return; return;
} }
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new KingbaseESConnectionPool("主库", masterConnectionString, null, null); MasterPool = new KingbaseESConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
if (slaveConnectionStrings != null) if (slaveConnectionStrings != null)
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) foreach (var slaveConnectionString in slaveConnectionStrings)
{ {
var slavePool = new KingbaseESConnectionPool($"从库{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); var slavePool = new KingbaseESConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} }
} }

View File

@ -56,7 +56,7 @@ namespace FreeSql.KingbaseES
{ {
internal KingbaseESConnectionPool _pool; internal KingbaseESConnectionPool _pool;
public string Name { get; set; } = "KingbaseES KdbndpConnection 对象池"; public string Name { get; set; } = $"KingbaseES KdbndpConnection {CoreStrings.S_ObjectPool}";
public int PoolSize { get; set; } = 100; public int PoolSize { get; set; } = 100;
public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
@ -131,8 +131,8 @@ namespace FreeSql.KingbaseES
{ {
if (obj.Value == null) if (obj.Value == null)
{ {
_pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
} }
if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false) if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
@ -161,8 +161,8 @@ namespace FreeSql.KingbaseES
{ {
if (obj.Value == null) if (obj.Value == null)
{ {
_pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
} }
if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)

View File

@ -79,8 +79,8 @@ namespace FreeSql.KingbaseES
{ {
if (sb.Length > 0) sb.Append("\r\n"); if (sb.Length > 0) sb.Append("\r\n");
var tb = _commonUtils.GetTableByEntity(obj.entityType); var tb = _commonUtils.GetTableByEntity(obj.entityType);
if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移"); if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName));
if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移可迁移属性0个"); if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName));
var tbname = _commonUtils.SplitTableName(tb.DbName); var tbname = _commonUtils.SplitTableName(tb.DbName);
if (tbname?.Length == 1) tbname = new[] { "PUBLIC", tbname[0] }; if (tbname?.Length == 1) tbname = new[] { "PUBLIC", tbname[0] };

View File

@ -16,11 +16,11 @@ namespace FreeSql.MsAccess.Curd
{ {
} }
public override List<T1> ExecuteDeleted() => throw new NotImplementedException("FreeSql.Provider.MsAccess 未实现该功能"); public override List<T1> ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.MsAccess {CoreStrings.S_Not_Implemented_Feature}");
#if net40 #if net40
#else #else
public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.MsAccess 未实现该功能"); public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.MsAccess {CoreStrings.S_Not_Implemented_Feature}");
#endif #endif
} }
} }

View File

@ -26,7 +26,7 @@ namespace FreeSql.MsAccess.Curd
public override List<T1> ExecuteInserted() => base.SplitExecuteInserted(1, 1000); public override List<T1> ExecuteInserted() => base.SplitExecuteInserted(1, 1000);
public override IInsert<T1> BatchOptions(int valuesLimit, int parameterLimit, bool autoTransaction = true) => public override IInsert<T1> BatchOptions(int valuesLimit, int parameterLimit, bool autoTransaction = true) =>
throw new NotImplementedException("蛋疼的 access 插入只能一条一条执行,不支持 values(..),(..) 也不支持 select .. UNION ALL select .."); throw new NotImplementedException(CoreStrings.S_Access_InsertOnlyOneAtTime);
protected override int RawExecuteAffrows() protected override int RawExecuteAffrows()
{ {

View File

@ -36,7 +36,7 @@ namespace FreeSql.MsAccess.Curd
if (_limit > 0) sb.Append("TOP ").Append(_skip + _limit).Append(" "); if (_limit > 0) sb.Append("TOP ").Append(_skip + _limit).Append(" ");
sb.Append(field); sb.Append(field);
if (_skip > 0) if (_skip > 0)
throw new NotImplementedException("FreeSql.Provider.MsAccess 未实现 Skip/Offset 功能,如果需要分页请使用判断上一次 id"); throw new NotImplementedException(CoreStrings.S_NotImplementSkipOffset("MsAccess"));
sb.Append(" \r\nFROM "); sb.Append(" \r\nFROM ");
var fromIndex = sb.Length; var fromIndex = sb.Length;
var ioinCounter = 0; var ioinCounter = 0;

View File

@ -25,9 +25,9 @@ namespace FreeSql.MsAccess.Curd
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(1, 1000); public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(1, 1000);
public override IUpdate<T1> BatchOptions(int rowsLimit, int parameterLimit, bool autoTransaction = true) => public override IUpdate<T1> BatchOptions(int rowsLimit, int parameterLimit, bool autoTransaction = true) =>
throw new NotImplementedException("蛋疼的 access 插入只能一条一条执行,不支持 values(..),(..) 也不支持 select .. UNION ALL select .."); throw new NotImplementedException(CoreStrings.S_Access_InsertOnlyOneAtTime);
protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException("FreeSql.Provider.MsAccess 未实现该功能"); protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Provider.MsAccess {CoreStrings.S_Not_Implemented_Feature}");
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
{ {
@ -69,7 +69,7 @@ namespace FreeSql.MsAccess.Curd
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(1, 1000, cancellationToken); public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(1, 1000, cancellationToken);
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(1, 1000, cancellationToken); public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(1, 1000, cancellationToken);
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.MsAccess 未实现该功能"); protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.MsAccess {CoreStrings.S_Not_Implemented_Feature}");
#endif #endif
} }
} }

View File

@ -23,12 +23,12 @@ namespace FreeSql.MsAccess
return; return;
} }
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new MsAccessConnectionPool("主库", masterConnectionString, null, null); MasterPool = new MsAccessConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
if (slaveConnectionStrings != null) if (slaveConnectionStrings != null)
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) foreach (var slaveConnectionString in slaveConnectionStrings)
{ {
var slavePool = new MsAccessConnectionPool($"从库{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); var slavePool = new MsAccessConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} }
} }

View File

@ -45,7 +45,7 @@ namespace FreeSql.MsAccess
{ {
internal MsAccessConnectionPool _pool; internal MsAccessConnectionPool _pool;
public string Name { get; set; } = "Microsoft Access OleDbConnection 对象池"; public string Name { get; set; } = $"Microsoft Access OleDbConnection {CoreStrings.S_ObjectPool}";
public int PoolSize { get; set; } = 100; public int PoolSize { get; set; } = 100;
public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(30); public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(30);
public TimeSpan IdleTimeout { get; set; } = TimeSpan.Zero; public TimeSpan IdleTimeout { get; set; } = TimeSpan.Zero;
@ -120,8 +120,8 @@ namespace FreeSql.MsAccess
if (obj.Value == null) if (obj.Value == null)
{ {
_pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
} }
if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false) if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
@ -151,8 +151,8 @@ namespace FreeSql.MsAccess
if (obj.Value == null) if (obj.Value == null)
{ {
_pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
} }
if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)

View File

@ -80,8 +80,8 @@ namespace FreeSql.MsAccess
{ {
if (sb.Length > 0) sb.Append("\r\n"); if (sb.Length > 0) sb.Append("\r\n");
var tb = _commonUtils.GetTableByEntity(obj.entityType); var tb = _commonUtils.GetTableByEntity(obj.entityType);
if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移"); if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName));
if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移可迁移属性0个"); if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName));
var tbname = tb.DbName; var tbname = tb.DbName;
var tboldname = tb.DbOldName; //旧表名 var tboldname = tb.DbOldName; //旧表名
if (string.Compare(tbname, tboldname, true) == 0) tboldname = null; if (string.Compare(tbname, tboldname, true) == 0) tboldname = null;
@ -177,7 +177,7 @@ namespace FreeSql.MsAccess
istmpatler = true; istmpatler = true;
} }
if (tboldname != null && isexistsTb == true) if (tboldname != null && isexistsTb == true)
throw new Exception($"旧表(OldName){tboldname} 存在,数据库已存在 {tbname} 表,无法改名"); throw new Exception(CoreStrings.S_OldTableExists(tboldname, tbname));
DataTable schemaColumns = null; DataTable schemaColumns = null;
DataTable schemaDataTypes = null; DataTable schemaDataTypes = null;
@ -394,7 +394,8 @@ namespace FreeSql.MsAccess
} }
Dictionary<string, bool> dicDropTable = new Dictionary<string, bool>(StringComparer.OrdinalIgnoreCase); Dictionary<string, bool> dicDropTable = new Dictionary<string, bool>(StringComparer.OrdinalIgnoreCase);
Action<string> dropTable = tn => { Action<string> dropTable = tn =>
{
if (dicDropTable.ContainsKey(tn)) return; if (dicDropTable.ContainsKey(tn)) return;
dicDropTable.Add(tn, true); dicDropTable.Add(tn, true);
sb.Append("DROP TABLE ").Append(_commonUtils.QuoteSqlName(tn)).Append(";\r\n"); sb.Append("DROP TABLE ").Append(_commonUtils.QuoteSqlName(tn)).Append(";\r\n");

View File

@ -15,7 +15,7 @@ namespace FreeSql.MsAccess
public override IDelete<T1> CreateDeleteProvider<T1>(object dywhere) => new MsAccessDelete<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere); public override IDelete<T1> CreateDeleteProvider<T1>(object dywhere) => new MsAccessDelete<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere);
public override IInsertOrUpdate<T1> CreateInsertOrUpdateProvider<T1>() => throw new NotImplementedException(); public override IInsertOrUpdate<T1> CreateInsertOrUpdateProvider<T1>() => throw new NotImplementedException();
public override IDbFirst DbFirst => throw new NotImplementedException("FreeSql.Provider.MsAccess 未实现该功能"); public override IDbFirst DbFirst => throw new NotImplementedException($"FreeSql.Provider.MsAccess {CoreStrings.S_Not_Implemented_Feature}");
public MsAccessProvider(string masterConnectionString, string[] slaveConnectionString, Func<DbConnection> connectionFactory = null) public MsAccessProvider(string masterConnectionString, string[] slaveConnectionString, Func<DbConnection> connectionFactory = null)
{ {
this.InternalCommonUtils = new MsAccessUtils(this); this.InternalCommonUtils = new MsAccessUtils(this);

View File

@ -54,7 +54,7 @@ namespace FreeSql.MySql.Curd
} }
else else
{ {
if (_table.Primarys.Any() == false) throw new Exception($"fsql.InsertOrUpdate + IfExistsDoNothing + MySql 要求实体类 {_table.CsName} 必须有主键"); if (_table.Primarys.Any() == false) throw new Exception(CoreStrings.Entity_Must_Primary_Key("fsql.InsertOrUpdate + IfExistsDoNothing + MySql ", _table.CsName));
sql = insert.ToSqlValuesOrSelectUnionAllExtension101(false, (rowd, idx, sb) => sql = insert.ToSqlValuesOrSelectUnionAllExtension101(false, (rowd, idx, sb) =>
sb.Append(" \r\n FROM dual WHERE NOT EXISTS(").Append( sb.Append(" \r\n FROM dual WHERE NOT EXISTS(").Append(
_orm.Select<T1>() _orm.Select<T1>()

View File

@ -17,7 +17,7 @@ namespace FreeSql.MySql.Curd
public OnDuplicateKeyUpdate(IInsert<T1> insert) public OnDuplicateKeyUpdate(IInsert<T1> insert)
{ {
_mysqlInsert = insert as MySqlInsert<T1>; _mysqlInsert = insert as MySqlInsert<T1>;
if (_mysqlInsert == null) throw new Exception("OnDuplicateKeyUpdate 是 FreeSql.Provider.MySql/FreeSql.Provider.MySqlConnector 特有的功能"); if (_mysqlInsert == null) throw new Exception(CoreStrings.S_Features_Unique("OnDuplicateKeyUpdate", "MySql/FreeSql.Provider.MySqlConnector"));
if (_mysqlInsert._noneParameterFlag == "c") _mysqlInsert._noneParameterFlag = "cu"; if (_mysqlInsert._noneParameterFlag == "c") _mysqlInsert._noneParameterFlag = "cu";
} }

View File

@ -27,12 +27,12 @@ namespace FreeSql.MySql
return; return;
} }
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new MySqlConnectionPool("主库", masterConnectionString, null, null); MasterPool = new MySqlConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
if (slaveConnectionStrings != null) if (slaveConnectionStrings != null)
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) foreach (var slaveConnectionString in slaveConnectionStrings)
{ {
var slavePool = new MySqlConnectionPool($"从库{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); var slavePool = new MySqlConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} }
} }

View File

@ -49,7 +49,7 @@ namespace FreeSql.MySql
{ {
internal MySqlConnectionPool _pool; internal MySqlConnectionPool _pool;
public string Name { get; set; } = "MySql MySqlConnection 对象池"; public string Name { get; set; } = $"MySql MySqlConnection {CoreStrings.S_ObjectPool}";
public int PoolSize { get; set; } = 100; public int PoolSize { get; set; } = 100;
public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
@ -125,8 +125,8 @@ namespace FreeSql.MySql
{ {
if (obj.Value == null) if (obj.Value == null)
{ {
_pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
} }
if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false) if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
@ -155,8 +155,8 @@ namespace FreeSql.MySql
{ {
if (obj.Value == null) if (obj.Value == null)
{ {
_pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
} }
if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)

View File

@ -3,6 +3,7 @@ using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using FreeSql;
public struct MygisCoordinate2D : IEquatable<MygisCoordinate2D> public struct MygisCoordinate2D : IEquatable<MygisCoordinate2D>
{ {
@ -71,7 +72,7 @@ public abstract class MygisGeometry
else if (wkt.StartsWith("multipoint", StringComparison.CurrentCultureIgnoreCase)) return new MygisMultiPoint(ParseLineString(wkt.Substring(10).Trim('(', ')'))); else if (wkt.StartsWith("multipoint", StringComparison.CurrentCultureIgnoreCase)) return new MygisMultiPoint(ParseLineString(wkt.Substring(10).Trim('(', ')')));
else if (wkt.StartsWith("multilinestring", StringComparison.CurrentCultureIgnoreCase)) return new MygisMultiLineString(ParseMultiLineString(wkt.Substring(15).Trim('(', ')'))); else if (wkt.StartsWith("multilinestring", StringComparison.CurrentCultureIgnoreCase)) return new MygisMultiLineString(ParseMultiLineString(wkt.Substring(15).Trim('(', ')')));
else if (wkt.StartsWith("multipolygon", StringComparison.CurrentCultureIgnoreCase)) return new MygisMultiPolygon(ParseMultiPolygon(wkt.Substring(12).Trim('(', ')'))); else if (wkt.StartsWith("multipolygon", StringComparison.CurrentCultureIgnoreCase)) return new MygisMultiPolygon(ParseMultiPolygon(wkt.Substring(12).Trim('(', ')')));
throw new NotImplementedException($"MygisGeometry.Parse 未实现 \"{wkt}\""); throw new NotImplementedException(CoreStrings.S_MygisGeometry_NotImplement(wkt));
} }
static MygisPoint ParsePoint(string str) static MygisPoint ParsePoint(string str)
{ {

View File

@ -101,8 +101,8 @@ namespace FreeSql.MySql
{ {
if (sb.Length > 0) sb.Append("\r\n"); if (sb.Length > 0) sb.Append("\r\n");
var tb = _commonUtils.GetTableByEntity(obj.entityType); var tb = _commonUtils.GetTableByEntity(obj.entityType);
if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移"); if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName));
if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移可迁移属性0个"); if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName));
var tbname = _commonUtils.SplitTableName(tb.DbName); var tbname = _commonUtils.SplitTableName(tb.DbName);
if (tbname?.Length == 1) tbname = new[] { database, tbname[0] }; if (tbname?.Length == 1) tbname = new[] { database, tbname[0] };

View File

@ -32,7 +32,7 @@ public static partial class FreeSqlMySqlGlobalExtensions
public static IInsert<T1> MySqlIgnoreInto<T1>(this IInsert<T1> that) where T1 : class public static IInsert<T1> MySqlIgnoreInto<T1>(this IInsert<T1> that) where T1 : class
{ {
var _mysqlInsert = that as MySqlInsert<T1>; var _mysqlInsert = that as MySqlInsert<T1>;
if (_mysqlInsert == null) throw new Exception("MySqlIgnoreInto 是 FreeSql.Provider.MySql/FreeSql.Provider.MySqlConnector 特有的功能"); if (_mysqlInsert == null) throw new Exception(CoreStrings.S_Features_Unique("MySqlIgnoreInto", "MySql/FreeSql.Provider.MySqlConnector"));
_mysqlInsert.InternalIsIgnoreInto = true; _mysqlInsert.InternalIsIgnoreInto = true;
return that; return that;
} }

View File

@ -34,7 +34,7 @@ public static class FreeSqlMySqlConnectorGlobalExtensions
public static void ExecuteMySqlBulkCopy<T>(this IInsert<T> that, int? bulkCopyTimeout = null) where T : class public static void ExecuteMySqlBulkCopy<T>(this IInsert<T> that, int? bulkCopyTimeout = null) where T : class
{ {
var insert = that as FreeSql.MySql.Curd.MySqlInsert<T>; var insert = that as FreeSql.MySql.Curd.MySqlInsert<T>;
if (insert == null) throw new Exception("ExecuteMySqlBulkCopy 是 FreeSql.Provider.MySqlConnector 特有的功能"); if (insert == null) throw new Exception(CoreStrings.S_Features_Unique("ExecuteMySqlBulkCopy", "MySqlConnector"));
var dt = that.ToDataTable(); var dt = that.ToDataTable();
if (dt.Rows.Count == 0) return; if (dt.Rows.Count == 0) return;
@ -81,7 +81,7 @@ public static class FreeSqlMySqlConnectorGlobalExtensions
} }
else else
{ {
throw new NotImplementedException("ExecuteMySqlBulkCopy 未实现错误,请反馈给作者"); throw new NotImplementedException($"ExecuteMySqlBulkCopy {CoreStrings.S_Not_Implemented_FeedBack}");
} }
} }
finally finally
@ -94,7 +94,7 @@ public static class FreeSqlMySqlConnectorGlobalExtensions
async public static Task ExecuteMySqlBulkCopyAsync<T>(this IInsert<T> that, int? bulkCopyTimeout = null, CancellationToken cancellationToken = default) where T : class async public static Task ExecuteMySqlBulkCopyAsync<T>(this IInsert<T> that, int? bulkCopyTimeout = null, CancellationToken cancellationToken = default) where T : class
{ {
var insert = that as FreeSql.MySql.Curd.MySqlInsert<T>; var insert = that as FreeSql.MySql.Curd.MySqlInsert<T>;
if (insert == null) throw new Exception("ExecuteMySqlBulkCopyAsync 是 FreeSql.Provider.MySqlConnector 特有的功能"); if (insert == null) throw new Exception(CoreStrings.S_Features_Unique("ExecuteMySqlBulkCopyAsync", "MySqlConnector"));
var dt = that.ToDataTable(); var dt = that.ToDataTable();
if (dt.Rows.Count == 0) return; if (dt.Rows.Count == 0) return;
@ -141,7 +141,7 @@ public static class FreeSqlMySqlConnectorGlobalExtensions
} }
else else
{ {
throw new NotImplementedException("ExecuteMySqlBulkCopyAsync 未实现错误,请反馈给作者"); throw new NotImplementedException($"ExecuteMySqlBulkCopyAsync {CoreStrings.S_Not_Implemented_FeedBack}");
} }
} }
finally finally

View File

@ -16,11 +16,11 @@ namespace FreeSql.Odbc.Dameng
{ {
} }
public override List<T1> ExecuteDeleted() => throw new NotImplementedException("FreeSql.Odbc.Dameng 未实现该功能"); public override List<T1> ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Odbc.Dameng {CoreStrings.S_Not_Implemented_Feature}");
#if net40 #if net40
#else #else
public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Odbc.Dameng 未实现该功能"); public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Dameng {CoreStrings.S_Not_Implemented_Feature}");
#endif #endif
} }
} }

View File

@ -22,7 +22,7 @@ namespace FreeSql.Odbc.Dameng
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException("FreeSql.Odbc.Dameng 未实现该功能"); protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Odbc.Dameng {CoreStrings.S_Not_Implemented_Feature}");
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
{ {
@ -66,7 +66,7 @@ namespace FreeSql.Odbc.Dameng
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Odbc.Dameng 未实现该功能"); protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Dameng {CoreStrings.S_Not_Implemented_Feature}");
#endif #endif
} }
} }

View File

@ -22,12 +22,12 @@ namespace FreeSql.Odbc.Dameng
return; return;
} }
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new OdbcDamengConnectionPool("主库", masterConnectionString, null, null); MasterPool = new OdbcDamengConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
if (slaveConnectionStrings != null) if (slaveConnectionStrings != null)
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) foreach (var slaveConnectionString in slaveConnectionStrings)
{ {
var slavePool = new OdbcDamengConnectionPool($"从库{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); var slavePool = new OdbcDamengConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} }
} }

View File

@ -56,7 +56,7 @@ namespace FreeSql.Odbc.Dameng
{ {
internal OdbcDamengConnectionPool _pool; internal OdbcDamengConnectionPool _pool;
public string Name { get; set; } = "Dameng OdbcConnection 对象池"; public string Name { get; set; } = $"Dameng OdbcConnection {CoreStrings.S_ObjectPool}";
public int PoolSize { get; set; } = 100; public int PoolSize { get; set; } = 100;
public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
@ -131,8 +131,8 @@ namespace FreeSql.Odbc.Dameng
{ {
if (obj.Value == null) if (obj.Value == null)
{ {
_pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
} }
if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false) if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
@ -161,8 +161,8 @@ namespace FreeSql.Odbc.Dameng
{ {
if (obj.Value == null) if (obj.Value == null)
{ {
_pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
} }
if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)

View File

@ -93,8 +93,8 @@ namespace FreeSql.Odbc.Dameng
{ {
if (sb.Length > 0) sb.Append("\r\n"); if (sb.Length > 0) sb.Append("\r\n");
var tb = _commonUtils.GetTableByEntity(obj.entityType); var tb = _commonUtils.GetTableByEntity(obj.entityType);
if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移"); if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName));
if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移可迁移属性0个"); if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName));
var tbname = _commonUtils.SplitTableName(tb.DbName); var tbname = _commonUtils.SplitTableName(tb.DbName);
if (tbname?.Length == 1) tbname = new[] { userId, tbname[0] }; if (tbname?.Length == 1) tbname = new[] { userId, tbname[0] };
@ -115,7 +115,7 @@ namespace FreeSql.Odbc.Dameng
//codefirst 不支持表名中带 . //codefirst 不支持表名中带 .
if (string.Compare(tbname[0], userId) != 0 && _orm.Ado.ExecuteScalar(CommandType.Text, _commonUtils.FormatSql(" select 1 from sys.dba_users where username={0}", tbname[0])) == null) //创建数据库 if (string.Compare(tbname[0], userId) != 0 && _orm.Ado.ExecuteScalar(CommandType.Text, _commonUtils.FormatSql(" select 1 from sys.dba_users where username={0}", tbname[0])) == null) //创建数据库
throw new NotImplementedException($"达梦 CodeFirst 不支持代码创建 tablespace 与 schemas {tbname[0]}"); throw new NotImplementedException(CoreStrings.S_Dameng_NotSupport_TablespaceSchemas(tbname[0]));
var sbalter = new StringBuilder(); var sbalter = new StringBuilder();
var istmpatler = false; //创建临时表,导入数据,删除旧表,修改 var istmpatler = false; //创建临时表,导入数据,删除旧表,修改

View File

@ -160,7 +160,7 @@ namespace FreeSql.Odbc.Dameng
if (dbfull != null) _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]); if (dbfull != null) _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]);
return OdbcType.NVarChar; return OdbcType.NVarChar;
} }
throw new NotImplementedException($"未实现 {column.DbTypeTextFull} 类型映射"); throw new NotImplementedException(CoreStrings.S_TypeMappingNotImplemented(column.DbTypeTextFull));
} }
static ConcurrentDictionary<string, DbToCs> _dicDbToCs = new ConcurrentDictionary<string, DbToCs>(StringComparer.CurrentCultureIgnoreCase); static ConcurrentDictionary<string, DbToCs> _dicDbToCs = new ConcurrentDictionary<string, DbToCs>(StringComparer.CurrentCultureIgnoreCase);

View File

@ -16,11 +16,11 @@ namespace FreeSql.Odbc.Default
{ {
} }
public override List<T1> ExecuteDeleted() => throw new NotImplementedException("FreeSql.Odbc.Default 未实现该功能"); public override List<T1> ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreStrings.S_Not_Implemented_Feature}");
#if net40 #if net40
#else #else
public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Odbc.Default 未实现该功能"); public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreStrings.S_Not_Implemented_Feature}");
#endif #endif
} }
} }

View File

@ -62,7 +62,7 @@ namespace FreeSql.Odbc.Default
return ret; return ret;
} }
protected override List<T1> RawExecuteInserted() => throw new NotImplementedException("FreeSql.Odbc.Default 未实现该功能"); protected override List<T1> RawExecuteInserted() => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreStrings.S_Not_Implemented_Feature}");
#if net40 #if net40
#else #else
@ -107,7 +107,7 @@ namespace FreeSql.Odbc.Default
} }
return ret; return ret;
} }
protected override Task<List<T1>> RawExecuteInsertedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Odbc.Default 未实现该功能"); protected override Task<List<T1>> RawExecuteInsertedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreStrings.S_Not_Implemented_Feature}");
#endif #endif
} }
} }

View File

@ -35,7 +35,7 @@ namespace FreeSql.Odbc.Default
if (_limit > 0 && _utils.Adapter.SelectTopStyle == OdbcAdapter.SelecTopStyle.Top) sb.Append("TOP ").Append(_skip + _limit).Append(" "); if (_limit > 0 && _utils.Adapter.SelectTopStyle == OdbcAdapter.SelecTopStyle.Top) sb.Append("TOP ").Append(_skip + _limit).Append(" ");
sb.Append(field); sb.Append(field);
if (_skip > 0 && _utils.Adapter.SelectTopStyle == OdbcAdapter.SelecTopStyle.Top) if (_skip > 0 && _utils.Adapter.SelectTopStyle == OdbcAdapter.SelecTopStyle.Top)
throw new NotImplementedException("FreeSql.Odbc.Default 未实现 Skip/Offset 功能,如果需要分页请使用判断上一次 id"); throw new NotImplementedException(CoreStrings.S_NotImplementSkipOffset("Default"));
sb.Append(" \r\nFROM "); sb.Append(" \r\nFROM ");
var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray(); var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray();

View File

@ -23,7 +23,7 @@ namespace FreeSql.Odbc.Default
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255); public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255);
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255); public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255);
protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException("FreeSql.Odbc.Default 未实现该功能"); protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreStrings.S_Not_Implemented_Feature}");
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
{ {
@ -65,7 +65,7 @@ namespace FreeSql.Odbc.Default
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken); public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken);
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken); public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken);
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Odbc.Default 未实现该功能"); protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreStrings.S_Not_Implemented_Feature}");
#endif #endif
} }
} }

View File

@ -22,12 +22,12 @@ namespace FreeSql.Odbc.Default
return; return;
} }
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new OdbcConnectionPool("主库", masterConnectionString, null, null); MasterPool = new OdbcConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
if (slaveConnectionStrings != null) if (slaveConnectionStrings != null)
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) foreach (var slaveConnectionString in slaveConnectionStrings)
{ {
var slavePool = new OdbcConnectionPool($"从库{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); var slavePool = new OdbcConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} }
} }

View File

@ -45,7 +45,7 @@ namespace FreeSql.Odbc.Default
{ {
internal OdbcConnectionPool _pool; internal OdbcConnectionPool _pool;
public string Name { get; set; } = "Default OdbcConnection 对象池"; public string Name { get; set; } = $"Default OdbcConnection {CoreStrings.S_ObjectPool}";
public int PoolSize { get; set; } = 100; public int PoolSize { get; set; } = 100;
public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
@ -121,8 +121,8 @@ namespace FreeSql.Odbc.Default
if (obj.Value == null) if (obj.Value == null)
{ {
_pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
} }
if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false) if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
@ -152,8 +152,8 @@ namespace FreeSql.Odbc.Default
if (obj.Value == null) if (obj.Value == null)
{ {
_pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
} }
if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)

View File

@ -90,6 +90,6 @@ namespace FreeSql.Odbc.Default
return null; return null;
} }
protected override string GetComparisonDDLStatements(params TypeAndName[] objects) => throw new NotImplementedException("FreeSql.Odbc.Default 未实现该功能"); protected override string GetComparisonDDLStatements(params TypeAndName[] objects) => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreStrings.S_Not_Implemented_Feature}");
} }
} }

View File

@ -20,7 +20,7 @@ namespace FreeSql.Odbc.Default
public override IDelete<T1> CreateDeleteProvider<T1>(object dywhere) => new OdbcDelete<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere); public override IDelete<T1> CreateDeleteProvider<T1>(object dywhere) => new OdbcDelete<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere);
public override IInsertOrUpdate<T1> CreateInsertOrUpdateProvider<T1>() => throw new NotImplementedException(); public override IInsertOrUpdate<T1> CreateInsertOrUpdateProvider<T1>() => throw new NotImplementedException();
public override IDbFirst DbFirst => throw new NotImplementedException("FreeSql.Odbc.Default 未实现该功能"); public override IDbFirst DbFirst => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreStrings.S_Not_Implemented_Feature}");
/// <summary> /// <summary>
/// 生成一个普通访问功能的 IFreeSql 对象,用来访问 odbc /// 生成一个普通访问功能的 IFreeSql 对象,用来访问 odbc

View File

@ -24,7 +24,7 @@ namespace FreeSql.Odbc.KingbaseES
public OdbcKingbaseESOnConflictDoUpdate(IInsert<T1> insert, Expression<Func<T1, object>> columns = null) public OdbcKingbaseESOnConflictDoUpdate(IInsert<T1> insert, Expression<Func<T1, object>> columns = null)
{ {
_pgsqlInsert = insert as OdbcKingbaseESInsert<T1>; _pgsqlInsert = insert as OdbcKingbaseESInsert<T1>;
if (_pgsqlInsert == null) throw new Exception("OnConflictDoUpdate 是 FreeSql.Provider.Odbc/KingbaseES 特有的功能"); if (_pgsqlInsert == null) throw new Exception(CoreStrings.S_Features_Unique("OnConflictDoUpdate", "Odbc/KingbaseES"));
if (_pgsqlInsert._noneParameterFlag == "c") _pgsqlInsert._noneParameterFlag = "cu"; if (_pgsqlInsert._noneParameterFlag == "c") _pgsqlInsert._noneParameterFlag = "cu";
if (columns != null) if (columns != null)
@ -38,7 +38,7 @@ namespace FreeSql.Odbc.KingbaseES
} }
if (_columns == null || _columns.Any() == false) if (_columns == null || _columns.Any() == false)
_columns = _pgsqlInsert.InternalTable.Primarys; _columns = _pgsqlInsert.InternalTable.Primarys;
if (_columns.Any() == false) throw new Exception("OnConflictDoUpdate 功能要求实体类必须设置 IsPrimary 属性"); if (_columns.Any() == false) throw new Exception(CoreStrings.S_OnConflictDoUpdate_MustIsPrimary);
} }
protected void ClearData() protected void ClearData()

View File

@ -23,12 +23,12 @@ namespace FreeSql.Odbc.KingbaseES
return; return;
} }
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new OdbcKingbaseESConnectionPool("主库", masterConnectionString, null, null); MasterPool = new OdbcKingbaseESConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
if (slaveConnectionStrings != null) if (slaveConnectionStrings != null)
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) foreach (var slaveConnectionString in slaveConnectionStrings)
{ {
var slavePool = new OdbcKingbaseESConnectionPool($"从库{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); var slavePool = new OdbcKingbaseESConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} }
} }

View File

@ -56,7 +56,7 @@ namespace FreeSql.Odbc.KingbaseES
{ {
internal OdbcKingbaseESConnectionPool _pool; internal OdbcKingbaseESConnectionPool _pool;
public string Name { get; set; } = "KingbaseES OdbcConnection 对象池"; public string Name { get; set; } = $"KingbaseES OdbcConnection {CoreStrings.S_ObjectPool}";
public int PoolSize { get; set; } = 100; public int PoolSize { get; set; } = 100;
public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
@ -131,8 +131,8 @@ namespace FreeSql.Odbc.KingbaseES
{ {
if (obj.Value == null) if (obj.Value == null)
{ {
_pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
} }
if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false) if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
@ -161,8 +161,8 @@ namespace FreeSql.Odbc.KingbaseES
{ {
if (obj.Value == null) if (obj.Value == null)
{ {
_pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
} }
if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)

View File

@ -83,8 +83,8 @@ namespace FreeSql.Odbc.KingbaseES
{ {
if (sb.Length > 0) sb.Append("\r\n"); if (sb.Length > 0) sb.Append("\r\n");
var tb = _commonUtils.GetTableByEntity(obj.entityType); var tb = _commonUtils.GetTableByEntity(obj.entityType);
if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移"); if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName));
if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移可迁移属性0个"); if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName));
var tbname = _commonUtils.SplitTableName(tb.DbName); var tbname = _commonUtils.SplitTableName(tb.DbName);
if (tbname?.Length == 1) tbname = new[] { "PUBLIC", tbname[0] }; if (tbname?.Length == 1) tbname = new[] { "PUBLIC", tbname[0] };

View File

@ -53,7 +53,7 @@ namespace FreeSql.Odbc.MySql
} }
else else
{ {
if (_table.Primarys.Any() == false) throw new Exception($"fsql.InsertOrUpdate + IfExistsDoNothing + MySql 要求实体类 {_table.CsName} 必须有主键"); if (_table.Primarys.Any() == false) throw new Exception(CoreStrings.Entity_Must_Primary_Key("fsql.InsertOrUpdate + IfExistsDoNothing + MySql ", _table.CsName));
sql = insert.ToSqlValuesOrSelectUnionAllExtension101(false, (rowd, idx, sb) => sql = insert.ToSqlValuesOrSelectUnionAllExtension101(false, (rowd, idx, sb) =>
sb.Append(" \r\n FROM dual WHERE NOT EXISTS(").Append( sb.Append(" \r\n FROM dual WHERE NOT EXISTS(").Append(
_orm.Select<T1>() _orm.Select<T1>()

View File

@ -17,7 +17,7 @@ namespace FreeSql.Odbc.MySql
public OdbcMySqlOnDuplicateKeyUpdate(IInsert<T1> insert) public OdbcMySqlOnDuplicateKeyUpdate(IInsert<T1> insert)
{ {
_mysqlInsert = insert as OdbcMySqlInsert<T1>; _mysqlInsert = insert as OdbcMySqlInsert<T1>;
if (_mysqlInsert == null) throw new Exception("OnDuplicateKeyUpdate 是 FreeSql.Provider.Odbc/MySql 特有的功能"); if (_mysqlInsert == null) throw new Exception(CoreStrings.S_Features_Unique("OnDuplicateKeyUpdate", "Odbc/MySql"));
if (_mysqlInsert._noneParameterFlag == "c") _mysqlInsert._noneParameterFlag = "cu"; if (_mysqlInsert._noneParameterFlag == "c") _mysqlInsert._noneParameterFlag = "cu";
} }

View File

@ -23,12 +23,12 @@ namespace FreeSql.Odbc.MySql
return; return;
} }
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new OdbcMySqlConnectionPool("主库", masterConnectionString, null, null); MasterPool = new OdbcMySqlConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
if (slaveConnectionStrings != null) if (slaveConnectionStrings != null)
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) foreach (var slaveConnectionString in slaveConnectionStrings)
{ {
var slavePool = new OdbcMySqlConnectionPool($"从库{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); var slavePool = new OdbcMySqlConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} }
} }

View File

@ -45,7 +45,7 @@ namespace FreeSql.Odbc.MySql
{ {
internal OdbcMySqlConnectionPool _pool; internal OdbcMySqlConnectionPool _pool;
public string Name { get; set; } = "MySql OdbcConnection 对象池"; public string Name { get; set; } = $"MySql OdbcConnection {CoreStrings.S_ObjectPool}";
public int PoolSize { get; set; } = 100; public int PoolSize { get; set; } = 100;
public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
@ -120,8 +120,8 @@ namespace FreeSql.Odbc.MySql
{ {
if (obj.Value == null) if (obj.Value == null)
{ {
_pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
} }
if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false) if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
@ -150,8 +150,8 @@ namespace FreeSql.Odbc.MySql
{ {
if (obj.Value == null) if (obj.Value == null)
{ {
_pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
} }
if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)

View File

@ -90,8 +90,8 @@ namespace FreeSql.Odbc.MySql
{ {
if (sb.Length > 0) sb.Append("\r\n"); if (sb.Length > 0) sb.Append("\r\n");
var tb = _commonUtils.GetTableByEntity(obj.entityType); var tb = _commonUtils.GetTableByEntity(obj.entityType);
if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移"); if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName));
if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移可迁移属性0个"); if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName));
var tbname = _commonUtils.SplitTableName(tb.DbName); var tbname = _commonUtils.SplitTableName(tb.DbName);
if (tbname?.Length == 1) tbname = new[] { database, tbname[0] }; if (tbname?.Length == 1) tbname = new[] { database, tbname[0] };

View File

@ -16,11 +16,11 @@ namespace FreeSql.Odbc.Oracle
{ {
} }
public override List<T1> ExecuteDeleted() => throw new NotImplementedException("FreeSql.Odbc.Oracle 未实现该功能"); public override List<T1> ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Odbc.Oracle {CoreStrings.S_Not_Implemented_Feature}");
#if net40 #if net40
#else #else
public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Odbc.Oracle 未实现该功能"); public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Oracle {CoreStrings.S_Not_Implemented_Feature}");
#endif #endif
} }
} }

View File

@ -22,7 +22,7 @@ namespace FreeSql.Odbc.Oracle
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException("FreeSql.Odbc.Oracle 未实现该功能"); protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Odbc.Oracle {CoreStrings.S_Not_Implemented_Feature}");
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
{ {
@ -68,7 +68,7 @@ namespace FreeSql.Odbc.Oracle
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Odbc.Oracle 未实现该功能"); protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Oracle {CoreStrings.S_Not_Implemented_Feature}");
#endif #endif
} }
} }

View File

@ -22,12 +22,12 @@ namespace FreeSql.Odbc.Oracle
return; return;
} }
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new OdbcOracleConnectionPool("主库", masterConnectionString, null, null); MasterPool = new OdbcOracleConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
if (slaveConnectionStrings != null) if (slaveConnectionStrings != null)
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) foreach (var slaveConnectionString in slaveConnectionStrings)
{ {
var slavePool = new OdbcOracleConnectionPool($"从库{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); var slavePool = new OdbcOracleConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} }
} }

View File

@ -56,7 +56,7 @@ namespace FreeSql.Odbc.Oracle
{ {
internal OdbcOracleConnectionPool _pool; internal OdbcOracleConnectionPool _pool;
public string Name { get; set; } = "Oracle OdbcConnection 对象池"; public string Name { get; set; } = $"Oracle OdbcConnection {CoreStrings.S_ObjectPool}";
public int PoolSize { get; set; } = 100; public int PoolSize { get; set; } = 100;
public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
@ -131,8 +131,8 @@ namespace FreeSql.Odbc.Oracle
{ {
if (obj.Value == null) if (obj.Value == null)
{ {
_pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
} }
if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false) if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
@ -161,8 +161,8 @@ namespace FreeSql.Odbc.Oracle
{ {
if (obj.Value == null) if (obj.Value == null)
{ {
_pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
} }
if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)

View File

@ -93,8 +93,8 @@ namespace FreeSql.Odbc.Oracle
{ {
if (sb.Length > 0) sb.Append("\r\n"); if (sb.Length > 0) sb.Append("\r\n");
var tb = _commonUtils.GetTableByEntity(obj.entityType); var tb = _commonUtils.GetTableByEntity(obj.entityType);
if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移"); if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName));
if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移可迁移属性0个"); if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName));
var tbname = _commonUtils.SplitTableName(tb.DbName); var tbname = _commonUtils.SplitTableName(tb.DbName);
if (tbname?.Length == 1) tbname = new[] { userId, tbname[0] }; if (tbname?.Length == 1) tbname = new[] { userId, tbname[0] };
@ -115,7 +115,7 @@ namespace FreeSql.Odbc.Oracle
//codefirst 不支持表名中带 . //codefirst 不支持表名中带 .
if (string.Compare(tbname[0], userId) != 0 && _orm.Ado.ExecuteScalar(CommandType.Text, _commonUtils.FormatSql(" select 1 from sys.dba_users where username={0}", tbname[0])) == null) //创建数据库 if (string.Compare(tbname[0], userId) != 0 && _orm.Ado.ExecuteScalar(CommandType.Text, _commonUtils.FormatSql(" select 1 from sys.dba_users where username={0}", tbname[0])) == null) //创建数据库
throw new NotImplementedException($"Oracle CodeFirst 不支持代码创建 tablespace 与 schemas {tbname[0]}"); throw new NotImplementedException(CoreStrings.S_Oracle_NotSupport_TablespaceSchemas(tbname[0]));
var sbalter = new StringBuilder(); var sbalter = new StringBuilder();
var istmpatler = false; //创建临时表,导入数据,删除旧表,修改 var istmpatler = false; //创建临时表,导入数据,删除旧表,修改

View File

@ -113,7 +113,7 @@ namespace FreeSql.Odbc.Oracle
if (dbfull != null) _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]); if (dbfull != null) _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]);
return OdbcType.NVarChar; return OdbcType.NVarChar;
} }
throw new NotImplementedException($"未实现 {column.DbTypeTextFull} 类型映射"); throw new NotImplementedException(CoreStrings.S_TypeMappingNotImplemented(column.DbTypeTextFull));
} }
static ConcurrentDictionary<string, DbToCs> _dicDbToCs = new ConcurrentDictionary<string, DbToCs>(StringComparer.CurrentCultureIgnoreCase); static ConcurrentDictionary<string, DbToCs> _dicDbToCs = new ConcurrentDictionary<string, DbToCs>(StringComparer.CurrentCultureIgnoreCase);

View File

@ -24,7 +24,7 @@ namespace FreeSql.Odbc.PostgreSQL
public OdbcPostgreSQLOnConflictDoUpdate(IInsert<T1> insert, Expression<Func<T1, object>> columns = null) public OdbcPostgreSQLOnConflictDoUpdate(IInsert<T1> insert, Expression<Func<T1, object>> columns = null)
{ {
_pgsqlInsert = insert as OdbcPostgreSQLInsert<T1>; _pgsqlInsert = insert as OdbcPostgreSQLInsert<T1>;
if (_pgsqlInsert == null) throw new Exception("OnConflictDoUpdate 是 FreeSql.Provider.Odbc/PostgreSQL 特有的功能"); if (_pgsqlInsert == null) throw new Exception(CoreStrings.S_Features_Unique("OnConflictDoUpdate", "Odbc/PostgreSQL"));
if (_pgsqlInsert._noneParameterFlag == "c") _pgsqlInsert._noneParameterFlag = "cu"; if (_pgsqlInsert._noneParameterFlag == "c") _pgsqlInsert._noneParameterFlag = "cu";
if (columns != null) if (columns != null)
@ -38,7 +38,7 @@ namespace FreeSql.Odbc.PostgreSQL
} }
if (_columns == null || _columns.Any() == false) if (_columns == null || _columns.Any() == false)
_columns = _pgsqlInsert.InternalTable.Primarys; _columns = _pgsqlInsert.InternalTable.Primarys;
if (_columns.Any() == false) throw new Exception("OnConflictDoUpdate 功能要求实体类必须设置 IsPrimary 属性"); if (_columns.Any() == false) throw new Exception(CoreStrings.S_OnConflictDoUpdate_MustIsPrimary);
} }
protected void ClearData() protected void ClearData()

View File

@ -23,12 +23,12 @@ namespace FreeSql.Odbc.PostgreSQL
return; return;
} }
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new OdbcPostgreSQLConnectionPool("主库", masterConnectionString, null, null); MasterPool = new OdbcPostgreSQLConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
if (slaveConnectionStrings != null) if (slaveConnectionStrings != null)
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) foreach (var slaveConnectionString in slaveConnectionStrings)
{ {
var slavePool = new OdbcPostgreSQLConnectionPool($"从库{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); var slavePool = new OdbcPostgreSQLConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} }
} }

View File

@ -46,7 +46,7 @@ namespace FreeSql.Odbc.PostgreSQL
{ {
internal OdbcPostgreSQLConnectionPool _pool; internal OdbcPostgreSQLConnectionPool _pool;
public string Name { get; set; } = "PostgreSQL OdbcConnection 对象池"; public string Name { get; set; } = $"PostgreSQL OdbcConnection {CoreStrings.S_ObjectPool}";
public int PoolSize { get; set; } = 50; public int PoolSize { get; set; } = 50;
public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
@ -121,8 +121,8 @@ namespace FreeSql.Odbc.PostgreSQL
{ {
if (obj.Value == null) if (obj.Value == null)
{ {
_pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
} }
if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false) if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
@ -151,8 +151,8 @@ namespace FreeSql.Odbc.PostgreSQL
{ {
if (obj.Value == null) if (obj.Value == null)
{ {
_pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
} }
if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)

View File

@ -96,8 +96,8 @@ namespace FreeSql.Odbc.PostgreSQL
{ {
if (sb.Length > 0) sb.Append("\r\n"); if (sb.Length > 0) sb.Append("\r\n");
var tb = _commonUtils.GetTableByEntity(obj.entityType); var tb = _commonUtils.GetTableByEntity(obj.entityType);
if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移"); if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName));
if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移可迁移属性0个"); if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName));
var tbname = _commonUtils.SplitTableName(tb.DbName); var tbname = _commonUtils.SplitTableName(tb.DbName);
if (tbname?.Length == 1) tbname = new[] { "public", tbname[0] }; if (tbname?.Length == 1) tbname = new[] { "public", tbname[0] };

View File

@ -40,7 +40,7 @@ namespace FreeSql.Odbc.SqlServer
} }
var sql = sb.ToString(); var sql = sb.ToString();
var validx = sql.IndexOf(" WHERE "); var validx = sql.IndexOf(" WHERE ");
if (validx == -1) throw new ArgumentException("找不到 WHERE "); if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("WHERE"));
sql = sb.Clear().Append(sql.Substring(0, validx)) sql = sb.Clear().Append(sql.Substring(0, validx))
.Append(sbret) .Append(sbret)
.Append(sql.Substring(validx)).ToString(); .Append(sql.Substring(validx)).ToString();
@ -97,7 +97,7 @@ namespace FreeSql.Odbc.SqlServer
} }
var sql = sb.ToString(); var sql = sb.ToString();
var validx = sql.IndexOf(" WHERE "); var validx = sql.IndexOf(" WHERE ");
if (validx == -1) throw new ArgumentException("找不到 WHERE "); if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("WHERE"));
sql = sb.Clear().Append(sql.Substring(0, validx)) sql = sb.Clear().Append(sql.Substring(0, validx))
.Append(sbret) .Append(sbret)
.Append(sql.Substring(validx)).ToString(); .Append(sql.Substring(validx)).ToString();

View File

@ -69,14 +69,14 @@ namespace FreeSql.Odbc.SqlServer
if ((_commonUtils as OdbcSqlServerUtils).ServerVersion > 10) if ((_commonUtils as OdbcSqlServerUtils).ServerVersion > 10)
{ {
var validx = sql.IndexOf(") VALUES"); var validx = sql.IndexOf(") VALUES");
if (validx == -1) throw new ArgumentException("找不到 VALUES"); if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("VALUES"));
sb.Insert(0, sql.Substring(0, validx + 1)); sb.Insert(0, sql.Substring(0, validx + 1));
sb.Append(sql.Substring(validx + 1)); sb.Append(sql.Substring(validx + 1));
} }
else else
{ {
var validx = sql.IndexOf(") SELECT "); var validx = sql.IndexOf(") SELECT ");
if (validx == -1) throw new ArgumentException("找不到 SELECT"); if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("SELECT"));
sb.Insert(0, sql.Substring(0, validx + 1)); sb.Insert(0, sql.Substring(0, validx + 1));
sb.Append(sql.Substring(validx + 1)); sb.Append(sql.Substring(validx + 1));
} }
@ -153,14 +153,14 @@ namespace FreeSql.Odbc.SqlServer
if ((_commonUtils as OdbcSqlServerUtils).ServerVersion > 10) if ((_commonUtils as OdbcSqlServerUtils).ServerVersion > 10)
{ {
var validx = sql.IndexOf(") VALUES"); var validx = sql.IndexOf(") VALUES");
if (validx == -1) throw new ArgumentException("找不到 VALUES"); if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("VALUES"));
sb.Insert(0, sql.Substring(0, validx + 1)); sb.Insert(0, sql.Substring(0, validx + 1));
sb.Append(sql.Substring(validx + 1)); sb.Append(sql.Substring(validx + 1));
} }
else else
{ {
var validx = sql.IndexOf(") SELECT "); var validx = sql.IndexOf(") SELECT ");
if (validx == -1) throw new ArgumentException("找不到 SELECT"); if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("SELECT"));
sb.Insert(0, sql.Substring(0, validx + 1)); sb.Insert(0, sql.Substring(0, validx + 1));
sb.Append(sql.Substring(validx + 1)); sb.Append(sql.Substring(validx + 1));
} }

View File

@ -46,7 +46,7 @@ namespace FreeSql.Odbc.SqlServer
} }
var sql = sb.ToString(); var sql = sb.ToString();
var validx = sql.IndexOf(" \r\nWHERE "); var validx = sql.IndexOf(" \r\nWHERE ");
if (validx == -1) throw new ArgumentException("找不到 WHERE "); if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("WHERE"));
sql = sb.Clear().Append(sql.Substring(0, validx)) sql = sb.Clear().Append(sql.Substring(0, validx))
.Append(sbret) .Append(sbret)
.Append(sql.Substring(validx)).ToString(); .Append(sql.Substring(validx)).ToString();
@ -139,7 +139,7 @@ namespace FreeSql.Odbc.SqlServer
} }
var sql = sb.ToString(); var sql = sb.ToString();
var validx = sql.IndexOf(" \r\nWHERE "); var validx = sql.IndexOf(" \r\nWHERE ");
if (validx == -1) throw new ArgumentException("找不到 WHERE "); if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("WHERE"));
sql = sb.Clear().Append(sql.Substring(0, validx)) sql = sb.Clear().Append(sql.Substring(0, validx))
.Append(sbret) .Append(sbret)
.Append(sql.Substring(validx)).ToString(); .Append(sql.Substring(validx)).ToString();

View File

@ -23,12 +23,12 @@ namespace FreeSql.Odbc.SqlServer
return; return;
} }
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new OdbcSqlServerConnectionPool("主库", masterConnectionString, null, null); MasterPool = new OdbcSqlServerConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
if (slaveConnectionStrings != null) if (slaveConnectionStrings != null)
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) foreach (var slaveConnectionString in slaveConnectionStrings)
{ {
var slavePool = new OdbcSqlServerConnectionPool($"从库{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); var slavePool = new OdbcSqlServerConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} }
} }

View File

@ -45,7 +45,7 @@ namespace FreeSql.Odbc.SqlServer
{ {
internal OdbcSqlServerConnectionPool _pool; internal OdbcSqlServerConnectionPool _pool;
public string Name { get; set; } = "SqlServer OdbcConnection 对象池"; public string Name { get; set; } = $"SqlServer OdbcConnection {CoreStrings.S_ObjectPool}";
public int PoolSize { get; set; } = 100; public int PoolSize { get; set; } = 100;
public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10);
public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20);
@ -121,8 +121,8 @@ namespace FreeSql.Odbc.SqlServer
if (obj.Value == null) if (obj.Value == null)
{ {
_pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
} }
if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false) if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
@ -152,8 +152,8 @@ namespace FreeSql.Odbc.SqlServer
if (obj.Value == null) if (obj.Value == null)
{ {
_pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy); _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy);
throw new Exception($"【{this.Name}】连接字符串错误,请检查。"); throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name));
} }
if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)

View File

@ -150,8 +150,8 @@ ELSE
{ {
if (sb.Length > 0) sb.Append("\r\n"); if (sb.Length > 0) sb.Append("\r\n");
var tb = _commonUtils.GetTableByEntity(obj.entityType); var tb = _commonUtils.GetTableByEntity(obj.entityType);
if (tb == null) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移"); if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.entityType.FullName));
if (tb.Columns.Any() == false) throw new Exception($"类型 {obj.entityType.FullName} 不可迁移可迁移属性0个"); if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.entityType.FullName));
var tbname = _commonUtils.SplitTableName(tb.DbName); var tbname = _commonUtils.SplitTableName(tb.DbName);
if (tbname?.Length == 1) tbname = new[] { database, "dbo", tbname[0] }; if (tbname?.Length == 1) tbname = new[] { database, "dbo", tbname[0] };
if (tbname?.Length == 2) tbname = new[] { database, tbname[0], tbname[1] }; if (tbname?.Length == 2) tbname = new[] { database, tbname[0], tbname[1] };

View File

@ -16,11 +16,11 @@ namespace FreeSql.Oracle.Curd
{ {
} }
public override List<T1> ExecuteDeleted() => throw new NotImplementedException("FreeSql.Provider.Oracle 未实现该功能"); public override List<T1> ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.Oracle {CoreStrings.S_Not_Implemented_Feature}");
#if net40 #if net40
#else #else
public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.Oracle 未实现该功能"); public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Oracle {CoreStrings.S_Not_Implemented_Feature}");
#endif #endif
} }
} }

Some files were not shown because too many files have changed in this diff Show More