This commit is contained in:
2881099 2022-06-11 12:17:40 +08:00
commit 70f63015a7
128 changed files with 1370 additions and 600 deletions

View File

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

View File

@ -1,4 +1,4 @@
[中文](README.zh-CN.md) | **English** [中文](README.zh-CN.MD) | **English**
# Preface # Preface

View File

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

View File

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

View File

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

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<root> <root>
<!-- <!--
Microsoft ResX Schema Microsoft ResX Schema
Version 2.0 Version 2.0
@ -53,193 +53,194 @@
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
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType> <xsd:complexType>
<xsd:choice maxOccurs="unbounded"> <xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata"> <xsd:element name="metadata">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" /> <xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" /> <xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" /> <xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" /> <xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" /> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="assembly"> <xsd:element name="assembly">
<xsd:complexType> <xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" /> <xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" /> <xsd:attribute name="name" type="xsd:string" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="data"> <xsd:element name="data">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" /> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="resheader"> <xsd:element name="resheader">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" /> <xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:choice> </xsd:choice>
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:schema> </xsd:schema>
<resheader name="resmimetype"> <resheader name="resmimetype">
<value>text/microsoft-resx</value> <value>text/microsoft-resx</value>
</resheader> </resheader>
<resheader name="version"> <resheader name="version">
<value>2.0</value> <value>2.0</value>
</resheader> </resheader>
<resheader name="reader"> <resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<data name="AddFreeDbContextError_CheckConstruction" xml:space="preserve"> <data name="AddFreeDbContextError_CheckConstruction" xml:space="preserve">
<value>FreeSql:An error occurred in AddFreeDbContext, check that the construction parameters of {dbContextTypeName} have been injected correctly</value> <value>FreeSql:An error occurred in AddFreeDbContext, check that the construction parameters of {dbContextTypeName} have been injected correctly</value>
</data> </data>
<data name="CannotAdd_AlreadyExistsInStateManagement" xml:space="preserve"> <data name="CannotAdd_AlreadyExistsInStateManagement" xml:space="preserve">
<value>FreeSql:Not addable, already exists in state management: {entityString}</value> <value>FreeSql:Not addable, already exists in state management: {entityString}</value>
</data> </data>
<data name="CannotAdd_EntityHasNo_PrimaryKey" xml:space="preserve"> <data name="CannotAdd_EntityHasNo_PrimaryKey" xml:space="preserve">
<value>FreeSql:Not addable, entity has no primary key: {entityString}</value> <value>FreeSql:Not addable, entity has no primary key: {entityString}</value>
</data> </data>
<data name="CannotAdd_PrimaryKey_NotSet" xml:space="preserve"> <data name="CannotAdd_PrimaryKey_NotSet" xml:space="preserve">
<value>FreeSql:Not addable, no value for primary key set: {entityString}</value> <value>FreeSql:Not addable, no value for primary key set: {entityString}</value>
</data> </data>
<data name="CannotAdd_SelfIncreasingHasValue" xml:space="preserve"> <data name="CannotAdd_SelfIncreasingHasValue" xml:space="preserve">
<value>FreeSql:Not addable, self-increasing attribute has value: {entityString}</value> <value>FreeSql:Not addable, self-increasing attribute has value: {entityString}</value>
</data> </data>
<data name="CannotAttach_EntityHasNo_PrimaryKey" xml:space="preserve"> <data name="CannotAttach_EntityHasNo_PrimaryKey" xml:space="preserve">
<value>FreeSql:Not attachable, entity has no primary key: {entityString}</value> <value>FreeSql:Not attachable, entity has no primary key: {entityString}</value>
</data> </data>
<data name="CannotAttach_PrimaryKey_NotSet" xml:space="preserve"> <data name="CannotAttach_PrimaryKey_NotSet" xml:space="preserve">
<value>FreeSql:Not attachable, no value for primary key set: {entityString}</value> <value>FreeSql:Not attachable, no value for primary key set: {entityString}</value>
</data> </data>
<data name="CannotDelete_DataNotTracked_ShouldQuery" xml:space="preserve"> <data name="CannotDelete_DataNotTracked_ShouldQuery" xml:space="preserve">
<value>FreeSql:Not deletable, data not tracked, should query first: {entityString}</value> <value>FreeSql:Not deletable, data not tracked, should query first: {entityString}</value>
</data> </data>
<data name="CannotDelete_EntityHasNo_PrimaryKey" xml:space="preserve"> <data name="CannotDelete_EntityHasNo_PrimaryKey" xml:space="preserve">
<value>FreeSql:Not deletable, entity has no primary key: {entityString}</value> <value>FreeSql:Not deletable, entity has no primary key: {entityString}</value>
</data> </data>
<data name="CannotDelete_PrimaryKey_NotSet" xml:space="preserve"> <data name="CannotDelete_PrimaryKey_NotSet" xml:space="preserve">
<value>FreeSql:Not deletable, no value for primary key set: {entityString}</value> <value>FreeSql:Not deletable, no value for primary key set: {entityString}</value>
</data> </data>
<data name="CannotEdit_EntityHasNo_PrimaryKey" xml:space="preserve"> <data name="CannotEdit_EntityHasNo_PrimaryKey" xml:space="preserve">
<value>FreeSql:Not editable, entity has no primary key: {entityString}</value> <value>FreeSql:Not editable, entity has no primary key: {entityString}</value>
</data> </data>
<data name="CannotUpdate_DataShouldQueryOrAttach" xml:space="preserve"> <data name="CannotUpdate_DataShouldQueryOrAttach" xml:space="preserve">
<value>FreeSql:Not updatable, data not tracked, should be queried first or Attach:{entityString}</value> <value>FreeSql:Not updatable, data not tracked, should be queried first or Attach:{entityString}</value>
</data> </data>
<data name="CannotUpdate_EntityHasNo_PrimaryKey" xml:space="preserve"> <data name="CannotUpdate_EntityHasNo_PrimaryKey" xml:space="preserve">
<value>FreeSql:Not updatable, entity has no primary key: {entityString}</value> <value>FreeSql:Not updatable, entity has no primary key: {entityString}</value>
</data> </data>
<data name="CannotUpdate_PrimaryKey_NotSet" xml:space="preserve"> <data name="CannotUpdate_PrimaryKey_NotSet" xml:space="preserve">
<value>FreeSql:Not updatable, no value for primary key set: {entityString}</value> <value>FreeSql:Not updatable, no value for primary key set: {entityString}</value>
</data> </data>
<data name="CannotUpdate_RecordDoesNotExist" xml:space="preserve"> <data name="CannotUpdate_RecordDoesNotExist" xml:space="preserve">
<value>FreeSql:Not updatable, the record does not exist in the database: {entityString}</value> <value>FreeSql:Not updatable, the record does not exist in the database: {entityString}</value>
</data> </data>
<data name="ConfigureUseFreeSql" xml:space="preserve"> <data name="ConfigureUseFreeSql" xml:space="preserve">
<value>FreeSql:Please configure UseFreeSql in OnConfiguring or AddFreeDbContext</value> <value>FreeSql:Please configure UseFreeSql in OnConfiguring or AddFreeDbContext</value>
</data> </data>
<data name="DbSetAsType_NotSupport_Object" xml:space="preserve"> <data name="DbSetAsType_NotSupport_Object" xml:space="preserve">
<value>FreeSql:DbSet. AsType parameter error, please pass in the correct entity type</value> <value>FreeSql:DbSet. AsType parameter error, please pass in the correct entity type</value>
</data> </data>
<data name="EntityType_CannotConvert" xml:space="preserve"> <data name="EntityType_CannotConvert" xml:space="preserve">
<value>FreeSql:Entity type {EntityTypeName} cannot be converted to {name} and cannot use this method</value> <value>FreeSql:Entity type {EntityTypeName} cannot be converted to {name} and cannot use this method</value>
</data> </data>
<data name="EntityType_PrimaryKeyError" xml:space="preserve"> <data name="EntityType_PrimaryKeyError" xml:space="preserve">
<value>FreeSql:Entity type {EntityTypeName} Primary key type is not {fullName} and cannot be used with this method</value> <value>FreeSql:Entity type {EntityTypeName} Primary key type is not {fullName} and cannot be used with this method</value>
</data> </data>
<data name="EntityType_PrimaryKeyIsNotOne" xml:space="preserve"> <data name="EntityType_PrimaryKeyIsNotOne" xml:space="preserve">
<value>FreeSql:Entity type {EntityTypeName} Primary key number is not 1 and cannot be used with this method</value> <value>FreeSql:Entity type {EntityTypeName} Primary key number is not 1 and cannot be used with this method</value>
</data> </data>
<data name="FailedSetFilter_NotBelongIRpository" xml:space="preserve"> <data name="FailedSetFilter_NotBelongIRpository" xml:space="preserve">
<value>FreeSql:FreeSql. Repository failed to set filter because object does not belong to IRepository</value> <value>FreeSql:FreeSql. Repository failed to set filter because object does not belong to IRepository</value>
</data> </data>
<data name="Incomparable_EntityHasNo_PrimaryKey" xml:space="preserve"> <data name="Incomparable_EntityHasNo_PrimaryKey" xml:space="preserve">
<value>FreeSql:Not comparable, entity has no primary key: {entityString}</value> <value>FreeSql:Not comparable, entity has no primary key: {entityString}</value>
</data> </data>
<data name="Incomparable_PrimaryKey_NotSet" xml:space="preserve"> <data name="Incomparable_PrimaryKey_NotSet" xml:space="preserve">
<value>FreeSql:Non-comparable, no value for primary key set: {entityString}</value> <value>FreeSql:Non-comparable, no value for primary key set: {entityString}</value>
</data> </data>
<data name="InsertError_Filter" xml:space="preserve"> <data name="InsertError_Filter" xml:space="preserve">
<value>FreeSql:FreeSql. Repository Insert failed because the filter {filterKey}: {filterValueExpression} was set and the inserted data does not conform to {entityString}</value> <value>FreeSql:FreeSql. Repository Insert failed because the filter {filterKey}: {filterValueExpression} was set and the inserted data does not conform to {entityString}</value>
</data> </data>
<data name="ISelectAsType_ParameterError" xml:space="preserve"> <data name="ISelectAsType_ParameterError" xml:space="preserve">
<value>FreeSql:ISelect. AsType parameter does not support specifying as object</value> <value>FreeSql:ISelect. AsType parameter does not support specifying as object</value>
</data> </data>
<data name="NotFound_Property" xml:space="preserve"> <data name="NotFound_Property" xml:space="preserve">
<value>FreeSql:Property {propertyName} does not exist for {tableTypeFullName}</value> <value>FreeSql:Property {propertyName} does not exist for {tableTypeFullName}</value>
</data> </data>
<data name="NotFoundMethod_StatesRemoveByObjects" xml:space="preserve"> <data name="NotFoundMethod_StatesRemoveByObjects" xml:space="preserve">
<value>FreeSql:Method DbSet&lt;&gt; not found. StatesRemoveByObjects</value> <value>FreeSql:Method DbSet&lt;&gt; not found. StatesRemoveByObjects</value>
</data> </data>
<data name="ParameterDataTypeError" xml:space="preserve"> <data name="ParameterDataTypeError" xml:space="preserve">
<value>FreeSql:Parameter data type error {entityTypeFullName}</value> <value>FreeSql:Parameter data type error {entityTypeFullName}</value>
</data> </data>
<data name="ParameterError" xml:space="preserve"> <data name="ParameterError" xml:space="preserve">
<value>FreeSql:Parameter error {param}</value> <value>FreeSql:Parameter error {param}</value>
</data> </data>
<data name="ParameterError_CannotBeNull" xml:space="preserve"> <data name="ParameterError_CannotBeNull" xml:space="preserve">
<value>FreeSql:Parameter error {param} cannot be null</value> <value>FreeSql:Parameter error {param} cannot be null</value>
</data> </data>
<data name="ParameterError_IsNot_CollectionProperties" xml:space="preserve"> <data name="ParameterError_IsNot_CollectionProperties" xml:space="preserve">
<value>FreeSql:Parameter error {many} is not a collection property</value> <value>FreeSql:Parameter error {many} is not a collection property</value>
</data> </data>
<data name="ParameterError_NotFound_CollectionProperties" xml:space="preserve"> <data name="ParameterError_NotFound_CollectionProperties" xml:space="preserve">
<value>FreeSql:Parameter error {many} Collection property does not exist</value> <value>FreeSql:Parameter error {many} Collection property does not exist</value>
</data> </data>
<data name="ParameterError_NotFound_Property" xml:space="preserve"> <data name="ParameterError_NotFound_Property" xml:space="preserve">
<value>FreeSql:Parameter error {one} attribute does not exist</value> <value>FreeSql:Parameter error {one} attribute does not exist</value>
</data> </data>
<data name="Propagation_Mandatory" xml:space="preserve"> <data name="Propagation_Mandatory" xml:space="preserve">
<value>FreeSql:Propagation_ Mandatory: With the current transaction, throw an exception if there is no current transaction</value> <value>FreeSql:Propagation_ Mandatory: With the current transaction, throw an exception if there is no current transaction</value>
</data> </data>
<data name="Propagation_Never" xml:space="preserve"> <data name="Propagation_Never" xml:space="preserve">
<value>FreeSql:Propagation_ Never: Perform the operation non-transactionally and throw an exception if the current transaction exists</value> <value>FreeSql:Propagation_ Never: Perform the operation non-transactionally and throw an exception if the current transaction exists</value>
</data> </data>
<data name="PropertyOfType_IsNot_OneToManyOrManyToMany" xml:space="preserve"> <data name="PropertyOfType_IsNot_OneToManyOrManyToMany" xml:space="preserve">
<value>FreeSql:Property {propertyName} of type {tableTypeFullName} is not OneToMany or ManyToMany attribute</value> <value>FreeSql:Property {propertyName} of type {tableTypeFullName} is not OneToMany or ManyToMany attribute</value>
</data> </data>
<data name="SpecialError_BatchAdditionFailed" xml:space="preserve"> <data name="SpecialError_BatchAdditionFailed" xml:space="preserve">
<value>FreeSql:Special error: Bulk add failed, {dataType} returned data, does not match the number added</value> <value>FreeSql:Special error: Bulk add failed, {dataType} returned data, does not match the number added</value>
</data> </data>
<data name="SpecialError_UpdateFailedDataNotTracked" xml:space="preserve"> <data name="SpecialError_UpdateFailedDataNotTracked" xml:space="preserve">
<value>FreeSql:Special error: Update failed, data not tracked: {entityString}</value> <value>FreeSql:Special error: Update failed, data not tracked: {entityString}</value>
</data> </data>
<data name="TransactionHasBeenStarted" xml:space="preserve"> <data name="TransactionHasBeenStarted" xml:space="preserve">
<value>FreeSql:Transaction opened, unit of work cannot be disabled</value> <value>FreeSql:Transaction opened, unit of work cannot be disabled</value>
</data> </data>
<data name="TypeHasSetProperty_IgnoreAttribute" xml:space="preserve"> <data name="TypeHasSetProperty_IgnoreAttribute" xml:space="preserve">
<value>FreeSql:The {tableTypeFullName} type has set the property {propertyName} Ignore the attribute</value> <value>FreeSql:The {tableTypeFullName} type has set the property {propertyName} Ignore the attribute</value>
</data> </data>
<data name="UnitOfWorkManager_Construction_CannotBeNull" xml:space="preserve"> <data name="UnitOfWorkManager_Construction_CannotBeNull" xml:space="preserve">
<value>FreeSql:The {unitOfWorkManager} constructor parameter {fsql} cannot be null</value> <value>FreeSql:The {unitOfWorkManager} constructor parameter {fsql} cannot be null</value>
</data> </data>
<data name="UpdateError_Filter" xml:space="preserve"> <data name="UpdateError_Filter" xml:space="preserve">
<value>FreeSql:FreeSql. Repository Update failed because the filter {filterKey}: {filterValueExpression} is set and the updated data does not conform to {entityString}</value> <value>FreeSql:FreeSql. Repository Update failed because the filter {filterKey}: {filterValueExpression} is set and the updated data does not conform to {entityString}</value>
</data> </data>
</root> </root>

