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