View File

@ -0,0 +1,99 @@
using System.Threading;
using Xunit;
using Xunit.Abstractions;
namespace FreeSql.Tests.Properties
{
public class ProviderExtensionsTests
{
private readonly ITestOutputHelper output;
public ProviderExtensionsTests(ITestOutputHelper output)
{
this.output = output;
//Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("zh-Hans");
//Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-Hans");
//Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
//Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
//CoreStrings.Culture= new System.Globalization.CultureInfo("zh-CN");
CoreStrings.Culture = new System.Globalization.CultureInfo("en-US");
}
[Fact]
public void AsTable_PropertyName_NotDateTimeTest()
{
var x = CoreStrings.S_Access_InsertOnlyOneAtTime;
output.WriteLine(x);
x = CoreStrings.S_BaseEntity_Initialization_Error;
output.WriteLine(x);
x = CoreStrings.S_BlockAccess_WaitForRecovery(1, 2);
output.WriteLine(x);
x = CoreStrings.S_CannotBeConverted_To_ISelect(1);
output.WriteLine(x);
x = CoreStrings.S_ConnectionStringError;
output.WriteLine(x);
x = CoreStrings.S_ConnectionStringError_Check(1);
output.WriteLine(x);
x = CoreStrings.S_ConnectionStringError_CheckProject;
output.WriteLine(x);
x = CoreStrings.S_ConnectionStringError_CheckProjectConnection(1);
output.WriteLine(x);
x = CoreStrings.S_CustomAdapter_Cannot_Use_CreateCommand;
output.WriteLine(x);
x = CoreStrings.S_CustomAdapter_OnlySuppport_UseConnectionFactory;
output.WriteLine(x);
x = CoreStrings.S_Dameng_NotSupport_TablespaceSchemas(1);
output.WriteLine(x);
x = CoreStrings.S_DB_ParameterError;
output.WriteLine(x);
x = CoreStrings.S_DB_ParameterError_UnsupportedType(1);
output.WriteLine(x);
x = CoreStrings.S_DB_Parameter_Error_NoConnectionString;
output.WriteLine(x);
x = CoreStrings.S_Features_Unique(1, 2);
output.WriteLine(x);
x = CoreStrings.S_InsertOrUpdate_Unable_UpdateColumns;
output.WriteLine(x);
x = CoreStrings.S_MasterDatabase;
output.WriteLine(x);
x = CoreStrings.S_MygisGeometry_NotImplement(1);
output.WriteLine(x);
x = CoreStrings.S_NameOptions_Incorrect;
output.WriteLine(x);
x = CoreStrings.S_NotFound_Name("x");
output.WriteLine(x);
x = CoreStrings.S_NotImplementSkipOffset("oRACLE");
output.WriteLine(x);
x = CoreStrings.S_Not_Implemented_Feature;
output.WriteLine(x);
x = CoreStrings.S_Not_Implemented_FeedBack;
output.WriteLine(x);
x = CoreStrings.S_ObjectPool;
output.WriteLine(x);
x = CoreStrings.S_OldTableExists("old", "new");
output.WriteLine(x);
x = CoreStrings.S_OnConflictDoUpdate_MustIsPrimary;
output.WriteLine(x);
x = CoreStrings.S_Oracle_NotSupport_TablespaceSchemas(1);
output.WriteLine(x);
x = CoreStrings.S_ParsingFailed_UseRestoreToSelect(1, 2);
output.WriteLine(x);
x = CoreStrings.S_RequiresEntityPrimaryKey(1, 2);
output.WriteLine(x);
x = CoreStrings.S_SelectManayErrorType(1);
output.WriteLine(x);
x = CoreStrings.S_SlaveDatabase;
output.WriteLine(x);
x = CoreStrings.S_TypeMappingNotImplemented(1);
output.WriteLine(x);
x = CoreStrings.S_Type_IsNot_Migrable(1);
output.WriteLine(x);
x = CoreStrings.S_Type_IsNot_Migrable_0Attributes(1);
output.WriteLine(x);
x = CoreStrings.S_WrongParameter(1);
output.WriteLine(x);
}
}
}

View File

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

View File

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

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<root> <root>
<!-- <!--
Microsoft ResX Schema Microsoft ResX Schema
Version 2.0 Version 2.0
@ -53,445 +53,551 @@
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
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType> <xsd:complexType>
<xsd:choice maxOccurs="unbounded"> <xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata"> <xsd:element name="metadata">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" /> <xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" /> <xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" /> <xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" /> <xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" /> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="assembly"> <xsd:element name="assembly">
<xsd:complexType> <xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" /> <xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" /> <xsd:attribute name="name" type="xsd:string" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="data"> <xsd:element name="data">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" /> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="resheader"> <xsd:element name="resheader">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" /> <xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:choice> </xsd:choice>
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:schema> </xsd:schema>
<resheader name="resmimetype"> <resheader name="resmimetype">
<value>text/microsoft-resx</value> <value>text/microsoft-resx</value>
</resheader> </resheader>
<resheader name="version"> <resheader name="version">
<value>2.0</value> <value>2.0</value>
</resheader> </resheader>
<resheader name="reader"> <resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<data name="AsTable_PropertyName_FormatError" xml:space="preserve"> <data name="AsTable_PropertyName_FormatError" xml:space="preserve">
<value>FreeSql:[Table(AsTable="{asTable}")] Property value formatted incorrectly</value> <value>FreeSql:[Table(AsTable="{asTable}")] Property value formatted incorrectly</value>
</data> </data>
<data name="AsTable_PropertyName_NotDateTime" xml:space="preserve"> <data name="AsTable_PropertyName_NotDateTime" xml:space="preserve">
<value>FreeSql:The property name {atmGroupsValue} set by [Table (AsTable = xx)] is not of type DateTime</value> <value>FreeSql:The property name {atmGroupsValue} set by [Table (AsTable = xx)] is not of type DateTime</value>
</data> </data>
<data name="Available_Failed_Get_Resource" xml:space="preserve"> <data name="Available_Failed_Get_Resource" xml:space="preserve">
<value>FreeSql:{name}: Failed to get resource {statistics}</value> <value>FreeSql:{name}: Failed to get resource {statistics}</value>
</data> </data>
<data name="Available_Thrown_Exception" xml:space="preserve"> <data name="Available_Thrown_Exception" xml:space="preserve">
<value>FreeSql:{name}: An exception needs to be thrown</value> <value>FreeSql:{name}: An exception needs to be thrown</value>
</data> </data>
<data name="Bad_Expression_Format" xml:space="preserve"> <data name="Bad_Expression_Format" xml:space="preserve">
<value>FreeSql:Wrong expression format {column}</value> <value>FreeSql:Wrong expression format {column}</value>
</data> </data>
<data name="Before_Chunk_Cannot_Use_Select" xml:space="preserve"> <data name="Before_Chunk_Cannot_Use_Select" xml:space="preserve">
<value>FreeSql:Select is not available until the Chunk function</value> <value>FreeSql:Select is not available until the Chunk function</value>
</data> </data>
<data name="Begin_Transaction_Then_ForUpdate" xml:space="preserve"> <data name="Begin_Transaction_Then_ForUpdate" xml:space="preserve">
<value>FreeSql:For security reasons, be sure to use ForUpdate after the transaction is open</value> <value>FreeSql:For security reasons, be sure to use ForUpdate after the transaction is open</value>
</data> </data>
<data name="Cannot_Be_NULL" xml:space="preserve"> <data name="Cannot_Be_NULL" xml:space="preserve">
<value>FreeSql:Cannot be null</value> <value>FreeSql:Cannot be null</value>
</data> </data>
<data name="Cannot_Be_NULL_Name" xml:space="preserve"> <data name="Cannot_Be_NULL_Name" xml:space="preserve">
<value>FreeSql:{name} cannot be null</value> <value>FreeSql:{name} cannot be null</value>
</data> </data>
<data name="Cannot_Match_Property" xml:space="preserve"> <data name="Cannot_Match_Property" xml:space="preserve">
<value>FreeSql:Unable to match {property}</value> <value>FreeSql:Unable to match {property}</value>
</data> </data>
<data name="Cannot_Resolve_ExpressionTree" xml:space="preserve"> <data name="Cannot_Resolve_ExpressionTree" xml:space="preserve">
<value>FreeSql:{property} cannot be resolved to an expression tree</value> <value>FreeSql:{property} cannot be resolved to an expression tree</value>
</data> </data>
<data name="Check_UseConnectionString" xml:space="preserve"> <data name="Check_UseConnectionString" xml:space="preserve">
<value>FreeSql:The parameter master ConnectionString cannot be empty, check UseConnectionString</value> <value>FreeSql:The parameter master ConnectionString cannot be empty, check UseConnectionString</value>
</data> </data>
<data name="Commit" xml:space="preserve"> <data name="Commit" xml:space="preserve">
<value>FreeSql:Commit</value> <value>FreeSql:Commit</value>
</data> </data>
<data name="Connection_Failed_Switch_Servers" xml:space="preserve"> <data name="Connection_Failed_Switch_Servers" xml:space="preserve">
<value>FreeSql:Connection failed, ready to switch other available servers</value> <value>FreeSql:Connection failed, ready to switch other available servers</value>
</data> </data>
<data name="Custom_Expression_ParsingError" xml:space="preserve"> <data name="Custom_Expression_ParsingError" xml:space="preserve">
<value>FreeSql:Custom expression parsing error: type {exp3MethodDeclaringType} needs to define static ThreadLocal&lt;ExpressionCallContext&gt;field, field, field (important three reminders)</value> <value>FreeSql:Custom expression parsing error: type {exp3MethodDeclaringType} needs to define static ThreadLocal&lt;ExpressionCallContext&gt;field, field, field (important three reminders)</value>
</data> </data>
<data name="Custom_Reflection_IsNotNull" xml:space="preserve"> <data name="Custom_Reflection_IsNotNull" xml:space="preserve">
<value>FreeSql:Custom {Reflection Information} cannot be empty, format: {static method name}{space}{reflection information}</value> <value>FreeSql:Custom {Reflection Information} cannot be empty, format: {static method name}{space}{reflection information}</value>
</data> </data>
<data name="Custom_StaticMethodName_IsNotNull" xml:space="preserve"> <data name="Custom_StaticMethodName_IsNotNull" xml:space="preserve">
<value>FreeSql:Custom {static method name} cannot be empty, format: {static method name}{space}{reflection information}</value> <value>FreeSql:Custom {static method name} cannot be empty, format: {static method name}{space}{reflection information}</value>
</data> </data>
<data name="Custom_StaticMethodName_NotSet_DynamicFilterCustom" xml:space="preserve"> <data name="Custom_StaticMethodName_NotSet_DynamicFilterCustom" xml:space="preserve">
<value>FreeSql:Custom corresponding {{static method name}}:{fiValueCustomArray} The [DynamicFilterCustomAttribute] attribute is not set</value> <value>FreeSql:Custom corresponding {{static method name}}:{fiValueCustomArray} The [DynamicFilterCustomAttribute] attribute is not set</value>
</data> </data>
<data name="CustomFieldSeparatedBySpaces" xml:space="preserve"> <data name="CustomFieldSeparatedBySpaces" xml:space="preserve">
<value>FreeSql:Custom requires that Fields be space-split and 2-length in the format: {static method name}{space}{reflection information}</value> <value>FreeSql:Custom requires that Fields be space-split and 2-length in the format: {static method name}{space}{reflection information}</value>
</data> </data>
<data name="DataType_AsType_Inconsistent" xml:space="preserve"> <data name="DataType_AsType_Inconsistent" xml:space="preserve">
<value>FreeSql:The data type of the operation ({dataDisplayCsharp}) is inconsistent with AsType ({tableTypeDisplayCsharp}). Please check.</value> <value>FreeSql:The data type of the operation ({dataDisplayCsharp}) is inconsistent with AsType ({tableTypeDisplayCsharp}). Please check.</value>
</data> </data>
<data name="DateRange_Comma_Separateda_By2Char" xml:space="preserve"> <data name="DateRange_Comma_Separateda_By2Char" xml:space="preserve">
<value>FreeSql:DateRange requires that Value be comma-separated and 2-length</value> <value>FreeSql:DateRange requires that Value be comma-separated and 2-length</value>
</data> </data>
<data name="DateRange_DateFormat_yyyy" xml:space="preserve"> <data name="DateRange_DateFormat_yyyy" xml:space="preserve">
<value>FreeSql:DateRange requires that the Value [1] format must be: yyyy, yyyy-MM, yyyy-MM-dd, yyyyy-MM-dd HH, yyyy, yyyy-MM-dd HH:mm</value> <value>FreeSql:DateRange requires that the Value [1] format must be: yyyy, yyyy-MM, yyyy-MM-dd, yyyyy-MM-dd HH, yyyy, yyyy-MM-dd HH:mm</value>
</data> </data>
<data name="DbUpdateVersionException_RowLevelOptimisticLock" xml:space="preserve"> <data name="DbUpdateVersionException_RowLevelOptimisticLock" xml:space="preserve">
<value>FreeSql:The record may not exist, or the row level optimistic lock version is out of date, the number of updates {sourceCount}, the number of rows affected {affrows}.</value> <value>FreeSql:The record may not exist, or the row level optimistic lock version is out of date, the number of updates {sourceCount}, the number of rows affected {affrows}.</value>
</data> </data>
<data name="Different_Number_SlaveConnectionString_SlaveWeights" xml:space="preserve"> <data name="Different_Number_SlaveConnectionString_SlaveWeights" xml:space="preserve">
<value>FreeSql:The number of SlaveConnectionStrings is not the same as SlaveWeights</value> <value>FreeSql:The number of SlaveConnectionStrings is not the same as SlaveWeights</value>
</data> </data>
<data name="Duplicate_ColumnAttribute" xml:space="preserve"> <data name="Duplicate_ColumnAttribute" xml:space="preserve">
<value>FreeSql:ColumnAttribute. Name {colattrName} exists repeatedly, please check (note: case insensitive)</value> <value>FreeSql:ColumnAttribute. Name {colattrName} exists repeatedly, please check (note: case insensitive)</value>
</data> </data>
<data name="Duplicate_PropertyName" xml:space="preserve"> <data name="Duplicate_PropertyName" xml:space="preserve">
<value>FreeSql:Property name {pName} exists repeatedly, please check (note: case insensitive)</value> <value>FreeSql:Property name {pName} exists repeatedly, please check (note: case insensitive)</value>
</data> </data>
<data name="Entity_Must_Primary_Key" xml:space="preserve"> <data name="Entity_Must_Primary_Key" xml:space="preserve">
<value>FreeSql:The {function} feature requires that the entity class {tableCsName} must have a primary key</value> <value>FreeSql:The {function} feature requires that the entity class {tableCsName} must have a primary key</value>
</data> </data>
<data name="Entity_MySQL_VersionsBelow8_NotSupport_Multiple_PrimaryKeys" xml:space="preserve"> <data name="Entity_MySQL_VersionsBelow8_NotSupport_Multiple_PrimaryKeys" xml:space="preserve">
<value>FreeSql:{tbTypeFullName} is a parent-child relationship, but combinations of multiple primary keys are not supported in versions below MySql 8.0</value> <value>FreeSql:{tbTypeFullName} is a parent-child relationship, but combinations of multiple primary keys are not supported in versions below MySql 8.0</value>
</data> </data>
<data name="Entity_NotParentChild_Relationship" xml:space="preserve"> <data name="Entity_NotParentChild_Relationship" xml:space="preserve">
<value>FreeSql:{tbTypeFullName} is not a parent-child relationship and cannot be used</value> <value>FreeSql:{tbTypeFullName} is not a parent-child relationship and cannot be used</value>
</data> </data>
<data name="EspeciallySubquery_Cannot_Parsing" xml:space="preserve"> <data name="EspeciallySubquery_Cannot_Parsing" xml:space="preserve">
<value>FreeSql:This particular subquery cannot be resolved</value> <value>FreeSql:This particular subquery cannot be resolved</value>
</data> </data>
<data name="Expression_Error_Use_ParameterExpression" xml:space="preserve"> <data name="Expression_Error_Use_ParameterExpression" xml:space="preserve">
<value>FreeSql:Expression error, its top object is not ParameterExpression:{exp}</value> <value>FreeSql:Expression error, its top object is not ParameterExpression:{exp}</value>
</data> </data>
<data name="Expression_Error_Use_Successive_MemberAccess_Type" xml:space="preserve"> <data name="Expression_Error_Use_Successive_MemberAccess_Type" xml:space="preserve">
<value>FreeSql:Expression error, it is not a continuous MemberAccess type: {exp}</value> <value>FreeSql:Expression error, it is not a continuous MemberAccess type: {exp}</value>
</data> </data>
<data name="ExpressionTree_Convert_Type_Error" xml:space="preserve"> <data name="ExpressionTree_Convert_Type_Error" xml:space="preserve">
<value>FreeSql:ExpressionTree conversion type error, value ({value}), type ({valueTypeFullName}), target type ({typeFullName}), Error:{exMessage}</value> <value>FreeSql:ExpressionTree conversion type error, value ({value}), type ({valueTypeFullName}), target type ({typeFullName}), Error:{exMessage}</value>
</data> </data>
<data name="Failed_SubTable_FieldValue" xml:space="preserve"> <data name="Failed_SubTable_FieldValue" xml:space="preserve">
<value>FreeSql:Failed to parse table field value {sqlWhere}</value> <value>FreeSql:Failed to parse table field value {sqlWhere}</value>
</data> </data>
<data name="Functions_AsTable_NotImplemented" xml:space="preserve"> <data name="Functions_AsTable_NotImplemented" xml:space="preserve">
<value>FreeSql:Function {asTable} not implemented by AsTable</value> <value>FreeSql:Function {asTable} not implemented by AsTable</value>
</data> </data>
<data name="GBase_NotSupport_OtherThanCommas" xml:space="preserve"> <data name="GBase_NotSupport_OtherThanCommas" xml:space="preserve">
<value>FreeSql:GBase does not support separators other than commas at this time</value> <value>FreeSql:GBase does not support separators other than commas at this time</value>
</data> </data>
<data name="Generated_Same_SubTable" xml:space="preserve"> <data name="Generated_Same_SubTable" xml:space="preserve">
<value>FreeSql:TableName:{tableName} generated the same table name</value> <value>FreeSql:TableName:{tableName} generated the same table name</value>
</data> </data>
<data name="GetPrimarys_ParameterError_IsNotDictKey " xml:space="preserve"> <data name="GetPrimarys_ParameterError_IsNotDictKey " xml:space="preserve">
<value>FreeSql:The parameter'{primary}'passed by GetPrimarys is incorrect and does not belong to the key name of the dictionary data</value> <value>FreeSql:The parameter'{primary}'passed by GetPrimarys is incorrect and does not belong to the key name of the dictionary data</value>
</data> </data>
<data name="Has_Specified_Cannot_Specified_Second" xml:space="preserve"> <data name="Has_Specified_Cannot_Specified_Second" xml:space="preserve">
<value>FreeSql:{first} has already been specified and {second} can no longer be specified</value> <value>FreeSql:{first} has already been specified and {second} can no longer be specified</value>
</data> </data>
<data name="Ignored_Check_Confirm_PublicGetSet" xml:space="preserve"> <data name="Ignored_Check_Confirm_PublicGetSet" xml:space="preserve">
<value>FreeSql:{tb2DbName}. {mp2MemberName} is ignored. Check the IsIgnore setting to make sure get/set is public</value> <value>FreeSql:{tb2DbName}. {mp2MemberName} is ignored. Check the IsIgnore setting to make sure get/set is public</value>
</data> </data>
<data name="Include_ParameterType_Error" xml:space="preserve"> <data name="Include_ParameterType_Error" xml:space="preserve">
<value>FreeSql:Include parameter type error</value> <value>FreeSql:Include parameter type error</value>
</data> </data>
<data name="Include_ParameterType_Error_Use_IncludeMany" xml:space="preserve"> <data name="Include_ParameterType_Error_Use_IncludeMany" xml:space="preserve">
<value>FreeSql:Include parameter type is wrong, use IncludeMany for collection properties</value> <value>FreeSql:Include parameter type is wrong, use IncludeMany for collection properties</value>
</data> </data>
<data name="Include_ParameterType_Error_Use_MemberAccess" xml:space="preserve"> <data name="Include_ParameterType_Error_Use_MemberAccess" xml:space="preserve">
<value>FreeSql:Include parameter type is wrong, expression type should be MemberAccess</value> <value>FreeSql:Include parameter type is wrong, expression type should be MemberAccess</value>
</data> </data>
<data name="IncludeMany_NotValid_Navigation" xml:space="preserve"> <data name="IncludeMany_NotValid_Navigation" xml:space="preserve">
<value>FreeSql:The property {collMemMemberName} of IncludeMany type {tbTypeDisplayCsharp} is not a valid navigation property, hint: IsIgnore = true will not be a navigation property</value> <value>FreeSql:The property {collMemMemberName} of IncludeMany type {tbTypeDisplayCsharp} is not a valid navigation property, hint: IsIgnore = true will not be a navigation property</value>
</data> </data>
<data name="IncludeMany_ParameterError_OnlyUseOneParameter" xml:space="preserve"> <data name="IncludeMany_ParameterError_OnlyUseOneParameter" xml:space="preserve">
<value>FreeSql:IncludeMany {navigateSelector} parameter is wrong, Select can only use one parameter's method, the correct format:.Select(t =&gt;new TNavigate{{}})</value> <value>FreeSql:IncludeMany {navigateSelector} parameter is wrong, Select can only use one parameter's method, the correct format:.Select(t =&gt;new TNavigate{{}})</value>
</data> </data>
<data name="IncludeMany_ParameterError_Select_ReturnConsistentType" xml:space="preserve"> <data name="IncludeMany_ParameterError_Select_ReturnConsistentType" xml:space="preserve">
<value>FreeSql:IncludeMany {navigateSelector} parameter error, Select lambda parameter return value must match {collMemElementType} type</value> <value>FreeSql:IncludeMany {navigateSelector} parameter error, Select lambda parameter return value must match {collMemElementType} type</value>
</data> </data>
<data name="IncludeMany_ParameterType_Error_Use_MemberAccess" xml:space="preserve"> <data name="IncludeMany_ParameterType_Error_Use_MemberAccess" xml:space="preserve">
<value>FreeSql:IncludeMany parameter 1 has wrong type, expression type should be MemberAccess</value> <value>FreeSql:IncludeMany parameter 1 has wrong type, expression type should be MemberAccess</value>
</data> </data>
<data name="IncludeMany_ParameterTypeError" xml:space="preserve"> <data name="IncludeMany_ParameterTypeError" xml:space="preserve">
<value>FreeSql:IncludeMany {navigateSelector} parameter type is wrong, correct format: a.collections.Take(1).Where(c =&gt; C.A ID == a.id).Select (a =&gt; new TNavigate{{}})</value> <value>FreeSql:IncludeMany {navigateSelector} parameter type is wrong, correct format: a.collections.Take(1).Where(c =&gt; C.A ID == a.id).Select (a =&gt; new TNavigate{{}})</value>
</data> </data>
<data name="InsertInto_No_Property_Selected" xml:space="preserve"> <data name="InsertInto_No_Property_Selected" xml:space="preserve">
<value>FreeSql:ISelect. InsertInto() did not select an attribute: {displayCsharp}</value> <value>FreeSql:ISelect. InsertInto() did not select an attribute: {displayCsharp}</value>
</data> </data>
<data name="InsertInto_TypeError" xml:space="preserve"> <data name="InsertInto_TypeError" xml:space="preserve">
<value>FreeSql:ISelect. InsertInto() type error: {displayCsharp}</value> <value>FreeSql:ISelect. InsertInto() type error: {displayCsharp}</value>
</data> </data>
<data name="InsertOrUpdate_Must_Primary_Key" xml:space="preserve"> <data name="InsertOrUpdate_Must_Primary_Key" xml:space="preserve">
<value>FreeSql:The InsertOrUpdate function performs merge into requiring the entity class {CsName} to have a primary key</value> <value>FreeSql:The InsertOrUpdate function performs merge into requiring the entity class {CsName} to have a primary key</value>
</data> </data>
<data name="InsertOrUpdate_NotSuport_Generic_UseEntity" xml:space="preserve"> <data name="InsertOrUpdate_NotSuport_Generic_UseEntity" xml:space="preserve">
<value>FreeSql:The generic parameter for InsertOrUpdate&lt;&gt;does not support {typeofT1}. Pass in your entity class</value> <value>FreeSql:The generic parameter for InsertOrUpdate&lt;&gt;does not support {typeofT1}. Pass in your entity class</value>
</data> </data>
<data name="Install_FreeSql_Extensions_LazyLoading" xml:space="preserve"> <data name="Install_FreeSql_Extensions_LazyLoading" xml:space="preserve">
<value>FreeSql:FreeSql needs to be installed for Delayed Loading. Extensions. LazyLoading. Dll, downloadable to nuget</value> <value>FreeSql:FreeSql needs to be installed for Delayed Loading. Extensions. LazyLoading. Dll, downloadable to nuget</value>
</data> </data>
<data name="LazyLoading_CompilationError" xml:space="preserve"> <data name="LazyLoading_CompilationError" xml:space="preserve">
<value>FreeSql:{trytbTypeName} Compilation error: {exMessage}\r\n\r\n{cscode}</value> <value>FreeSql:{trytbTypeName} Compilation error: {exMessage}\r\n\r\n{cscode}</value>
</data> </data>
<data name="LazyLoading_EntityMustDeclarePublic" xml:space="preserve"> <data name="LazyLoading_EntityMustDeclarePublic" xml:space="preserve">
<value>FreeSql:Entity type {trytbTypeName} must be declared public</value> <value>FreeSql:Entity type {trytbTypeName} must be declared public</value>
</data> </data>
<data name="ManyToMany_AsSelect_NotSupport_Sum_Avg_etc" xml:space="preserve"> <data name="ManyToMany_AsSelect_NotSupport_Sum_Avg_etc" xml:space="preserve">
<value>FreeSql:ManyToMany navigation properties. AsSelect() is temporarily unavailable for the Sum/Avg/Max/Min/First/ToOne/ToList method</value> <value>FreeSql:ManyToMany navigation properties. AsSelect() is temporarily unavailable for the Sum/Avg/Max/Min/First/ToOne/ToList method</value>
</data> </data>
<data name="ManyToMany_NotFound_CorrespondingField" xml:space="preserve"> <data name="ManyToMany_NotFound_CorrespondingField" xml:space="preserve">
<value>FreeSql:[ManyToMany] Navigation property {trytbTypeName}. {pnvName} did not find a corresponding field in {tbmidCsName}, such as: {midTypePropsTrytbName}{findtrytbPkCsName}, {midTypePropsTrytbName}_ {findtrytbPkCsName}</value> <value>FreeSql:[ManyToMany] Navigation property {trytbTypeName}. {pnvName} did not find a corresponding field in {tbmidCsName}, such as: {midTypePropsTrytbName}{findtrytbPkCsName}, {midTypePropsTrytbName}_ {findtrytbPkCsName}</value>
</data> </data>
<data name="ManyToMany_ParsingError_EntityMissing_PrimaryKey" xml:space="preserve"> <data name="ManyToMany_ParsingError_EntityMissing_PrimaryKey" xml:space="preserve">
<value>FreeSql:[ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, entity type {tbrefTypeName} missing primary key identity, [Column (IsPrimary = true)]</value> <value>FreeSql:[ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, entity type {tbrefTypeName} missing primary key identity, [Column (IsPrimary = true)]</value>
</data> </data>
<data name="ManyToMany_ParsingError_EntityMustHas_NavigateCollection" xml:space="preserve"> <data name="ManyToMany_ParsingError_EntityMustHas_NavigateCollection" xml:space="preserve">
<value>FreeSql:[ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, entity type {tbrefTypeName} must have a corresponding [Navigate (ManyToMany = x)] collection property</value> <value>FreeSql:[ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, entity type {tbrefTypeName} must have a corresponding [Navigate (ManyToMany = x)] collection property</value>
</data> </data>
<data name="ManyToMany_ParsingError_InconsistentType" xml:space="preserve"> <data name="ManyToMany_ParsingError_InconsistentType" xml:space="preserve">
<value>FreeSql:[ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, {tbmidCsName}. {trycolCsName} and {trytbCsName}. {trytbPrimarysCsName} type inconsistent</value> <value>FreeSql:[ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, {tbmidCsName}. {trycolCsName} and {trytbCsName}. {trytbPrimarysCsName} type inconsistent</value>
</data> </data>
<data name="ManyToMany_ParsingError_IntermediateClass_ErrorMessage" xml:space="preserve"> <data name="ManyToMany_ParsingError_IntermediateClass_ErrorMessage" xml:space="preserve">
<value>FreeSql:[ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, intermediate class {tbmidCsName}.{midTypePropsTrytbName} Error: {exMessage}</value> <value>FreeSql:[ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, intermediate class {tbmidCsName}.{midTypePropsTrytbName} Error: {exMessage}</value>
</data> </data>
<data name="ManyToMany_ParsingError_IntermediateClass_NotManyToOne_OneToOne" xml:space="preserve"> <data name="ManyToMany_ParsingError_IntermediateClass_NotManyToOne_OneToOne" xml:space="preserve">
<value>FreeSql:[ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, intermediate class {tbmidCsName}. The {midTypePropsTrytbName} navigation property is not ManyToOne or OneToOne</value> <value>FreeSql:[ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, intermediate class {tbmidCsName}. The {midTypePropsTrytbName} navigation property is not ManyToOne or OneToOne</value>
</data> </data>
<data name="Mapping_Exception_HasNo_SamePropertyName" xml:space="preserve"> <data name="Mapping_Exception_HasNo_SamePropertyName" xml:space="preserve">
<value>FreeSql:Mapping exception: {name} None of the property names are the same</value> <value>FreeSql:Mapping exception: {name} None of the property names are the same</value>
</data> </data>
<data name="MasterPool_IsNull_UseTransaction" xml:space="preserve"> <data name="MasterPool_IsNull_UseTransaction" xml:space="preserve">
<value>FreeSql:Ado. MasterPool value is null, this operation cannot self-enable transactions, please explicitly pass [transaction object] resolution</value> <value>FreeSql:Ado. MasterPool value is null, this operation cannot self-enable transactions, please explicitly pass [transaction object] resolution</value>
</data> </data>
<data name="Missing_FreeSqlProvider_Package" xml:space="preserve"> <data name="Missing_FreeSqlProvider_Package" xml:space="preserve">
<value>FreeSql:Missing FreeSql database implementation package: FreeSql. Provider. {Provider}. Dll, downloadable to nuget</value> <value>FreeSql:Missing FreeSql database implementation package: FreeSql.Provider.{Provider}.Dll, downloadable to nuget</value>
</data> </data>
<data name="Missing_FreeSqlProvider_Package_Reason" xml:space="preserve"> <data name="Missing_FreeSqlProvider_Package_Reason" xml:space="preserve">
<value>FreeSql:The FreeSql database implementation package is missing: {dll} can be downloaded to nuget; If there is {dll} and an error still occurs (due to environmental issues that cause the type to be unreflected), manually pass in typeof ({providerType}) in the third parameter of UseConnectionString/UseConnectionFactory</value> <value>FreeSql:The FreeSql database implementation package is missing: {dll} can be downloaded to nuget; If there is {dll} and an error still occurs (due to environmental issues that cause the type to be unreflected), manually pass in typeof ({providerType}) in the third parameter of UseConnectionString/UseConnectionFactory</value>
</data> </data>
<data name="Navigation_Bind_Number_Different" xml:space="preserve"> <data name="Navigation_Bind_Number_Different" xml:space="preserve">
<value>FreeSql:Navigation property {trytbTypeName}. The number of {pnvName} attributes [Navigate] Binds ({bindColumnsCount}) is different from the number of external primary keys ({tbrefPrimarysLength})</value> <value>FreeSql:Navigation property {trytbTypeName}. The number of {pnvName} attributes [Navigate] Binds ({bindColumnsCount}) is different from the number of external primary keys ({tbrefPrimarysLength})</value>
</data> </data>
<data name="Navigation_Missing_AsSelect" xml:space="preserve"> <data name="Navigation_Missing_AsSelect" xml:space="preserve">
<value>FreeSql:{tb2DbName}. {mp2MemberName} Navigation Property Collection forgotten. AsSelect()? If used in ToList (a =&gt; a. {mp2MemberName}), step by step to refer to the IncludeMany document.</value> <value>FreeSql:{tb2DbName}. {mp2MemberName} Navigation Property Collection forgotten. AsSelect()? If used in ToList (a =&gt; a. {mp2MemberName}), step by step to refer to the IncludeMany document.</value>
</data> </data>
<data name="Navigation_Missing_SetProperty" xml:space="preserve"> <data name="Navigation_Missing_SetProperty" xml:space="preserve">
<value>FreeSql:[Navigation Properties]{trytbTypeDisplayCsharp}. Missing set attribute for {pName}</value> <value>FreeSql:[Navigation Properties]{trytbTypeDisplayCsharp}. Missing set attribute for {pName}</value>
</data> </data>
<data name="Navigation_NotFound_CorrespondingField" xml:space="preserve"> <data name="Navigation_NotFound_CorrespondingField" xml:space="preserve">
<value>FreeSql:Navigation property {trytbTypeName}. {pnvName} No corresponding fields were found, such as: {pnvName}{findtbrefPkCsName}, {pnvName}_ {findtbrefPkCsName}. Or use the [Navigate] attribute to specify the relationship mapping.</value> <value>FreeSql:Navigation property {trytbTypeName}. {pnvName} No corresponding fields were found, such as: {pnvName}{findtbrefPkCsName}, {pnvName}_ {findtbrefPkCsName}. Or use the [Navigate] attribute to specify the relationship mapping.</value>
</data> </data>
<data name="Navigation_ParsingError_EntityMissingPrimaryKey" xml:space="preserve"> <data name="Navigation_ParsingError_EntityMissingPrimaryKey" xml:space="preserve">
<value>FreeSql:Navigation property {trytbTypeName}. {pnvName} parsing error, entity type {trytcTypeName} missing primary key identity, [Column (IsPrimary = true)]</value> <value>FreeSql:Navigation property {trytbTypeName}. {pnvName} parsing error, entity type {trytcTypeName} missing primary key identity, [Column (IsPrimary = true)]</value>
</data> </data>
<data name="Navigation_ParsingError_InconsistentType" xml:space="preserve"> <data name="Navigation_ParsingError_InconsistentType" xml:space="preserve">
<value>FreeSql:Navigation property {trytbTypeName}. {pnvName} parsing error, {trytbCsName}. {trycolCsName} and {tbrefCsName}. {tbrefPrimarysCsName} type inconsistent</value> <value>FreeSql:Navigation property {trytbTypeName}. {pnvName} parsing error, {trytbCsName}. {trycolCsName} and {tbrefCsName}. {tbrefPrimarysCsName} type inconsistent</value>
</data> </data>
<data name="Navigation_ParsingError_NotFound_Property" xml:space="preserve"> <data name="Navigation_ParsingError_NotFound_Property" xml:space="preserve">
<value>FreeSql:Navigation property {trytbTypeName}. {pnvName} attribute [Navigate] parsing error, property not found at {tbrefTypeName}: {bi}</value> <value>FreeSql:Navigation property {trytbTypeName}. {pnvName} attribute [Navigate] parsing error, property not found at {tbrefTypeName}: {bi}</value>
</data> </data>
<data name="NoPrimaryKey_UseSetDto" xml:space="preserve"> <data name="NoPrimaryKey_UseSetDto" xml:space="preserve">
<value>FreeSql:{tableTypeDisplayCsharp} has no primary key defined and cannot use SetSource. Try SetDto</value> <value>FreeSql:{tableTypeDisplayCsharp} has no primary key defined and cannot use SetSource. Try SetDto</value>
</data> </data>
<data name="NoProperty_Defined" xml:space="preserve"> <data name="NoProperty_Defined" xml:space="preserve">
<value>FreeSql:No properties defined</value> <value>FreeSql:No properties defined</value>
</data> </data>
<data name="Not_Implemented" xml:space="preserve"> <data name="Not_Implemented" xml:space="preserve">
<value>FreeSql:Not implemented</value> <value>FreeSql:Not implemented</value>
</data> </data>
<data name="Not_Implemented_Expression" xml:space="preserve"> <data name="Not_Implemented_Expression" xml:space="preserve">
<value>FreeSql:Function expression {exp} parsing not implemented</value> <value>FreeSql:Function expression {exp} parsing not implemented</value>
</data> </data>
<data name="Not_Implemented_Expression_ParameterUseConstant" xml:space="preserve"> <data name="Not_Implemented_Expression_ParameterUseConstant" xml:space="preserve">
<value>FreeSql:Function expression {exp} parsing not implemented, parameter {expArguments} must be constant</value> <value>FreeSql:Function expression {exp} parsing not implemented, parameter {expArguments} must be constant</value>
</data> </data>
<data name="Not_Implemented_Expression_UseAsSelect" xml:space="preserve"> <data name="Not_Implemented_Expression_UseAsSelect" xml:space="preserve">
<value>FreeSql:Function expression {exp} parsing is not implemented. Use if you are working on a navigation property collection. AsSelect (). {exp3MethodName} ({exp3ArgumentsCount})</value> <value>FreeSql:Function expression {exp} parsing is not implemented. Use if you are working on a navigation property collection. AsSelect (). {exp3MethodName} ({exp3ArgumentsCount})</value>
</data> </data>
<data name="Not_Implemented_MemberAcess_Constant" xml:space="preserve"> <data name="Not_Implemented_MemberAcess_Constant" xml:space="preserve">
<value>FreeSql:Constant under MemberAccess is not implemented</value> <value>FreeSql:Constant under MemberAccess is not implemented</value>
</data> </data>
<data name="Not_Implemented_Name" xml:space="preserve"> <data name="Not_Implemented_Name" xml:space="preserve">
<value>FreeSql:{name} is not implemented</value> <value>FreeSql:{name} is not implemented</value>
</data> </data>
<data name="Not_Support" xml:space="preserve"> <data name="Not_Support" xml:space="preserve">
<value>FreeSql:I won't support it</value> <value>FreeSql:I won't support it</value>
</data> </data>
<data name="Not_Support_OrderByRandom" xml:space="preserve"> <data name="Not_Support_OrderByRandom" xml:space="preserve">
<value>FreeSql:{dataType} does not support OrderByRandom sorting</value> <value>FreeSql:{dataType} does not support OrderByRandom sorting</value>
</data> </data>
<data name="Not_Valid_Navigation_Property" xml:space="preserve"> <data name="Not_Valid_Navigation_Property" xml:space="preserve">
<value>FreeSql:{property} is not a valid navigation property</value> <value>FreeSql:{property} is not a valid navigation property</value>
</data> </data>
<data name="NotFound_Column" xml:space="preserve"> <data name="NotFound_Column" xml:space="preserve">
<value>FreeSql:{dbName} Column {memberName} not found</value> <value>FreeSql:{dbName} Column {memberName} not found</value>
</data> </data>
<data name="NotFound_CsName_Column" xml:space="preserve"> <data name="NotFound_CsName_Column" xml:space="preserve">
<value>FreeSql:Cannot find the column corresponding to {CsName}</value> <value>FreeSql:Cannot find the column corresponding to {CsName}</value>
</data> </data>
<data name="NotFound_Property" xml:space="preserve"> <data name="NotFound_Property" xml:space="preserve">
<value>FreeSql:Attribute not found: {memberName}</value> <value>FreeSql:Attribute not found: {memberName}</value>
</data> </data>
<data name="NotFound_PropertyName" xml:space="preserve"> <data name="NotFound_PropertyName" xml:space="preserve">
<value>FreeSql:Property name {proto} not found</value> <value>FreeSql:Property name {proto} not found</value>
</data> </data>
<data name="NotFound_Reflection" xml:space="preserve"> <data name="NotFound_Reflection" xml:space="preserve">
<value>FreeSql:Custom could not find the corresponding {{reflection information}}:{fiValueCustomArray}</value> <value>FreeSql:Custom could not find the corresponding {{reflection information}}:{fiValueCustomArray}</value>
</data> </data>
<data name="NotFound_Static_MethodName" xml:space="preserve"> <data name="NotFound_Static_MethodName" xml:space="preserve">
<value>FreeSql:Custom could not find the corresponding {{static method name}}:{fiValueCustomArray}</value> <value>FreeSql:Custom could not find the corresponding {{static method name}}:{fiValueCustomArray}</value>
</data> </data>
<data name="NotFound_Table_Property_AsTable" xml:space="preserve"> <data name="NotFound_Table_Property_AsTable" xml:space="preserve">
<value>FreeSql:The property name {atmGroupsValue} set by [Table(AsTable = xx)] does not exist</value> <value>FreeSql:The property name {atmGroupsValue} set by [Table(AsTable = xx)] does not exist</value>
</data> </data>
<data name="NotSpecified_UseConnectionString_UseConnectionFactory" xml:space="preserve"> <data name="NotSpecified_UseConnectionString_UseConnectionFactory" xml:space="preserve">
<value>FreeSql:No UseConnectionString or UseConnectionFactory specified</value> <value>FreeSql:No UseConnectionString or UseConnectionFactory specified</value>
</data> </data>
<data name="ObjectPool_Get_Timeout" xml:space="preserve"> <data name="ObjectPool_Get_Timeout" xml:space="preserve">
<value>FreeSql:[{policyName}] ObjectPool. {GetName}() timeout {totalSeconds} seconds, see: https://github.com/dotnetcore/FreeSql/discussions/1081</value> <value>FreeSql:[{policyName}] ObjectPool. {GetName}() timeout {totalSeconds} seconds, see: https://github.com/dotnetcore/FreeSql/discussions/1081</value>
</data> </data>
<data name="ObjectPool_GetAsync_Queue_Long" xml:space="preserve"> <data name="ObjectPool_GetAsync_Queue_Long" xml:space="preserve">
<value>FreeSql:[{policyName}] ObjectPool. GetAsync() The queue is too long. Policy. AsyncGetCapacity = {asyncGetCapacity}</value> <value>FreeSql:[{policyName}] ObjectPool. GetAsync() The queue is too long. Policy. AsyncGetCapacity = {asyncGetCapacity}</value>
</data> </data>
<data name="OneToMany_NotFound_CorrespondingField" xml:space="preserve"> <data name="OneToMany_NotFound_CorrespondingField" xml:space="preserve">
<value>FreeSql:[OneToMany] Navigation property {trytbTypeName}.{pnvName} did not find a corresponding field in {tbrefCsName}, such as: {findtrytb}{findtrytbPkCsName}, {findtrytb}_{findtrytbPkCsName}</value> <value>FreeSql:[OneToMany] Navigation property {trytbTypeName}.{pnvName} did not find a corresponding field in {tbrefCsName}, such as: {findtrytb}{findtrytbPkCsName}, {findtrytb}_{findtrytbPkCsName}</value>
</data> </data>
<data name="OneToMany_ParsingError_InconsistentType" xml:space="preserve"> <data name="OneToMany_ParsingError_InconsistentType" xml:space="preserve">
<value>FreeSql:[OneToMany] Navigation property {trytbTypeName}.{pnvName} parsing error, {trytbCsName}.{trytbPrimarysCsName} and {tbrefCsName}.{trycolCsName} is of inconsistent type</value> <value>FreeSql:[OneToMany] Navigation property {trytbTypeName}.{pnvName} parsing error, {trytbCsName}.{trytbPrimarysCsName} and {tbrefCsName}.{trycolCsName} is of inconsistent type</value>
</data> </data>
<data name="OneToMany_UseNavigate" xml:space="preserve"> <data name="OneToMany_UseNavigate" xml:space="preserve">
<value>FreeSql:, {refpropName}{findtrytbPkCsName}, {refpropName}_{findtrytbPkCsName}. Or use the [Navigate] attribute to specify the relationship mapping.</value> <value>FreeSql:, {refpropName}{findtrytbPkCsName}, {refpropName}_{findtrytbPkCsName}. Or use the [Navigate] attribute to specify the relationship mapping.</value>
</data> </data>
<data name="Parameter_Field_NotSpecified" xml:space="preserve"> <data name="Parameter_Field_NotSpecified" xml:space="preserve">
<value>FreeSql:Parameter field not specified</value> <value>FreeSql:Parameter field not specified</value>
</data> </data>
<data name="ParameterError_NotValid_Collection" xml:space="preserve"> <data name="ParameterError_NotValid_Collection" xml:space="preserve">
<value>FreeSql:The {property} parameter is incorrect, it is not a collection property and must be IList&lt;T&gt;or ICollection&lt;T&gt;</value> <value>FreeSql:The {property} parameter is incorrect, it is not a collection property and must be IList&lt;T&gt;or ICollection&lt;T&gt;</value>
</data> </data>
<data name="ParameterError_NotValid_Navigation" xml:space="preserve"> <data name="ParameterError_NotValid_Navigation" xml:space="preserve">
<value>FreeSql:The {property} parameter is incorrect, it is not a valid navigation property</value> <value>FreeSql:The {property} parameter is incorrect, it is not a valid navigation property</value>
</data> </data>
<data name="ParameterError_NotValid_PropertyName" xml:space="preserve"> <data name="ParameterError_NotValid_PropertyName" xml:space="preserve">
<value>FreeSql:{where} parameter error, {keyval} is not a valid property name and cannot be found in entity class {reftbTypeDisplayCsharp}</value> <value>FreeSql:{where} parameter error, {keyval} is not a valid property name and cannot be found in entity class {reftbTypeDisplayCsharp}</value>
</data> </data>
<data name="ParameterError_NotValid_UseCommas" xml:space="preserve"> <data name="ParameterError_NotValid_UseCommas" xml:space="preserve">
<value>FreeSql:{property} parameter error, format "TopicId=Id, multiple groups using comma connection"</value> <value>FreeSql:{property} parameter error, format "TopicId=Id, multiple groups using comma connection"</value>
</data> </data>
<data name="Parsing_Failed" xml:space="preserve"> <data name="Parsing_Failed" xml:space="preserve">
<value>FreeSql:Parsing failed {callExpMethodName} {message}</value> <value>FreeSql:Parsing failed {callExpMethodName} {message}</value>
</data> </data>
<data name="Policy_ObjectPool_Dispose" xml:space="preserve"> <data name="Policy_ObjectPool_Dispose" xml:space="preserve">
<value>FreeSql:[{policyName}] The ObjectPool has been disposed, see: https://github.com/dotnetcore/FreeSql/discussions/1079</value> <value>FreeSql:[{policyName}] The ObjectPool has been disposed, see: https://github.com/dotnetcore/FreeSql/discussions/1079</value>
</data> </data>
<data name="Policy_Status_NotAvailable" xml:space="preserve"> <data name="Policy_Status_NotAvailable" xml:space="preserve">
<value>FreeSql:The {policyName} status is unavailable and cannot be used until the background checker is restored. {UnavailableExceptionMessage}</value> <value>FreeSql:The {policyName} status is unavailable and cannot be used until the background checker is restored. {UnavailableExceptionMessage}</value>
</data> </data>
<data name="Properties_AsRowLock_Must_Numeric_Byte" xml:space="preserve"> <data name="Properties_AsRowLock_Must_Numeric_Byte" xml:space="preserve">
<value>FreeSql:The property {trytbVersionColumnCsName} is labeled as a row lock (optimistic lock) (IsVersion), but it must be a numeric type or byte[], and it cannot be Nullable</value> <value>FreeSql:The property {trytbVersionColumnCsName} is labeled as a row lock (optimistic lock) (IsVersion), but it must be a numeric type or byte[], and it cannot be Nullable</value>
</data> </data>
<data name="Properties_Cannot_Null" xml:space="preserve"> <data name="Properties_Cannot_Null" xml:space="preserve">
<value>FreeSql:Properrties parameter cannot be empty</value> <value>FreeSql:Properrties parameter cannot be empty</value>
</data> </data>
<data name="Property_Cannot_Find" xml:space="preserve"> <data name="Property_Cannot_Find" xml:space="preserve">
<value>FreeSql:{property} property name not found</value> <value>FreeSql:{property} property name not found</value>
</data> </data>
<data name="Range_Comma_Separateda_By2Char" xml:space="preserve"> <data name="Range_Comma_Separateda_By2Char" xml:space="preserve">
<value>FreeSql:Range requires that Value be comma-separated and 2-length</value> <value>FreeSql:Range requires that Value be comma-separated and 2-length</value>
</data> </data>
<data name="RollBack" xml:space="preserve"> <data name="RollBack" xml:space="preserve">
<value>FreeSql:RollBack</value> <value>FreeSql:RollBack</value>
</data> </data>
<data name="RunTimeError_Reflection_IncludeMany" xml:space="preserve"> <data name="RunTimeError_Reflection_IncludeMany" xml:space="preserve">
<value>FreeSql:Runtime error, reflection failed to get IncludeMany method</value> <value>FreeSql:Runtime error, reflection failed to get IncludeMany method</value>
</data> </data>
<data name="Set_Column_IsNullable_False" xml:space="preserve"> <data name="Set_Column_IsNullable_False" xml:space="preserve">
<value>FreeSql:{qoteSql} is NULL unless the attribute [Column (IsNullable = false)]</value> <value>FreeSql:{qoteSql} is NULL unless the attribute [Column (IsNullable = false)]</value>
</data> </data>
<data name="SubTableFieldValue_CannotLessThen" xml:space="preserve"> <data name="SubTableFieldValue_CannotLessThen" xml:space="preserve">
<value>FreeSql:Subtable field value'{dt}'cannot be less than'{beginTime}'</value> <value>FreeSql:Subtable field value'{dt}'cannot be less than'{beginTime}'</value>
</data> </data>
<data name="SubTableFieldValue_IsNotNull" xml:space="preserve"> <data name="SubTableFieldValue_IsNotNull" xml:space="preserve">
<value>FreeSql:Subtable field value cannot be null</value> <value>FreeSql:Subtable field value cannot be null</value>
</data> </data>
<data name="SubTableFieldValue_NotConvertDateTime" xml:space="preserve"> <data name="SubTableFieldValue_NotConvertDateTime" xml:space="preserve">
<value>FreeSql:The tabular field value'{columnValue}'cannot be converted to DateTime</value> <value>FreeSql:The tabular field value'{columnValue}'cannot be converted to DateTime</value>
</data> </data>
<data name="SubTableFieldValue_NotMatchTable" xml:space="preserve"> <data name="SubTableFieldValue_NotMatchTable" xml:space="preserve">
<value>FreeSql:Table field value'{dt}'does not match table name</value> <value>FreeSql:Table field value'{dt}'does not match table name</value>
</data> </data>
<data name="T2_Type_Error" xml:space="preserve"> <data name="T2_Type_Error" xml:space="preserve">
<value>FreeSql:Type T2 Error</value> <value>FreeSql:Type T2 Error</value>
</data> </data>
<data name="TableName_Format_Error" xml:space="preserve"> <data name="TableName_Format_Error" xml:space="preserve">
<value>FreeSql:TableName format error, example: "log_{yyyyMMdd}"</value> <value>FreeSql:TableName format error, example: "log_{yyyyMMdd}"</value>
</data> </data>
<data name="Type_AsType_Parameter_Error" xml:space="preserve"> <data name="Type_AsType_Parameter_Error" xml:space="preserve">
<value>FreeSql:{Type}. AsType parameter error, please pass in the correct entity type</value> <value>FreeSql:{Type}. AsType parameter error, please pass in the correct entity type</value>
</data> </data>
<data name="Type_Cannot_Access_Constructor" xml:space="preserve"> <data name="Type_Cannot_Access_Constructor" xml:space="preserve">
<value>FreeSql:The {thatFullName} type cannot access the constructor</value> <value>FreeSql:The {thatFullName} type cannot access the constructor</value>
</data> </data>
<data name="Type_Error_Name" xml:space="preserve"> <data name="Type_Error_Name" xml:space="preserve">
<value>FreeSql:{name} type error</value> <value>FreeSql:{name} type error</value>
</data> </data>
<data name="TypeAsType_NotSupport_Object" xml:space="preserve"> <data name="TypeAsType_NotSupport_Object" xml:space="preserve">
<value>FreeSql:{Type}. AsType parameter does not support specifying as object</value> <value>FreeSql:{Type}. AsType parameter does not support specifying as object</value>
</data> </data>
<data name="TypeError_CannotUse_IncludeMany" xml:space="preserve"> <data name="TypeError_CannotUse_IncludeMany" xml:space="preserve">
<value>FreeSql:Type {typeofFullName} error, IncludeMany cannot be used</value> <value>FreeSql:Type {typeofFullName} error, IncludeMany cannot be used</value>
</data> </data>
<data name="Unable_Parse_Expression" xml:space="preserve"> <data name="Unable_Parse_Expression" xml:space="preserve">
<value>FreeSql:Unable to parse expression: {exp}</value> <value>FreeSql:Unable to parse expression: {exp}</value>
</data> </data>
<data name="Unable_Parse_ExpressionMethod" xml:space="preserve"> <data name="Unable_Parse_ExpressionMethod" xml:space="preserve">
<value>FreeSql:Unable to parse expression method {exp3tmpCallMethodName}</value> <value>FreeSql:Unable to parse expression method {exp3tmpCallMethodName}</value>
</data> </data>
<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>
</root> <data name="S_NotFound_Name" xml:space="preserve">
<value>FreeSql:{name} not found</value>
</data>
<data name="S_SlaveDatabase" xml:space="preserve">
<value>FreeSql:Slave Database</value>
</data>
<data name="S_MasterDatabase" xml:space="preserve">
<value>FreeSql:Master Database</value>
</data>
<data name="S_Access_InsertOnlyOneAtTime" xml:space="preserve">
<value>FreeSql:Egg pain Accs insertion can only be performed one at a time, values (..) are not supported. (..) Select is also not supported.. UNION ALL select..</value>
</data>
<data name="S_BaseEntity_Initialization_Error" xml:space="preserve">
<value>FreeSql:BaseEntity. Initialization initialization error, get IFreeSql is null</value>
</data>
<data name="S_BlockAccess_WaitForRecovery" xml:space="preserve">
<value>FreeSql:[{thisName}] Block access and wait for recovery: {exMessage}</value>
</data>
<data name="S_CannotBeConverted_To_ISelect" xml:space="preserve">
<value>FreeSql:IQueryable&lt;{typeofName}&gt; cannot be converted to ISelect&lt;{typeofName}&gt; because its implementation is not FreeSql.Extensions.Linq.QueryableProvider</value>
</data>
<data name="S_ConnectionStringError" xml:space="preserve">
<value>FreeSql:Connection string error</value>
</data>
<data name="S_ConnectionStringError_Check" xml:space="preserve">
<value>FreeSql:[{thisName}] Connection string error, please check.</value>
</data>
<data name="S_ConnectionStringError_CheckProject " xml:space="preserve">
<value>FreeSql:Connection string error, or check project properties &gt; Build &gt; Target Platform: x86 | x64</value>
</data>
<data name="S_ConnectionStringError_CheckProjectConnection" xml:space="preserve">
<value>FreeSql:[{thisName}] Connection string error, please check. Or check Project Properties &gt; Build &gt; Target Platform: x86 | x64</value>
</data>
<data name="S_CustomAdapter_Cannot_Use_CreateCommand" xml:space="preserve">
<value>FreeSql:FreeSql.Provider.CustomAdapter cannot use CreateCommand</value>
</data>
<data name="S_CustomAdapter_OnlySuppport_UseConnectionFactory " xml:space="preserve">
<value>FreeSql:FreeSql.Provider.CustomAdapter only supports building IFreeSql in the UseConnectionFactory way</value>
</data>
<data name="S_Dameng_NotSupport_TablespaceSchemas " xml:space="preserve">
<value>FreeSql:Dream CodeFirst does not support code creation tablespace and schemas {tbname}</value>
</data>
<data name="S_DB_Parameter_Error_NoConnectionString" xml:space="preserve">
<value>FreeSql:-DB parameter error, no ConnectionString provided</value>
</data>
<data name="S_DB_ParameterError" xml:space="preserve">
<value>FreeSql:-DB parameter error, format: MySql, ConnectionString</value>
</data>
<data name="S_DB_ParameterError_UnsupportedType" xml:space="preserve">
<value>FreeSql:-DB parameter error, unsupported type: "{dbargs}"</value>
</data>
<data name="S_Features_Unique" xml:space="preserve">
<value>FreeSql:{method} is FreeSql.Provider.{provider} specific features</value>
</data>
<data name="S_InsertOrUpdate_Unable_UpdateColumns" xml:space="preserve">
<value>FreeSql:Fsql. InsertOrUpdate Sqlite was unable to complete the UpdateColumns operation</value>
</data>
<data name="S_MygisGeometry_NotImplement" xml:space="preserve">
<value>FreeSql:MygisGeometry. Parse does not implement "{wkt}"</value>
</data>
<data name="S_NameOptions_Incorrect" xml:space="preserve">
<value>FreeSql:-NameOptions parameter incorrect, format: 0,0,0,0</value>
</data>
<data name="S_Not_Implemented_Feature" xml:space="preserve">
<value>FreeSql:This function is not implemented</value>
</data>
<data name="S_Not_Implemented_FeedBack" xml:space="preserve">
<value>FreeSql:Unrealized error, please feedback to author</value>
</data>
<data name="S_NotImplementSkipOffset" xml:space="preserve">
<value>FreeSql:FreeSql.Provider.{providerName} does not implement Skip/Offset functionality, use to determine last ID if paging is required</value>
</data>
<data name="S_OldTableExists" xml:space="preserve">
<value>FreeSql:Old table (OldName): {tboldname} exists, database already exists {tbname} table, cannot rename</value>
</data>
<data name="S_OnConflictDoUpdate_MustIsPrimary" xml:space="preserve">
<value>FreeSql:The OnConflictDoUpdate feature requires that entity classes must set the IsPrimary property</value>
</data>
<data name="S_Oracle_NotSupport_TablespaceSchemas" xml:space="preserve">
<value>FreeSql:Oracle CodeFirst does not support code creation of tablespace and schemas {tbname}</value>
</data>
<data name="S_ParsingFailed_UseRestoreToSelect" xml:space="preserve">
<value>FreeSql:Parsing failed {callExpMethodName} {message}, hint: Extension method IQueryable can be used. RestoreToSelect() reverted to ISelect re-query</value>
</data>
<data name="S_RequiresEntityPrimaryKey" xml:space="preserve">
<value>FreeSql:Fsql. InsertOrUpdate + IfExistsDoNothing + {providerName} requires the entity class {tableCsName} to have a primary key</value>
</data>
<data name="S_SelectManayErrorType" xml:space="preserve">
<value>FreeSql:SelectMany error type: {typeFullName}</value>
</data>
<data name="S_Type_IsNot_Migrable" xml:space="preserve">
<value>FreeSql:Type {objentityTypeFullName} is not migrable</value>
</data>
<data name="S_Type_IsNot_Migrable_0Attributes" xml:space="preserve">
<value>FreeSql:Type {objentityTypeFullName} is not migrable, migratable property 0</value>
</data>
<data name="S_TypeMappingNotImplemented" xml:space="preserve">
<value>FreeSql:{columnDbTypeTextFull} type mapping not implemented</value>
</data>
<data name="S_WrongParameter" xml:space="preserve">
<value>FreeSql:Wrong parameter setting: {args}</value>
</data>
<data name="S_ObjectPool" xml:space="preserve">
<value>FreeSql:Object pool</value>
</data>
</root>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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