- 增加 FreeSqlBuilder UseAdoConnectionPool 更换连接池方案;#1524 #1343 #1283 #755

This commit is contained in:
2881099
2023-06-08 18:35:49 +08:00
parent 7ec4279ba1
commit a7233c1926
28 changed files with 746 additions and 450 deletions

View File

@@ -552,7 +552,7 @@ namespace base_entity
.UseNoneCommandParameter(true) .UseNoneCommandParameter(true)
.UseNameConvert(NameConvertType.ToLower) .UseNameConvert(NameConvertType.ToLower)
//.UseMappingPriority(MappingPriorityType.Attribute, MappingPriorityType.FluentApi, MappingPriorityType.Aop) //.UseMappingPriority(MappingPriorityType.Attribute, MappingPriorityType.FluentApi, MappingPriorityType.Aop)
.UseAdoConnectionPool(true)
.UseConnectionString(FreeSql.DataType.Sqlite, "data source=:memory:") .UseConnectionString(FreeSql.DataType.Sqlite, "data source=:memory:")
.UseConnectionString(DataType.Sqlite, "data source=C:\\Users\\28810\\Desktop\\github\\FreeSql\\Examples\\base_entity\\AspNetRoleClaims\\ids_api.db") .UseConnectionString(DataType.Sqlite, "data source=C:\\Users\\28810\\Desktop\\github\\FreeSql\\Examples\\base_entity\\AspNetRoleClaims\\ids_api.db")
@@ -568,9 +568,9 @@ namespace base_entity
//.UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=3;TrustServerCertificate=true") //.UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=3;TrustServerCertificate=true")
.UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=192.168.164.10;Port=5432;Username=postgres;Password=123456;Database=tedb;Pooling=true;Maximum Pool Size=2") //.UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=192.168.164.10;Port=5432;Username=postgres;Password=123456;Database=tedb;Pooling=true;Maximum Pool Size=2")
//.UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=192.168.164.10;Port=5432;Username=postgres;Password=123456;Database=toc;Pooling=true;Maximum Pool Size=2") ////.UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=192.168.164.10;Port=5432;Username=postgres;Password=123456;Database=toc;Pooling=true;Maximum Pool Size=2")
.UseNameConvert(FreeSql.Internal.NameConvertType.ToLower) //.UseNameConvert(FreeSql.Internal.NameConvertType.ToLower)
//.UseConnectionString(FreeSql.DataType.Oracle, "user id=user1;password=123456;data source=//127.0.0.1:1521/XE;Pooling=true;Max Pool Size=2") //.UseConnectionString(FreeSql.DataType.Oracle, "user id=user1;password=123456;data source=//127.0.0.1:1521/XE;Pooling=true;Max Pool Size=2")
//.UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper) //.UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper)

View File

@@ -1358,6 +1358,19 @@
<param name="providerType"><EFBFBD>𣂷<EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝐餃<EFBFBD>嚗䔶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>摰𡄯<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝷算<EFBFBD>𦦵撩撠<EFBFBD> FreeSql <20>唳旿摨枏<E691A8><E69E8F><EFBFBD>嚗鎄reeSql.Provider.MySql.dll嚗<6C><EFBFBD><EFBFBD> nuget 銝贝蝸<E8B49D><EFBFBD><E89098>躰秤嚗諹秩<E8ABB9>𤾸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><E7A2B6>啁掩<E59581><EFBFBD>甇斗𧒄霂亙<E99C82><E4BA99>啣虾<E595A3><EFBFBD><E99BB4>典㦤<para></para>靘见<EFBFBD>嚗魩ypeof(FreeSql.SqlServer.SqlServerProvider&lt;&gt;)</param> <param name="providerType"><EFBFBD>𣂷<EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝐餃<EFBFBD>嚗䔶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>摰𡄯<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝷算<EFBFBD>𦦵撩撠<EFBFBD> FreeSql <20>唳旿摨枏<E691A8><E69E8F><EFBFBD>嚗鎄reeSql.Provider.MySql.dll嚗<6C><EFBFBD><EFBFBD> nuget 銝贝蝸<E8B49D><EFBFBD><E89098>躰秤嚗諹秩<E8ABB9>𤾸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><E7A2B6>啁掩<E59581><EFBFBD>甇斗𧒄霂亙<E99C82><E4BA99>啣虾<E595A3><EFBFBD><E99BB4>典㦤<para></para>靘见<EFBFBD>嚗魩ypeof(FreeSql.SqlServer.SqlServerProvider&lt;&gt;)</param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:FreeSql.FreeSqlBuilder.UseAdoConnectionPool(System.Boolean)">
<summary>
雿輻鍂<E8BCBB><EFBFBD>餈墧𦻖瘙𩤃<E79899>ado.net<65><74>dbc<62><63>ledb嚗<62><para></para>
暺䁅恕嚗餎alse<para></para>
UseConnectionString 暺䁅恕雿輻鍂 FreeSql 餈墧𦻖瘙𩤃<E79899><F0A9A483>劐誑銝讠鸌<E8AEA0><EFBFBD><para></para>
- <20><EFBFBD><E59786><EFBFBD><EFBFBD>舐鍂嚗峕鱏<E5B395>娍㦤<E5A88D>嗥凒<E597A5><EFBFBD><E595A3><EFBFBD>瘚𧢲<E7989A><EFBFBD><para></para>
- 霂餃<E99C82><E9A483><EFBFBD>氖嚗䔶<E59A97>摨㮖<E691A8><E3AE96>舐鍂嚗䔶<E59A97><E494B6><EFBFBD><EFBFBD><EFBFBD><E597A1>舐鍂隞𤾸<E99A9E><para></para>
- <20><EFBFBD>餈墧𦻖瘙牐蝙<E78990><EFBFBD><E586BD><EFBFBD>fsql.Ado.Statistics<para></para>
<20><EFBFBD><E58EB0><EFBFBD><EFBFBD><EFBFBD><E588BB><EFBFBD><EFBFBD>𨀣洽<F0A880A3>鞉鱏<E99E89>娍㦤<E5A88D><EFBFBD>𡢅<EFBFBD><F0A1A285>臭蝙<E887AD>冽迨霈曄蔭
</summary>
<param name="value"></param>
<returns></returns>
</member>
<member name="M:FreeSql.FreeSqlBuilder.UseSlave(System.String[])"> <member name="M:FreeSql.FreeSqlBuilder.UseSlave(System.String[])">
<summary> <summary>
雿輻鍂隞擧㺭<E693A7><EFBFBD>嚗峕𣈲<E5B395><F0A388B2><EFBFBD><EFBFBD> 雿輻鍂隞擧㺭<E693A7><EFBFBD>嚗峕𣈲<E5B395><F0A388B2><EFBFBD><EFBFBD>
@@ -3537,177 +3550,6 @@
<param name="parms"></param> <param name="parms"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:FreeSql.IAdo.ExecuteConnectTestAsync(System.Int32,System.Threading.CancellationToken)">
<summary>
测试数据库是否连接正确,本方法执行如下命令:<para></para>
MySql/SqlServer/PostgreSQL/达梦/人大金仓/神通: SELECT 1<para></para>
Oracle: SELECT 1 FROM dual<para></para>
</summary>
<param name="commandTimeout">命令超时设置(秒)</param>
<param name="cancellationToken"></param>
<returns>true: 成功, false: 失败</returns>
</member>
<member name="M:FreeSql.IAdo.ExecuteReaderAsync(System.Func{FreeSql.Internal.Model.FetchCallbackArgs{System.Data.Common.DbDataReader},System.Threading.Tasks.Task},System.Data.CommandType,System.String,System.Data.Common.DbParameter[],System.Threading.CancellationToken)">
<summary>
查询若使用读写分离查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】
</summary>
<param name="readerHander"></param>
<param name="cmdType"></param>
<param name="cmdText"></param>
<param name="cmdParms"></param>
<param name="cancellationToken"></param>
</member>
<member name="M:FreeSql.IAdo.ExecuteReaderAsync(System.Func{FreeSql.Internal.Model.FetchCallbackArgs{System.Data.Common.DbDataReader},System.Threading.Tasks.Task},System.String,System.Object,System.Threading.CancellationToken)">
<summary>
查询ExecuteReaderAsync(dr => {}, "select * from user where age > @age", new { age = 25 })<para></para>
提示parms 参数还可以传 Dictionary&lt;string, object&gt;
</summary>
<param name="readerHander"></param>
<param name="cmdText"></param>
<param name="parms"></param>
<param name="cancellationToken"></param>
</member>
<member name="M:FreeSql.IAdo.ExecuteArrayAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[],System.Threading.CancellationToken)">
<summary>
查询
</summary>
<param name="cmdType"></param>
<param name="cmdText"></param>
<param name="cmdParms"></param>
<param name="cancellationToken"></param>
</member>
<member name="M:FreeSql.IAdo.ExecuteArrayAsync(System.String,System.Object,System.Threading.CancellationToken)">
<summary>
查询ExecuteArrayAsync("select * from user where age > @age", new { age = 25 })<para></para>
提示parms 参数还可以传 Dictionary&lt;string, object&gt;
</summary>
<param name="cmdText"></param>
<param name="parms"></param>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="M:FreeSql.IAdo.ExecuteDataSetAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[],System.Threading.CancellationToken)">
<summary>
查询
</summary>
<param name="cmdType"></param>
<param name="cmdText"></param>
<param name="cmdParms"></param>
<param name="cancellationToken"></param>
</member>
<member name="M:FreeSql.IAdo.ExecuteDataSetAsync(System.String,System.Object,System.Threading.CancellationToken)">
<summary>
查询ExecuteDataSetAsync("select * from user where age > @age; select 2", new { age = 25 })<para></para>
提示parms 参数还可以传 Dictionary&lt;string, object&gt;
</summary>
<param name="cmdText"></param>
<param name="parms"></param>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="M:FreeSql.IAdo.ExecuteDataTableAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[],System.Threading.CancellationToken)">
<summary>
查询
</summary>
<param name="cmdType"></param>
<param name="cmdText"></param>
<param name="cmdParms"></param>
<param name="cancellationToken"></param>
</member>
<member name="M:FreeSql.IAdo.ExecuteDataTableAsync(System.String,System.Object,System.Threading.CancellationToken)">
<summary>
查询ExecuteDataTableAsync("select * from user where age > @age", new { age = 25 })<para></para>
提示parms 参数还可以传 Dictionary&lt;string, object&gt;
</summary>
<param name="cmdText"></param>
<param name="parms"></param>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="M:FreeSql.IAdo.ExecuteNonQueryAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[],System.Threading.CancellationToken)">
<summary>
在【主库】执行
</summary>
<param name="cmdType"></param>
<param name="cmdText"></param>
<param name="cmdParms"></param>
<param name="cancellationToken"></param>
</member>
<member name="M:FreeSql.IAdo.ExecuteNonQueryAsync(System.String,System.Object,System.Threading.CancellationToken)">
<summary>
在【主库】执行ExecuteNonQueryAsync("delete from user where age > @age", new { age = 25 })<para></para>
提示parms 参数还可以传 Dictionary&lt;string, object&gt;
</summary>
<param name="cmdText"></param>
<param name="parms"></param>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="M:FreeSql.IAdo.ExecuteScalarAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[],System.Threading.CancellationToken)">
<summary>
在【主库】执行
</summary>
<param name="cmdType"></param>
<param name="cmdText"></param>
<param name="cmdParms"></param>
<param name="cancellationToken"></param>
</member>
<member name="M:FreeSql.IAdo.ExecuteScalarAsync(System.String,System.Object,System.Threading.CancellationToken)">
<summary>
在【主库】执行ExecuteScalarAsync("select 1 from user where age > @age", new { age = 25 })<para></para>
提示parms 参数还可以传 Dictionary&lt;string, object&gt;
</summary>
<param name="cmdText"></param>
<param name="parms"></param>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="M:FreeSql.IAdo.QueryAsync``1(System.Data.CommandType,System.String,System.Data.Common.DbParameter[],System.Threading.CancellationToken)">
<summary>
执行SQL返回对象集合QueryAsync&lt;User&gt;("select * from user where age > @age", new SqlParameter { ParameterName = "age", Value = 25 })
</summary>
<typeparam name="T"></typeparam>
<param name="cmdType"></param>
<param name="cmdText"></param>
<param name="cmdParms"></param>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="M:FreeSql.IAdo.QueryAsync``1(System.String,System.Object,System.Threading.CancellationToken)">
<summary>
执行SQL返回对象集合QueryAsync&lt;User&gt;("select * from user where age > @age", new { age = 25 })<para></para>
提示parms 参数还可以传 Dictionary&lt;string, object&gt;
</summary>
<typeparam name="T"></typeparam>
<param name="cmdText"></param>
<param name="parms"></param>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="M:FreeSql.IAdo.QueryAsync``2(System.Data.CommandType,System.String,System.Data.Common.DbParameter[],System.Threading.CancellationToken)">
<summary>
执行SQL返回对象集合Query&lt;User&gt;("select * from user where age > @age; select * from address", new SqlParameter { ParameterName = "age", Value = 25 })
</summary>
<typeparam name="T1"></typeparam>
<typeparam name="T2"></typeparam>
<param name="cmdType"></param>
<param name="cmdText"></param>
<param name="cmdParms"></param>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="M:FreeSql.IAdo.QueryAsync``2(System.String,System.Object,System.Threading.CancellationToken)">
<summary>
执行SQL返回对象集合Query&lt;User, Address&gt;("select * from user where age > @age; select * from address", new { age = 25 })<para></para>
提示parms 参数还可以传 Dictionary&lt;string, object&gt;
</summary>
<typeparam name="T1"></typeparam>
<typeparam name="T2"></typeparam>
<param name="cmdText"></param>
<param name="parms"></param>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="E:FreeSql.IAop.ParseExpression"> <member name="E:FreeSql.IAop.ParseExpression">
<summary> <summary>
<20>航䌊摰帋<E691B0><EFBFBD><E996AB>銵刻噢撘<E599A2> <20>航䌊摰帋<E691B0><EFBFBD><E996AB>銵刻噢撘<E599A2>
@@ -4698,12 +4540,6 @@
<param name="timeout"><EFBFBD>𧒄</param> <param name="timeout"><EFBFBD>𧒄</param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:FreeSql.Internal.ObjectPool.IObjectPool`1.GetAsync">
<summary>
获取资源
</summary>
<returns></returns>
</member>
<member name="M:FreeSql.Internal.ObjectPool.IObjectPool`1.Return(FreeSql.Internal.ObjectPool.Object{`0},System.Boolean)"> <member name="M:FreeSql.Internal.ObjectPool.IObjectPool`1.Return(FreeSql.Internal.ObjectPool.Object{`0},System.Boolean)">
<summary> <summary>
雿輻鍂摰峕<E691B0><E5B395>𠬍<EFBFBD>敶坿<E695B6><EFBFBD><E99F8F> 雿輻鍂摰峕<E691B0><E5B395>𠬍<EFBFBD>敶坿<E695B6><EFBFBD><E99F8F>
@@ -4779,12 +4615,6 @@
</summary> </summary>
<param name="obj"><EFBFBD><EFBFBD>撖寡情</param> <param name="obj"><EFBFBD><EFBFBD>撖寡情</param>
</member> </member>
<member name="M:FreeSql.Internal.ObjectPool.IPolicy`1.OnGetAsync(FreeSql.Internal.ObjectPool.Object{`0})">
<summary>
从对象池获取对象成功的时候触发,通过该方法统计或初始化对象
</summary>
<param name="obj">资源对象</param>
</member>
<member name="M:FreeSql.Internal.ObjectPool.IPolicy`1.OnReturn(FreeSql.Internal.ObjectPool.Object{`0})"> <member name="M:FreeSql.Internal.ObjectPool.IPolicy`1.OnReturn(FreeSql.Internal.ObjectPool.Object{`0})">
<summary> <summary>
敶坿<E695B6>撖寡情蝏坔笆鞊⊥<E99E8A><E28AA5><EFBFBD>𧒄<EFBFBD>躰圻<E8BAB0><E59CBB> 敶坿<E695B6>撖寡情蝏坔笆鞊⊥<E99E8A><E28AA5><EFBFBD>𧒄<EFBFBD>躰圻<E8BAB0><E59CBB>
@@ -5102,142 +4932,204 @@
</member> </member>
<member name="M:FreeSql.CoreStrings.Ignored_Check_Confirm_PublicGetSet(System.Object,System.Object)"> <member name="M:FreeSql.CoreStrings.Ignored_Check_Confirm_PublicGetSet(System.Object,System.Object)">
<summary> <summary>
{tb2DbName}.{mp2MemberName} 被忽略,请检查 IsIgnore 设置,确认 get/set 为 public {tb2DbName}.{mp2MemberName} 鋡怠蕭<EFBFBD><EFBFBD>霂瑟<EFBFBD><EFBFBD><EFBFBD> IsIgnore 霈曄<E99C88>"M:FreeSql.Internal.ObjectPool.IPolicy`1.OnCheckAvailable(FreeSql.Internal.ObjectPool.Object{`0})">
<summary>
<><E79289>亙虾<E4BA99><EFBFBD><E586BD>
</summary>
<param name="obj"><EFBFBD><EFBFBD>撖寡情</param>
<returns></returns>
</member>
<member name="M:FreeSql.Internal.ObjectPool.IPolicy`1.OnAvailable">
<summary>
鈭衤辣嚗𡁜虾<F0A1819C>冽𧒄閫血<E996AB>
</summary> </summary>
</member> </member>
<member name="P:FreeSql.CoreStrings.Include_ParameterType_Error"> <member name="M:FreeSql.Internal.ObjectPool.IPolicy`1.OnUnavailable">
<summary> <summary>
Include 参数类型错误 鈭衤辣嚗帋<EFBFBD><EFBFBD>舐鍂<EFBFBD>嗉圻<EFBFBD><EFBFBD>
</summary> </summary>
</member> </member>
<member name="P:FreeSql.CoreStrings.Include_ParameterType_Error_Use_IncludeMany"> <member name="P:FreeSql.Internal.ObjectPool.Object`1.Pool">
<summary> <summary>
Include 参数类型错误,集合属性请使用 IncludeMany <EFBFBD><EFBFBD>撅𧼮笆鞊⊥<EFBFBD>
</summary> </summary>
</member> </member>
<member name="P:FreeSql.CoreStrings.Include_ParameterType_Error_Use_MemberAccess"> <member name="P:FreeSql.Internal.ObjectPool.Object`1.Id">
<summary> <summary>
Include 参数类型错误,表达式类型应该为 MemberAccess <EFBFBD>典笆鞊⊥<EFBFBD>銝剔<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
</summary> </summary>
</member> </member>
<member name="M:FreeSql.CoreStrings.IncludeMany_NotValid_Navigation(System.Object,System.Object)"> <member name="P:FreeSql.Internal.ObjectPool.Object`1.Value">
<summary> <summary>
IncludeMany 类型 {tbTypeDisplayCsharp} 的属性 {collMemMemberName} 不是有效的导航属性提示IsIgnore = true 不会成为导航属性 <EFBFBD><EFBFBD>撖寡情
</summary> </summary>
</member> </member>
<member name="M:FreeSql.CoreStrings.IncludeMany_ParameterError_OnlyUseOneParameter(System.Object)"> <member name="P:FreeSql.Internal.ObjectPool.Object`1.GetTimes">
<summary> <summary>
IncludeMany {navigateSelector} 参数错误Select 只可以使用一个参数的方法,正确格式:.Select(t =&gt;new TNavigate {{}}) 鋡怨繮<EFBFBD>𣇉<EFBFBD><EFBFBD>餅活<EFBFBD><EFBFBD>
</summary> </summary>
</member> </member>
<member name="M:FreeSql.CoreStrings.IncludeMany_ParameterError_Select_ReturnConsistentType(System.Object,System.Object)"> <member name="P:FreeSql.Internal.ObjectPool.Object`1.LastGetTime">
<20><><EFBFBD>舘繮<E88898>𡝗𧒄<F0A19D97><F0A79284>𧒄<EFBFBD><F0A79284>
</member>
<member name="P:FreeSql.Internal.ObjectPool.Object`1.LastReturnTime">
<summary> <summary>
IncludeMany {navigateSelector} 参数错误Select lambda参数返回值必须和 {collMemElementType} 类型一致 <EFBFBD><EFBFBD><EFBFBD>𤾸<EFBFBD>餈䀹𧒄<EFBFBD><EFBFBD>𧒄<EFBFBD><EFBFBD>
</summary> </summary>
</member> </member>
<member name="P:FreeSql.CoreStrings.IncludeMany_ParameterType_Error_Use_MemberAccess"> <member name="P:FreeSql.Internal.ObjectPool.Object`1.CreateTime">
<summary> <summary>
IncludeMany 参数1 类型错误,表达式类型应该为 MemberAccess <EFBFBD>𥕦遣<EFBFBD>園𡢿
</summary> </summary>
</member> </member>
<member name="M:FreeSql.CoreStrings.IncludeMany_ParameterTypeError(System.Object)"> <member name="P:FreeSql.Internal.ObjectPool.Object`1.LastGetThreadId">
<summary> <summary>
IncludeMany {navigateSelector} 参数类型错误,正确格式: a.collections.Take(1).Where(c =&gt;c.aid == a.id).Select(a=&gt; new TNavigate{{}}) <EFBFBD><EFBFBD><EFBFBD>舘繮<EFBFBD>𡝗𧒄<EFBFBD><EFBFBD>瑪蝔𤷫d
</summary> </summary>
</member> </member>
<member name="M:FreeSql.CoreStrings.InsertInto_No_Property_Selected(System.Object)"> <member name="P:FreeSql.Internal.ObjectPool.Object`1.LastReturnThreadId">
<summary> <summary>
ISelect.InsertInto() 未选择属性: {displayCsharp} <EFBFBD><EFBFBD><EFBFBD>𤾸<EFBFBD>餈䀹𧒄<EFBFBD><EFBFBD>瑪蝔𤷫d
</summary> </summary>
</member> </member>
<member name="M:FreeSql.CoreStrings.InsertInto_TypeError(System.Object)"> <member name="M:FreeSql.Internal.ObjectPool.Object`1.ResetValue">
<summary> <summary>
ISelect.InsertInto() 类型错误: {displayCsharp} <EFBFBD>滨蔭 Value <20><>
</summary> </summary>
</member> </member>
<member name="M:FreeSql.CoreStrings.InsertOrUpdate_Must_Primary_Key(System.Object)"> <member name="T:FreeSql.Internal.ObjectPool.ObjectPool`1">
<summary> <summary>
InsertOrUpdate 功能执行 merge into 要求实体类 {CsName} 必须有主键 撖寡情瘙删恣<EFBFBD><EFBFBD>
</summary>
<typeparam name="T">撖寡情蝐餃<EFBFBD></typeparam>
</member>
<member name="M:FreeSql.Internal.ObjectPool.ObjectPool`1.CheckAvailable(System.Int32)">
<summary>
<20>𤾸蝱摰𡁏𧒄璉<F0A79284><E79289>亙虾<E4BA99><EFBFBD><E586BD>
</summary>
<param name="interval"></param>
</member>
<member name="M:FreeSql.Internal.ObjectPool.ObjectPool`1.#ctor(System.Int32,System.Func{`0},System.Action{FreeSql.Internal.ObjectPool.Object{`0}})">
<summary>
<20>𥕦遣撖寡情瘙<E68385>
</summary>
<param name="poolsize">瘙惩之撠<EFBFBD></param>
<param name="createObject">瘙惩<EFBFBD>撖寡情<EFBFBD><EFBFBD><EFBFBD>撱箏<EFBFBD><EFBFBD><EFBFBD></param>
<param name="onGetObject"><EFBFBD><EFBFBD>瘙惩<EFBFBD>撖寡情<EFBFBD>𣂼<EFBFBD><EFBFBD>𠬍<EFBFBD>餈𥡝<EFBFBD>雿輻鍂<EFBFBD>齿<EFBFBD><EFBFBD></param>
</member>
<member name="M:FreeSql.Internal.ObjectPool.ObjectPool`1.#ctor(FreeSql.Internal.ObjectPool.IPolicy{`0})">
<summary>
<20>𥕦遣撖寡情瘙<E68385>
</summary>
<param name="policy">蝑𣇉裦</param>
</member>
<member name="M:FreeSql.Internal.ObjectPool.ObjectPool`1.GetFree(System.Boolean)">
<summary>
<20><EFBFBD><E79195>舐鍂韏<E98D82><E99F8F>嚗峕<E59A97><E5B395>𥕦遣韏<E981A3><E99F8F>
</summary>
<returns></returns>
</member>
<member name="T:FreeSql.CoreStrings">
<summary>
<para>
String resources used in FreeSql exceptions, etc.
</para>
<para>
These strings are exposed publicly for use by database providers and extensions.
It is unusual for application code to need these strings.
</para>
</summary> </summary>
</member> </member>
<member name="M:FreeSql.CoreStrings.InsertOrUpdate_NotSuport_Generic_UseEntity(System.Object)"> <member name="P:FreeSql.CoreStrings.Culture">
<summary> <summary>
InsertOrUpdate&lt;&gt;的泛型参数 不支持 {typeofT1},请传递您的实体类 <20><EFBFBD>敶枏<E695B6>蝥輻<E89DA5><E8BCBB><EFBFBD> CurrentUICulture 撅墧<E69285><EFBFBD><EFBFBD>
雿輻鍂甇文撩蝐餃<E89D90><EFBFBD><E99F8F>蝐餌<E89D90><E9A48C><EFBFBD><EFBFBD><EFBFBD>皞鞉䰻<E99E89><EFBFBD>銵屸<E98AB5><E5B1B8><EFBFBD><E8B8BA>
</summary> </summary>
</member> </member>
<member name="P:FreeSql.CoreStrings.Install_FreeSql_Extensions_LazyLoading"> <member name="M:FreeSql.CoreStrings.AsTable_PropertyName_FormatError(System.Object)">
<summary> <summary>
【延时加载】功能需要安装 FreeSql.Extensions.LazyLoading.dll可前往 nuget 下载 [Table(AsTable = "{asTable}")] <20><EFBFBD><EFBFBD>潭聢撘誯<E69298><EFBFBD>
</summary> </summary>
</member> </member>
<member name="M:FreeSql.CoreStrings.LazyLoading_CompilationError(System.Object,System.Object,System.Object)"> <member name="M:FreeSql.CoreStrings.AsTable_PropertyName_NotDateTime(System.Object)">
<summary> <summary>
【延时加载】{trytbTypeName} 编译错误:{exMessage}\r\n\r\n{cscode} [Table(AsTable = xx)] 霈曄蔭<E69B84><E894AD><EFBFBD><EFBFBD><EFBFBD> {atmGroupsValue} 銝齿糓 DateTime 蝐餃<E89D90>
</summary> </summary>
</member> </member>
<member name="M:FreeSql.CoreStrings.LazyLoading_EntityMustDeclarePublic(System.Object)"> <member name="M:FreeSql.CoreStrings.Available_Failed_Get_Resource(System.Object,System.Object)">
<summary> <summary>
【延时加载】实体类型 {trytbTypeName} 必须声明为 public {name}: Failed to get resource {statistics}
</summary> </summary>
</member> </member>
<member name="P:FreeSql.CoreStrings.ManyToMany_AsSelect_NotSupport_Sum_Avg_etc"> <member name="M:FreeSql.CoreStrings.Available_Thrown_Exception(System.Object)">
<summary> <summary>
ManyToMany 导航属性 .AsSelect() 暂时不可用于 Sum/Avg/Max/Min/First/ToOne/ToList 方法 {name}: An exception needs to be thrown
</summary> </summary>
</member> </member>
<member name="M:FreeSql.CoreStrings.ManyToMany_NotFound_CorrespondingField(System.Object,System.Object,System.Object,System.Object,System.Object)"> <member name="M:FreeSql.CoreStrings.Bad_Expression_Format(System.Object)">
<summary> <summary>
【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 在 {tbmidCsName} 中没有找到对应的字段,如:{midTypePropsTrytbName}{findtrytbPkCsName}、{midTypePropsTrytbName}_{findtrytbPkCsName} <EFBFBD>躰秤<EFBFBD><EFBFBD>”颲曉<EFBFBD><EFBFBD><EFBFBD> {column}
</summary> </summary>
</member> </member>
<member name="M:FreeSql.CoreStrings.ManyToMany_ParsingError_EntityMissing_PrimaryKey(System.Object,System.Object,System.Object)"> <member name="P:FreeSql.CoreStrings.Before_Chunk_Cannot_Use_Select">
<summary> <summary>
【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {tbrefTypeName} 缺少主键标识,[Column(IsPrimary = true)] Chunk <20><EFBFBD>銋见<E98A8B>銝滚虾雿輻鍂 Select
</summary> </summary>
</member> </member>
<member name="M:FreeSql.CoreStrings.ManyToMany_ParsingError_EntityMustHas_NavigateCollection(System.Object,System.Object,System.Object)"> <member name="P:FreeSql.CoreStrings.Begin_Transaction_Then_ForUpdate">
<summary> <summary>
【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {tbrefTypeName} 必须存在对应的 [Navigate(ManyToMany = x)] 集合属性 摰匧<EFBFBD>韏瑁<EFBFBD>嚗諹窈<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𠬍<EFBFBD><EFBFBD>滢蝙<EFBFBD><EFBFBD> ForUpdate
</summary> </summary>
</member> </member>
<member name="M:FreeSql.CoreStrings.ManyToMany_ParsingError_InconsistentType(System.Object,System.Object,System.Object,System.Object,System.Object,System.Object)"> <member name="P:FreeSql.CoreStrings.Cannot_Be_NULL">
<summary> <summary>
【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,{tbmidCsName}.{trycolCsName} 和 {trytbCsName}.{trytbPrimarysCsName} 类型不一致 銝滩<EFBFBD><EFBFBD> null
</summary> </summary>
</member> </member>
<member name="M:FreeSql.CoreStrings.ManyToMany_ParsingError_IntermediateClass_ErrorMessage(System.Object,System.Object,System.Object,System.Object,System.Object)"> <member name="M:FreeSql.CoreStrings.Cannot_Be_NULL_Name(System.Object)">
<summary> <summary>
【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,中间类 {tbmidCsName}.{midTypePropsTrytbName} 错误:{exMessage} {name} 銝滩<E98A9D><EFBFBD> null
</summary> </summary>
</member> </member>
<member name="M:FreeSql.CoreStrings.ManyToMany_ParsingError_IntermediateClass_NotManyToOne_OneToOne(System.Object,System.Object,System.Object,System.Object)"> <member name="M:FreeSql.CoreStrings.Cannot_Match_Property(System.Object)">
<summary> <summary>
【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,中间类 {tbmidCsName}.{midTypePropsTrytbName} 导航属性不是【ManyToOne】或【OneToOne】 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> {property}
</summary> </summary>
</member> </member>
<member name="M:FreeSql.CoreStrings.Mapping_Exception_HasNo_SamePropertyName(System.Object)"> <member name="M:FreeSql.CoreStrings.Cannot_Resolve_ExpressionTree(System.Object)">
<summary> <summary>
映射异常:{name} 没有一个属性名相同 {property} <20><EFBFBD><EFBFBD><E996AB>銝箄”颲曉<E9A2B2><E69B89><EFBFBD>
</summary> </summary>
</member> </member>
<member name="P:FreeSql.CoreStrings.MasterPool_IsNull_UseTransaction"> <member name="P:FreeSql.CoreStrings.Check_UseConnectionString">
<summary> <summary>
Ado.MasterPool 值为 null该操作无法自启用事务请显式传递【事务对象】解决 <EFBFBD><EFBFBD>㺭 masterConnectionString 銝滚虾銝箇征嚗諹窈璉<E7AA88><E79289><EFBFBD> UseConnectionString
</summary> </summary>
</member> </member>
<member name="M:FreeSql.CoreStrings.Missing_FreeSqlProvider_Package(System.Object)"> <member name="P:FreeSql.CoreStrings.Commit">
<summary> <summary>
缺少 FreeSql 数据库实现包FreeSql.Provider.{Provider}.dll可前往 nuget 下载 <EFBFBD>𣂷漱
</summary> </summary>
</member> </member>
<member name="M:FreeSql.CoreStrings.Missing_FreeSqlProvider_Package_Reason(System.Object,System.Object)"> <member name="P:FreeSql.CoreStrings.Connection_Failed_Switch_Servers">
<summary> <summary>
缺少 FreeSql 数据库实现包:{dll},可前往 nuget 下载;如果存在 {dll} 依然报错(原因是环境问题导致反射不到类型),请在 UseConnectionString/UseConnectionFactory 第三个参数手工传入 typeof({providerType}) 餈墧𦻖憭梯揖嚗<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>隞硋虾<EFBFBD><EFBFBD><EFBFBD>
</summary> </summary>
</member> </member>
<member name="M:FreeSql.CoreStrings.Navigation_Bind_Number_Different(System.Object,System.Object,System.Object,System.Object)"> <member name="M:FreeSql.CoreStrings.Custom_Expression_ParsingError(System.Object)">
<summary> <summary>
导航属性 {trytbTypeName}.{pnvName} 特性 [Navigate] Bind 数目({bindColumnsCount}) 与 外部主键数目({tbrefPrimarysLength}) 不相同 <EFBFBD><EFBFBD>銋㕑”颲曉<EFBFBD><EFBFBD><EFBFBD><EFBFBD>躰秤嚗𡁶掩<EFBFBD><EFBFBD> {exp3MethodDeclaringType} <20><><EFBFBD><E996AC><EFBFBD> static ThreadLocal&lt;ExpressionCallContext&gt; 摮埈挾<E59F88><E68CBE><EFBFBD>畾萸<E795BE><E890B8><EFBFBD>畾蛛<E795BE><E89B9B><EFBFBD>銝㗇活<E39787><EFBFBD><EFBFBD>
</summary>
</member>
<member name="P:FreeSql.CoreStrings.Custom_Reflection_IsNotNull">
<summary>
Custom { <20><EFBFBD>靽⊥<E99DBD> }銝滩<E98A9D>銝箇征嚗峕聢撘𧶏<E69298>{ <20><EFBFBD><E8B9B1>䲮瘜訫<E7989C> }{ 蝛箸聢 }{ <20><EFBFBD>靽⊥<E99DBD> }
</summary>
</member>
<member name="P:FreeSql.CoreStrings.Custom_StaticMethodName_IsNotNull">
<summary>
Custom { <20><EFBFBD><E8B9B1>䲮瘜訫<E7989C> }銝滩<E98A9D>銝箇征嚗峕聢撘𧶏<E69298>{ <20><EFBFBD><E8B9B1>䲮瘜訫<E7989C> }{ 蝛箸聢 }{ <20><EFBFBD>靽⊥<E99DBD> }
啁𤌍({tbrefPrimarysLength}) 銝滨㮾<E6BBA8><E3AEBE>
</summary> </summary>
</member> </member>
<member name="M:FreeSql.CoreStrings.Navigation_Missing_AsSelect(System.Object,System.Object)"> <member name="M:FreeSql.CoreStrings.Navigation_Missing_AsSelect(System.Object,System.Object)">
@@ -6226,7 +6118,191 @@
</member> </member>
</members> </members>
</doc> </doc>
`0})">
<member name="M:System.Linq.Expressions.LambadaExpressionExtensions.And``2(System.Linq.Expressions.Expression{System.Func{``0,``1,System.Boolean}},System.Boolean,System.Linq.Expressions.Expression{System.Func{``0,``1,System.Boolean}})">
<summary>
雿輻鍂 and <20>潭𦻖銝支葵 lambda 銵刻噢撘<E599A2>
</summary>
<param name="exp1"></param>
<param name="condition">true <20><EFBFBD><E597A5><EFBFBD></param>
<param name="exp2"></param>
<returns></returns>
</member>
<member name="M:System.Linq.Expressions.LambadaExpressionExtensions.Or``2(System.Linq.Expressions.Expression{System.Func{``0,``1,System.Boolean}},System.Linq.Expressions.Expression{System.Func{``0,``1,System.Boolean}})">
<summary>
雿輻鍂 or <20>潭𦻖銝支葵 lambda 銵刻噢撘<E599A2>
</summary>
<returns></returns>
</member>
<member name="M:System.Linq.Expressions.LambadaExpressionExtensions.Or``2(System.Linq.Expressions.Expression{System.Func{``0,``1,System.Boolean}},System.Boolean,System.Linq.Expressions.Expression{System.Func{``0,``1,System.Boolean}})">
<summary>
雿輻鍂 or <20>潭𦻖銝支葵 lambda 銵刻噢撘<E599A2>
</summary>
<param name="exp1"></param>
<param name="condition">true <20><EFBFBD><E597A5><EFBFBD></param>
<param name="exp2"></param>
<returns></returns>
</member>
<member name="M:System.Linq.Expressions.LambadaExpressionExtensions.Not``2(System.Linq.Expressions.Expression{System.Func{``0,``1,System.Boolean}},System.Boolean)">
<summary>
<> lambda 銵刻噢撘誩<E69298><E8AAA9><EFBFBD>
</summary>
<param name="exp"></param>
<param name="condition">true <20><EFBFBD><E597A5><EFBFBD></param>
<returns></returns>
</member>
<member name="M:System.Linq.Expressions.LambadaExpressionExtensions.And``3(System.Linq.Expressions.Expression{System.Func{``0,``1,``2,System.Boolean}},System.Linq.Expressions.Expression{System.Func{``0,``1,``2,System.Boolean}})">
<summary>
雿輻鍂 and <20>潭𦻖銝支葵 lambda 銵刻噢撘<E599A2>
</summary>
<returns></returns>
</member>
<member name="M:System.Linq.Expressions.LambadaExpressionExtensions.And``3(System.Linq.Expressions.Expression{System.Func{``0,``1,``2,System.Boolean}},System.Boolean,System.Linq.Expressions.Expression{System.Func{``0,``1,``2,System.Boolean}})">
<summary>
雿輻鍂 and <20>潭𦻖銝支葵 lambda 銵刻噢撘<E599A2>
</summary>
<param name="exp1"></param>
<param name="condition">true <20><EFBFBD><E597A5><EFBFBD></param>
<param name="exp2"></param>
<returns></returns>
</member>
<member name="M:System.Linq.Expressions.LambadaExpressionExtensions.Or``3(System.Linq.Expressions.Expression{System.Func{``0,``1,``2,System.Boolean}},System.Linq.Expressions.Expression{System.Func{``0,``1,``2,System.Boolean}})">
<summary>
雿輻鍂 or <20>潭𦻖銝支葵 lambda 銵刻噢撘<E599A2>
</summary>
<returns></returns>
</member>
<member name="M:System.Linq.Expressions.LambadaExpressionExtensions.Or``3(System.Linq.Expressions.Expression{System.Func{``0,``1,``2,System.Boolean}},System.Boolean,System.Linq.Expressions.Expression{System.Func{``0,``1,``2,System.Boolean}})">
<summary>
雿輻鍂 or <20>潭𦻖銝支葵 lambda 銵刻噢撘<E599A2>
</summary>
<param name="exp1"></param>
<param name="condition">true <20><EFBFBD><E597A5><EFBFBD></param>
<param name="exp2"></param>
<returns></returns>
</member>
<member name="M:System.Linq.Expressions.LambadaExpressionExtensions.Not``3(System.Linq.Expressions.Expression{System.Func{``0,``1,``2,System.Boolean}},System.Boolean)">
<summary>
<> lambda 銵刻噢撘誩<E69298><E8AAA9><EFBFBD>
</summary>
<param name="exp"></param>
<param name="condition">true <20><EFBFBD><E597A5><EFBFBD></param>
<returns></returns>
</member>
<member name="M:System.Linq.Expressions.LambadaExpressionExtensions.And``4(System.Linq.Expressions.Expression{System.Func{``0,``1,``2,``3,System.Boolean}},System.Linq.Expressions.Expression{System.Func{``0,``1,``2,``3,System.Boolean}})">
<summary>
雿輻鍂 and <20>潭𦻖銝支葵 lambda 銵刻噢撘<E599A2>
</summary>
<returns></returns>
</member>
<member name="M:System.Linq.Expressions.LambadaExpressionExtensions.And``4(System.Linq.Expressions.Expression{System.Func{``0,``1,``2,``3,System.Boolean}},System.Boolean,System.Linq.Expressions.Expression{System.Func{``0,``1,``2,``3,System.Boolean}})">
<summary>
雿輻鍂 and <20>潭𦻖銝支葵 lambda 銵刻噢撘<E599A2>
</summary>
<param name="exp1"></param>
<param name="condition">true <20><EFBFBD><E597A5><EFBFBD></param>
<param name="exp2"></param>
<returns></returns>
</member>
<member name="M:System.Linq.Expressions.LambadaExpressionExtensions.Or``4(System.Linq.Expressions.Expression{System.Func{``0,``1,``2,``3,System.Boolean}},System.Linq.Expressions.Expression{System.Func{``0,``1,``2,``3,System.Boolean}})">
<summary>
雿輻鍂 or <20>潭𦻖銝支葵 lambda 銵刻噢撘<E599A2>
</summary>
<returns></returns>
</member>
<member name="M:System.Linq.Expressions.LambadaExpressionExtensions.Or``4(System.Linq.Expressions.Expression{System.Func{``0,``1,``2,``3,System.Boolean}},System.Boolean,System.Linq.Expressions.Expression{System.Func{``0,``1,``2,``3,System.Boolean}})">
<summary>
雿輻鍂 or <20>潭𦻖銝支葵 lambda 銵刻噢撘<E599A2>
</summary>
<param name="exp1"></param>
<param name="condition">true <20><EFBFBD><E597A5><EFBFBD></param>
<param name="exp2"></param>
<returns></returns>
</member>
<member name="M:System.Linq.Expressions.LambadaExpressionExtensions.Not``4(System.Linq.Expressions.Expression{System.Func{``0,``1,``2,``3,System.Boolean}},System.Boolean)">
<summary>
<> lambda 銵刻噢撘誩<E69298><E8AAA9><EFBFBD>
</summary>
<param name="exp"></param>
<param name="condition">true <20><EFBFBD><E597A5><EFBFBD></param>
<returns></returns>
</member>
<member name="M:System.Linq.Expressions.LambadaExpressionExtensions.And``5(System.Linq.Expressions.Expression{System.Func{``0,``1,``2,``3,``4,System.Boolean}},System.Linq.Expressions.Expression{System.Func{``0,``1,``2,``3,``4,System.Boolean}})">
<summary>
雿輻鍂 and <20>潭𦻖銝支葵 lambda 銵刻噢撘<E599A2>
</summary>
<returns></returns>
</member>
<member name="M:System.Linq.Expressions.LambadaExpressionExtensions.And``5(System.Linq.Expressions.Expression{System.Func{``0,``1,``2,``3,``4,System.Boolean}},System.Boolean,System.Linq.Expressions.Expression{System.Func{``0,``1,``2,``3,``4,System.Boolean}})">
<summary>
雿輻鍂 and <20>潭𦻖銝支葵 lambda 銵刻噢撘<E599A2>
</summary>
<param name="exp1"></param>
<param name="condition">true <20><EFBFBD><E597A5><EFBFBD></param>
<param name="exp2"></param>
<returns></returns>
</member>
<member name="M:System.Linq.Expressions.LambadaExpressionExtensions.Or``5(System.Linq.Expressions.Expression{System.Func{``0,``1,``2,``3,``4,System.Boolean}},System.Linq.Expressions.Expression{System.Func{``0,``1,``2,``3,``4,System.Boolean}})">
<summary>
雿輻鍂 or <20>潭𦻖銝支葵 lambda 銵刻噢撘<E599A2>
</summary>
<returns></returns>
</member>
<member name="M:System.Linq.Expressions.LambadaExpressionExtensions.Or``5(System.Linq.Expressions.Expression{System.Func{``0,``1,``2,``3,``4,System.Boolean}},System.Boolean,System.Linq.Expressions.Expression{System.Func{``0,``1,``2,``3,``4,System.Boolean}})">
<summary>
雿輻鍂 or <20>潭𦻖銝支葵 lambda 銵刻噢撘<E599A2>
</summary>
<param name="exp1"></param>
<param name="condition">true <20><EFBFBD><E597A5><EFBFBD></param>
<param name="exp2"></param>
<returns></returns>
</member>
<member name="M:System.Linq.Expressions.LambadaExpressionExtensions.Not``5(System.Linq.Expressions.Expression{System.Func{``0,``1,``2,``3,``4,System.Boolean}},System.Boolean)">
<summary>
<> lambda 銵刻噢撘誩<E69298><E8AAA9><EFBFBD>
</summary>
<param name="exp"></param>
<param name="condition">true <20><EFBFBD><E597A5><EFBFBD></param>
<returns></returns>
</member>
<member name="M:FreeUtil.NewMongodbId">
<summary>
<20><><EFBFBD>蝐颱撮Mongodb<64><62>bjectId<49><EFBFBD><E58CA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Guid
</summary>
<returns></returns>
</member>
<member name="M:IFreeSql.Insert``1">
<summary>
<20><EFBFBD><E98DA6>唳旿
</summary>
<typeparam name="T1"></typeparam>
<returns></returns>
</member>
<member name="M:IFreeSql.Insert``1(``0)">
<summary>
<20><EFBFBD><E98DA6>唳旿嚗䔶<E59A97><E494B6><EFBFBD><EFBFBD>
</summary>
<typeparam name="T1"></typeparam>
<param name="source"></param>
<returns></returns>
</member>
<member name="M:IFreeSql.Insert``1(``0[])">
<summary>
<20><EFBFBD><E98DA6>唳旿嚗䔶<E59A97><E494B6><EFBFBD>雿𤘪㺭蝏<E3BAAD>
</summary>
<typeparam name="T1"></typeparam>
<param name="source"></param>
<returns></returns>
</member>
<member name="M:IFreeSql.Insert``1(System.Collections.Generic.List{``0})">
<summary>
<20><EFBFBD><E98DA6>唳旿嚗䔶<E59A97><E494B6><EFBFBD>雿㯄<E99BBF><E3AF84><EFBFBD>
</summary>
<typeparam name="T1"></typeparam>
<param name="source"></param>
<returns></returns>
</member>
<member name="M:IFreeSql.Insert``1(System.Collections.Generic.IEnumerable{``0})">
<summary> <summary>
<20><EFBFBD><E98DA6>唳旿嚗䔶<E59A97><E494B6><EFBFBD>雿㯄<E99BBF><E3AF84><EFBFBD> <20><EFBFBD><E98DA6>唳旿嚗䔶<E59A97><E494B6><EFBFBD>雿㯄<E99BBF><E3AF84><EFBFBD>
</summary> </summary>

View File

@@ -24,6 +24,7 @@ namespace FreeSql
bool _isLazyLoading = false; bool _isLazyLoading = false;
bool _isExitAutoDisposePool = true; bool _isExitAutoDisposePool = true;
bool _isQuoteSqlName = true; bool _isQuoteSqlName = true;
bool _isAdoConnectionPool = false;
MappingPriorityType[] _mappingPriorityTypes; MappingPriorityType[] _mappingPriorityTypes;
NameConvertType _nameConvertType = NameConvertType.None; NameConvertType _nameConvertType = NameConvertType.None;
Action<DbCommand> _aopCommandExecuting = null; Action<DbCommand> _aopCommandExecuting = null;
@@ -46,6 +47,22 @@ namespace FreeSql
return this; return this;
} }
/// <summary> /// <summary>
/// 使用原始连接池ado.net、odbc、oledb<para></para>
/// 默认false<para></para>
/// UseConnectionString 默认使用 FreeSql 连接池,有以下特点:<para></para>
/// - 状态不可用,断熔机制直到后台检测恢复<para></para>
/// - 读写分离,从库不可用,会切换其他可用从库<para></para>
/// - 监测连接池使用情况fsql.Ado.Statistics<para></para>
/// 有部分使用者不喜欢【断熔机制】,可使用此设置
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public FreeSqlBuilder UseAdoConnectionPool(bool value)
{
_isAdoConnectionPool = true;
return this;
}
/// <summary>
/// 使用从数据库,支持多个 /// 使用从数据库,支持多个
/// </summary> /// </summary>
/// <param name="slaveConnectionString">从数据库连接串</param> /// <param name="slaveConnectionString">从数据库连接串</param>
@@ -353,7 +370,12 @@ namespace FreeSql
default: throw new Exception(CoreStrings.NotSpecified_UseConnectionString_UseConnectionFactory); default: throw new Exception(CoreStrings.NotSpecified_UseConnectionString_UseConnectionFactory);
} }
} }
ret = Activator.CreateInstance(type, new object[] { _masterConnectionString, _slaveConnectionString, _connectionFactory }) as IFreeSql<TMark>; ret = Activator.CreateInstance(type, new object[]
{
_isAdoConnectionPool ? $"AdoConnectionPool,{_masterConnectionString}" : _masterConnectionString,
_slaveConnectionString,
_connectionFactory
}) as IFreeSql<TMark>;
if (ret != null) if (ret != null)
{ {
ret.CodeFirst.IsAutoSyncStructure = _isAutoSyncStructure; ret.CodeFirst.IsAutoSyncStructure = _isAutoSyncStructure;

View File

@@ -37,6 +37,7 @@ namespace FreeSql.Internal.CommonProvider
public AdoProvider(DataType dataType, string connectionString, string[] slaveConnectionStrings) public AdoProvider(DataType dataType, string connectionString, string[] slaveConnectionStrings)
{ {
if (connectionString?.StartsWith("AdoConnectionPool,") == true) connectionString = connectionString.Substring("AdoConnectionPool,".Length);
this.DataType = dataType; this.DataType = dataType;
this.ConnectionString = connectionString; this.ConnectionString = connectionString;
this.SlaveConnectionStrings = slaveConnectionStrings; this.SlaveConnectionStrings = slaveConnectionStrings;

View File

@@ -44,7 +44,7 @@ namespace FreeSql.Internal.CommonProvider
_dataType = dataType; _dataType = dataType;
_connectionFactory = connectionFactory; _connectionFactory = connectionFactory;
Policy = new DbConnectionPoolPolicy(this); Policy = new DbConnectionPoolPolicy(dataType.ToString(), connectionFactory);
} }
public IPolicy<DbConnection> Policy { get; } public IPolicy<DbConnection> Policy { get; }
@@ -94,15 +94,74 @@ namespace FreeSql.Internal.CommonProvider
} }
} }
internal class DbConnectionPoolPolicy : IPolicy<DbConnection> public class DbConnectionStringPool : IObjectPool<DbConnection>
{ {
DbConnectionPool Pool; internal DataType _dataType;
public DbConnectionPoolPolicy(DbConnectionPool pool) internal Func<DbConnection> _connectionFactory;
int _id;
public DbConnectionStringPool(DataType dataType, string name, Func<DbConnection> connectionFactory)
{ {
this.Pool = pool; _dataType = dataType;
_connectionFactory = connectionFactory;
Policy = new DbConnectionPoolPolicy(string.IsNullOrWhiteSpace(name) ? dataType.ToString() : name, connectionFactory);
} }
public string Name { get; set; } = typeof(DbConnectionPoolPolicy).GetType().FullName; public IPolicy<DbConnection> Policy { get; }
public bool IsAvailable => true;
public Exception UnavailableException => null;
public DateTime? UnavailableTime => null;
public string Statistics => "throw new NotImplementedException()";
public string StatisticsFullily => "throw new NotImplementedException()";
public void Dispose()
{
}
public Object<DbConnection> Get(TimeSpan? timeout = null)
{
var conn = _connectionFactory();
if (conn.State != ConnectionState.Open)
conn.Open();
return Object<DbConnection>.InitWith(this, Interlocked.Increment(ref _id), conn);
}
#if net40
#else
async public Task<Object<DbConnection>> GetAsync()
{
var conn = _connectionFactory();
if (conn.State != ConnectionState.Open)
await conn.OpenAsync();
return Object<DbConnection>.InitWith(this, Interlocked.Increment(ref _id), conn);
}
#endif
public void Return(Object<DbConnection> obj, bool isReset = false)
{
if (obj == null || obj.Value == null) return;
if (obj.Value.State != ConnectionState.Closed)
obj.Value.Close();
if (_dataType == DataType.Sqlite)
obj.Value.Dispose();
}
public bool SetUnavailable(Exception exception, DateTime lastGetTime)
{
return false;
}
}
public class DbConnectionPoolPolicy : IPolicy<DbConnection>
{
Func<DbConnection> _connectionFactory;
public DbConnectionPoolPolicy(string name, Func<DbConnection> connectionFactory)
{
_connectionFactory = connectionFactory;
this.Name = name;
}
public string Name { get; set; }
public int PoolSize { get; set; } = 1000; public int PoolSize { get; set; } = 1000;
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);
@@ -114,7 +173,7 @@ namespace FreeSql.Internal.CommonProvider
public DbConnection OnCreate() public DbConnection OnCreate()
{ {
var conn = Pool._connectionFactory(); var conn = _connectionFactory();
if (conn.State != ConnectionState.Open) if (conn.State != ConnectionState.Open)
conn.Open(); conn.Open();
return conn; return conn;

View File

@@ -1,12 +1,13 @@
using FreeSql.Internal; using ClickHouse.Client.ADO;
using FreeSql.Internal;
using FreeSql.Internal.CommonProvider;
using FreeSql.Internal.Model; using FreeSql.Internal.Model;
using FreeSql.Internal.ObjectPool; using FreeSql.Internal.ObjectPool;
using System; using System;
using System.Collections; using System.Collections;
using System.Data.Common; using System.Data.Common;
using System.Text; using System.Linq;
using System.Threading; using System.Threading;
using ClickHouse.Client.ADO;
namespace FreeSql.ClickHouse namespace FreeSql.ClickHouse
{ {
@@ -24,16 +25,21 @@ namespace FreeSql.ClickHouse
MasterPool = pool; MasterPool = pool;
return; return;
} }
var isAdoPool = masterConnectionString?.StartsWith("AdoConnectionPool,") ?? false;
if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length);
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new ClickHouseConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); MasterPool = isAdoPool ?
if (slaveConnectionStrings != null) new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new ClickHouseConnection(masterConnectionString)) as IObjectPool<DbConnection> :
new ClickHouseConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) var slavePool = isAdoPool ?
{ new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new ClickHouseConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
var slavePool = new ClickHouseConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); new ClickHouseConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} });
}
} }
public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn)
{ {

View File

@@ -1,10 +1,12 @@
using Dm; using Dm;
using FreeSql.Internal; using FreeSql.Internal;
using FreeSql.Internal.CommonProvider;
using FreeSql.Internal.Model; using FreeSql.Internal.Model;
using FreeSql.Internal.ObjectPool; using FreeSql.Internal.ObjectPool;
using System; using System;
using System.Collections; using System.Collections;
using System.Data.Common; using System.Data.Common;
using System.Linq;
using System.Threading; using System.Threading;
namespace FreeSql.Dameng namespace FreeSql.Dameng
@@ -22,16 +24,21 @@ namespace FreeSql.Dameng
MasterPool = pool; MasterPool = pool;
return; return;
} }
var isAdoPool = masterConnectionString?.StartsWith("AdoConnectionPool,") ?? false;
if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length);
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new DamengConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); MasterPool = isAdoPool ?
if (slaveConnectionStrings != null) new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new DmConnection(masterConnectionString)) as IObjectPool<DbConnection> :
new DamengConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) var slavePool = isAdoPool ?
{ new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new DmConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
var slavePool = new DamengConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); new DamengConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} });
}
} }
public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn)
{ {

View File

@@ -1,11 +1,12 @@
using FirebirdSql.Data.FirebirdClient; using FirebirdSql.Data.FirebirdClient;
using FreeSql.Internal; using FreeSql.Internal;
using FreeSql.Internal.CommonProvider;
using FreeSql.Internal.Model; using FreeSql.Internal.Model;
using FreeSql.Internal.ObjectPool; using FreeSql.Internal.ObjectPool;
using System; using System;
using System.Collections; using System.Collections;
using System.Data.Common; using System.Data.Common;
using System.Text; using System.Linq;
using System.Threading; using System.Threading;
namespace FreeSql.Firebird namespace FreeSql.Firebird
@@ -25,16 +26,21 @@ namespace FreeSql.Firebird
_CreateCommandConnection = pool.TestConnection; _CreateCommandConnection = pool.TestConnection;
return; return;
} }
var isAdoPool = masterConnectionString?.StartsWith("AdoConnectionPool,") ?? false;
if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length);
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new FirebirdConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); MasterPool = isAdoPool ?
if (slaveConnectionStrings != null) new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new FbConnection(masterConnectionString)) as IObjectPool<DbConnection> :
new FirebirdConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) var slavePool = isAdoPool ?
{ new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new FbConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
var slavePool = new FirebirdConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); new FirebirdConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} });
}
} }
public bool IsFirebird2_5 => ServerVersion.Contains("Firebird 2.5"); public bool IsFirebird2_5 => ServerVersion.Contains("Firebird 2.5");

View File

@@ -1,11 +1,12 @@
using FreeSql.Internal; using FreeSql.Internal;
using FreeSql.Internal.CommonProvider;
using FreeSql.Internal.Model; using FreeSql.Internal.Model;
using FreeSql.Internal.ObjectPool; using FreeSql.Internal.ObjectPool;
using System; using System;
using System.Collections; using System.Collections;
using System.Data.Common; using System.Data.Common;
using System.Data.Odbc; using System.Data.Odbc;
using System.Text; using System.Linq;
using System.Threading; using System.Threading;
namespace FreeSql.GBase namespace FreeSql.GBase
@@ -25,16 +26,21 @@ namespace FreeSql.GBase
_CreateCommandConnection = pool.TestConnection; _CreateCommandConnection = pool.TestConnection;
return; return;
} }
var isAdoPool = masterConnectionString?.StartsWith("AdoConnectionPool,") ?? false;
if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length);
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new GBaseConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); MasterPool = isAdoPool ?
if (slaveConnectionStrings != null) new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new OdbcConnection(masterConnectionString)) as IObjectPool<DbConnection> :
new GBaseConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) var slavePool = isAdoPool ?
{ new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
var slavePool = new GBaseConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); new GBaseConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} });
}
} }
public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn)

View File

@@ -1,12 +1,12 @@
using FreeSql.Internal; using FreeSql.Internal;
using FreeSql.Internal.CommonProvider;
using FreeSql.Internal.Model; using FreeSql.Internal.Model;
using FreeSql.Internal.ObjectPool; using FreeSql.Internal.ObjectPool;
using Kdbndp; using Kdbndp;
using System; using System;
using System.Collections; using System.Collections;
using System.Collections.Generic;
using System.Data.Common; using System.Data.Common;
using System.Text; using System.Linq;
using System.Threading; using System.Threading;
namespace FreeSql.KingbaseES namespace FreeSql.KingbaseES
@@ -24,16 +24,21 @@ namespace FreeSql.KingbaseES
MasterPool = pool; MasterPool = pool;
return; return;
} }
var isAdoPool = masterConnectionString?.StartsWith("AdoConnectionPool,") ?? false;
if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length);
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new KingbaseESConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); MasterPool = isAdoPool ?
if (slaveConnectionStrings != null) new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new KdbndpConnection(masterConnectionString)) as IObjectPool<DbConnection> :
new KingbaseESConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) var slavePool = isAdoPool ?
{ new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new KdbndpConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
var slavePool = new KingbaseESConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); new KingbaseESConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} });
}
} }
public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn)
{ {

View File

@@ -1,4 +1,5 @@
using FreeSql.Internal; using FreeSql.Internal;
using FreeSql.Internal.CommonProvider;
using FreeSql.Internal.Model; using FreeSql.Internal.Model;
using FreeSql.Internal.ObjectPool; using FreeSql.Internal.ObjectPool;
using System; using System;
@@ -6,7 +7,6 @@ using System.Collections;
using System.Data.Common; using System.Data.Common;
using System.Data.OleDb; using System.Data.OleDb;
using System.Linq; using System.Linq;
using System.Text;
using System.Threading; using System.Threading;
namespace FreeSql.MsAccess namespace FreeSql.MsAccess
@@ -24,16 +24,21 @@ namespace FreeSql.MsAccess
MasterPool = pool; MasterPool = pool;
return; return;
} }
var isAdoPool = masterConnectionString?.StartsWith("AdoConnectionPool,") ?? false;
if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length);
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new MsAccessConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); MasterPool = isAdoPool ?
if (slaveConnectionStrings != null) new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new OleDbConnection(masterConnectionString)) as IObjectPool<DbConnection> :
new MsAccessConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) var slavePool = isAdoPool ?
{ new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OleDbConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
var slavePool = new MsAccessConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); new MsAccessConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} });
}
} }
public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn)

View File

@@ -4,8 +4,9 @@ using FreeSql.Internal.ObjectPool;
using System; using System;
using System.Collections; using System.Collections;
using System.Data.Common; using System.Data.Common;
using System.Text;
using System.Threading; using System.Threading;
using System.Linq;
using FreeSql.Internal.CommonProvider;
#if MySqlConnector #if MySqlConnector
using MySqlConnector; using MySqlConnector;
#else #else
@@ -28,16 +29,21 @@ namespace FreeSql.MySql
MasterPool = pool; MasterPool = pool;
return; return;
} }
var isAdoPool = masterConnectionString?.StartsWith("AdoConnectionPool,") ?? false;
if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length);
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new MySqlConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); MasterPool = isAdoPool ?
if (slaveConnectionStrings != null) new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new MySqlConnection(masterConnectionString)) as IObjectPool<DbConnection> :
new MySqlConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) var slavePool = isAdoPool ?
{ new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new MySqlConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
var slavePool = new MySqlConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); new MySqlConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} });
}
} }
public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn)
{ {

View File

@@ -1,10 +1,12 @@
using FreeSql.Internal; using FreeSql.Internal;
using FreeSql.Internal.CommonProvider;
using FreeSql.Internal.Model; using FreeSql.Internal.Model;
using FreeSql.Internal.ObjectPool; using FreeSql.Internal.ObjectPool;
using System; using System;
using System.Collections; using System.Collections;
using System.Data.Common; using System.Data.Common;
using System.Data.Odbc; using System.Data.Odbc;
using System.Linq;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
@@ -23,16 +25,21 @@ namespace FreeSql.Odbc.Dameng
MasterPool = pool; MasterPool = pool;
return; return;
} }
var isAdoPool = masterConnectionString?.StartsWith("AdoConnectionPool,") ?? false;
if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length);
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new OdbcDamengConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); MasterPool = isAdoPool ?
if (slaveConnectionStrings != null) new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new OdbcConnection(masterConnectionString)) as IObjectPool<DbConnection> :
new OdbcDamengConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) var slavePool = isAdoPool ?
{ new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
var slavePool = new OdbcDamengConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); new OdbcDamengConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} });
}
} }
public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn)
{ {

View File

@@ -1,10 +1,13 @@
using FreeSql.Internal; using FreeSql.Internal;
using FreeSql.Internal.CommonProvider;
using FreeSql.Internal.Model; using FreeSql.Internal.Model;
using FreeSql.Internal.ObjectPool; using FreeSql.Internal.ObjectPool;
using FreeSql.Odbc.Dameng;
using System; using System;
using System.Collections; using System.Collections;
using System.Data.Common; using System.Data.Common;
using System.Data.Odbc; using System.Data.Odbc;
using System.Linq;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
@@ -23,16 +26,21 @@ namespace FreeSql.Odbc.Default
MasterPool = pool; MasterPool = pool;
return; return;
} }
var isAdoPool = masterConnectionString?.StartsWith("AdoConnectionPool,") ?? false;
if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length);
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new OdbcConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); MasterPool = isAdoPool ?
if (slaveConnectionStrings != null) new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new OdbcConnection(masterConnectionString)) as IObjectPool<DbConnection> :
new OdbcConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) var slavePool = isAdoPool ?
{ new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
var slavePool = new OdbcConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); new OdbcConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} });
}
} }
OdbcAdapter Adapter => (_util == null ? FreeSqlOdbcGlobalExtensions.DefaultOdbcAdapter : _util._orm.GetOdbcAdapter()); OdbcAdapter Adapter => (_util == null ? FreeSqlOdbcGlobalExtensions.DefaultOdbcAdapter : _util._orm.GetOdbcAdapter());

View File

@@ -1,11 +1,14 @@
using FreeSql.Internal; using FreeSql.Internal;
using FreeSql.Internal.CommonProvider;
using FreeSql.Internal.Model; using FreeSql.Internal.Model;
using FreeSql.Internal.ObjectPool; using FreeSql.Internal.ObjectPool;
using FreeSql.Odbc.Dameng;
using System; using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data.Common; using System.Data.Common;
using System.Data.Odbc; using System.Data.Odbc;
using System.Linq;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
@@ -24,16 +27,21 @@ namespace FreeSql.Odbc.KingbaseES
MasterPool = pool; MasterPool = pool;
return; return;
} }
var isAdoPool = masterConnectionString?.StartsWith("AdoConnectionPool,") ?? false;
if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length);
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new OdbcKingbaseESConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); MasterPool = isAdoPool ?
if (slaveConnectionStrings != null) new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new OdbcConnection(masterConnectionString)) as IObjectPool<DbConnection> :
new OdbcKingbaseESConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) var slavePool = isAdoPool ?
{ new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
var slavePool = new OdbcKingbaseESConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); new OdbcKingbaseESConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} });
}
} }
public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn)
{ {

View File

@@ -1,10 +1,13 @@
using FreeSql.Internal; using FreeSql.Internal;
using FreeSql.Internal.CommonProvider;
using FreeSql.Internal.Model; using FreeSql.Internal.Model;
using FreeSql.Internal.ObjectPool; using FreeSql.Internal.ObjectPool;
using FreeSql.Odbc.Dameng;
using System; using System;
using System.Collections; using System.Collections;
using System.Data.Common; using System.Data.Common;
using System.Data.Odbc; using System.Data.Odbc;
using System.Linq;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
@@ -24,16 +27,21 @@ namespace FreeSql.Odbc.MySql
MasterPool = pool; MasterPool = pool;
return; return;
} }
var isAdoPool = masterConnectionString?.StartsWith("AdoConnectionPool,") ?? false;
if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length);
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new OdbcMySqlConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); MasterPool = isAdoPool ?
if (slaveConnectionStrings != null) new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new OdbcConnection(masterConnectionString)) as IObjectPool<DbConnection> :
new OdbcMySqlConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) var slavePool = isAdoPool ?
{ new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
var slavePool = new OdbcMySqlConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); new OdbcMySqlConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} });
}
} }
public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn)
{ {

View File

@@ -1,10 +1,13 @@
using FreeSql.Internal; using FreeSql.Internal;
using FreeSql.Internal.CommonProvider;
using FreeSql.Internal.Model; using FreeSql.Internal.Model;
using FreeSql.Internal.ObjectPool; using FreeSql.Internal.ObjectPool;
using FreeSql.Odbc.Dameng;
using System; using System;
using System.Collections; using System.Collections;
using System.Data.Common; using System.Data.Common;
using System.Data.Odbc; using System.Data.Odbc;
using System.Linq;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
@@ -23,16 +26,21 @@ namespace FreeSql.Odbc.Oracle
MasterPool = pool; MasterPool = pool;
return; return;
} }
var isAdoPool = masterConnectionString?.StartsWith("AdoConnectionPool,") ?? false;
if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length);
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new OdbcOracleConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); MasterPool = isAdoPool ?
if (slaveConnectionStrings != null) new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new OdbcConnection(masterConnectionString)) as IObjectPool<DbConnection> :
new OdbcOracleConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) var slavePool = isAdoPool ?
{ new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
var slavePool = new OdbcOracleConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); new OdbcOracleConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} });
}
} }
public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn)
{ {

View File

@@ -1,11 +1,14 @@
using FreeSql.Internal; using FreeSql.Internal;
using FreeSql.Internal.CommonProvider;
using FreeSql.Internal.Model; using FreeSql.Internal.Model;
using FreeSql.Internal.ObjectPool; using FreeSql.Internal.ObjectPool;
using FreeSql.Odbc.Dameng;
using System; using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data.Common; using System.Data.Common;
using System.Data.Odbc; using System.Data.Odbc;
using System.Linq;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
@@ -24,16 +27,21 @@ namespace FreeSql.Odbc.PostgreSQL
MasterPool = pool; MasterPool = pool;
return; return;
} }
var isAdoPool = masterConnectionString?.StartsWith("AdoConnectionPool,") ?? false;
if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length);
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new OdbcPostgreSQLConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); MasterPool = isAdoPool ?
if (slaveConnectionStrings != null) new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new OdbcConnection(masterConnectionString)) as IObjectPool<DbConnection> :
new OdbcPostgreSQLConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) var slavePool = isAdoPool ?
{ new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
var slavePool = new OdbcPostgreSQLConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); new OdbcPostgreSQLConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} });
}
} }
public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn)

View File

@@ -1,6 +1,8 @@
using FreeSql.Internal; using FreeSql.Internal;
using FreeSql.Internal.CommonProvider;
using FreeSql.Internal.Model; using FreeSql.Internal.Model;
using FreeSql.Internal.ObjectPool; using FreeSql.Internal.ObjectPool;
using FreeSql.Odbc.Dameng;
using System; using System;
using System.Collections; using System.Collections;
using System.Data.Common; using System.Data.Common;
@@ -24,16 +26,21 @@ namespace FreeSql.Odbc.SqlServer
MasterPool = pool; MasterPool = pool;
return; return;
} }
var isAdoPool = masterConnectionString?.StartsWith("AdoConnectionPool,") ?? false;
if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length);
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new OdbcSqlServerConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); MasterPool = isAdoPool ?
if (slaveConnectionStrings != null) new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new OdbcConnection(masterConnectionString)) as IObjectPool<DbConnection> :
new OdbcSqlServerConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) var slavePool = isAdoPool ?
{ new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
var slavePool = new OdbcSqlServerConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); new OdbcSqlServerConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} });
}
} }
string[] ncharDbTypes = new[] { "NVARCHAR", "NCHAR", "NTEXT" }; string[] ncharDbTypes = new[] { "NVARCHAR", "NCHAR", "NTEXT" };

View File

@@ -1,9 +1,11 @@
using FreeSql.Internal; using FreeSql.Internal;
using FreeSql.Internal.CommonProvider;
using FreeSql.Internal.Model; using FreeSql.Internal.Model;
using FreeSql.Internal.ObjectPool; using FreeSql.Internal.ObjectPool;
using System; using System;
using System.Collections; using System.Collections;
using System.Data.Common; using System.Data.Common;
using System.Linq;
using System.Threading; using System.Threading;
namespace FreeSql.Oracle namespace FreeSql.Oracle
@@ -21,16 +23,21 @@ namespace FreeSql.Oracle
MasterPool = pool; MasterPool = pool;
return; return;
} }
var isAdoPool = masterConnectionString?.StartsWith("AdoConnectionPool,") ?? false;
if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length);
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new OracleConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); MasterPool = isAdoPool ?
if (slaveConnectionStrings != null) new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => OracleConnectionPool.CreateConnection(masterConnectionString)) as IObjectPool<DbConnection> :
new OracleConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) var slavePool = isAdoPool ?
{ new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => OracleConnectionPool.CreateConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
var slavePool = new OracleConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); new OracleConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} });
}
} }
public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn)
{ {

View File

@@ -54,6 +54,12 @@ namespace FreeSql.Oracle
} }
base.Return(obj, isRecreate); base.Return(obj, isRecreate);
} }
public static DbConnection CreateConnection(string connectionString)
{
var conn = new OracleConnection(connectionString);
return conn;
}
} }
class OracleConnectionPoolPolicy : IPolicy<DbConnection> class OracleConnectionPoolPolicy : IPolicy<DbConnection>
@@ -116,11 +122,7 @@ namespace FreeSql.Oracle
return obj.Value.Ping(true); return obj.Value.Ping(true);
} }
public DbConnection OnCreate() public DbConnection OnCreate() => OracleConnectionPool.CreateConnection(_connectionString);
{
var conn = new OracleConnection(_connectionString);
return conn;
}
public void OnDestroy(DbConnection obj) public void OnDestroy(DbConnection obj)
{ {

View File

@@ -1,8 +1,9 @@
using FreeSql.Internal; using FreeSql.Internal;
using FreeSql.Internal.CommonProvider;
using FreeSql.Internal.Model; using FreeSql.Internal.Model;
using FreeSql.Internal.ObjectPool;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
using Npgsql; using Npgsql;
using FreeSql.Internal.ObjectPool;
using System; using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
@@ -26,16 +27,21 @@ namespace FreeSql.PostgreSQL
MasterPool = pool; MasterPool = pool;
return; return;
} }
var isAdoPool = masterConnectionString?.StartsWith("AdoConnectionPool,") ?? false;
if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length);
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new PostgreSQLConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); MasterPool = isAdoPool ?
if (slaveConnectionStrings != null) new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new NpgsqlConnection(masterConnectionString)) as IObjectPool<DbConnection> :
new PostgreSQLConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) var slavePool = isAdoPool ?
{ new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new NpgsqlConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
var slavePool = new PostgreSQLConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); new PostgreSQLConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} });
}
} }
public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn)

View File

@@ -1,8 +1,9 @@
using FreeSql.Internal; using FreeSql.Internal;
using FreeSql.Internal.CommonProvider;
using FreeSql.Internal.Model; using FreeSql.Internal.Model;
using FreeSql.Internal.ObjectPool;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
using Npgsql; using Npgsql;
using FreeSql.Internal.ObjectPool;
using System; using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
@@ -26,16 +27,21 @@ namespace FreeSql.QuestDb
MasterPool = pool; MasterPool = pool;
return; return;
} }
var isAdoPool = masterConnectionString?.StartsWith("AdoConnectionPool,") ?? false;
if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length);
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new QuestDbConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); MasterPool = isAdoPool ?
if (slaveConnectionStrings != null) new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new NpgsqlConnection(masterConnectionString)) as IObjectPool<DbConnection> :
new QuestDbConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) var slavePool = isAdoPool ?
{ new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new NpgsqlConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
var slavePool = new QuestDbConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); new QuestDbConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} });
}
} }
public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn)

View File

@@ -1,12 +1,12 @@
using FreeSql.Internal; using FreeSql.Internal;
using FreeSql.Internal.CommonProvider;
using FreeSql.Internal.Model; using FreeSql.Internal.Model;
using FreeSql.Internal.ObjectPool; using FreeSql.Internal.ObjectPool;
using System; using System;
using System.Collections; using System.Collections;
using System.Collections.Generic;
using System.Data.Common; using System.Data.Common;
using System.Data.OscarClient; using System.Data.OscarClient;
using System.Text; using System.Linq;
using System.Threading; using System.Threading;
namespace FreeSql.ShenTong namespace FreeSql.ShenTong
@@ -24,16 +24,21 @@ namespace FreeSql.ShenTong
MasterPool = pool; MasterPool = pool;
return; return;
} }
var isAdoPool = masterConnectionString?.StartsWith("AdoConnectionPool,") ?? false;
if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length);
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new ShenTongConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); MasterPool = isAdoPool ?
if (slaveConnectionStrings != null) new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new OscarConnection(masterConnectionString)) as IObjectPool<DbConnection> :
new ShenTongConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) var slavePool = isAdoPool ?
{ new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OscarConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
var slavePool = new ShenTongConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); new ShenTongConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} });
}
} }
public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn)

View File

@@ -10,8 +10,8 @@ using Microsoft.Data.SqlClient;
using System.Data.SqlClient; using System.Data.SqlClient;
#endif #endif
using System.Linq; using System.Linq;
using System.Text;
using System.Threading; using System.Threading;
using FreeSql.Internal.CommonProvider;
namespace FreeSql.SqlServer namespace FreeSql.SqlServer
{ {
@@ -29,16 +29,21 @@ namespace FreeSql.SqlServer
_CreateCommandConnection = pool.TestConnection; _CreateCommandConnection = pool.TestConnection;
return; return;
} }
var isAdoPool = masterConnectionString?.StartsWith("AdoConnectionPool,") ?? false;
if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length);
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new SqlServerConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); MasterPool = isAdoPool ?
if (slaveConnectionStrings != null) new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new SqlConnection(masterConnectionString)) as IObjectPool<DbConnection> :
new SqlServerConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) var slavePool = isAdoPool ?
{ new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new SqlConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
var slavePool = new SqlServerConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); new SqlServerConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} });
}
} }
static DateTime dt1970 = new DateTime(1970, 1, 1); static DateTime dt1970 = new DateTime(1970, 1, 1);

View File

@@ -3,7 +3,6 @@ using FreeSql.Internal.Model;
using FreeSql.Internal.ObjectPool; using FreeSql.Internal.ObjectPool;
using System; using System;
using System.Collections; using System.Collections;
using System.Data;
using System.Data.Common; using System.Data.Common;
#if MicrosoftData #if MicrosoftData
using Microsoft.Data.Sqlite; using Microsoft.Data.Sqlite;
@@ -12,6 +11,8 @@ using System.Data.SQLite;
#endif #endif
using System.Text; using System.Text;
using System.Threading; using System.Threading;
using System.Linq;
using FreeSql.Internal.CommonProvider;
namespace FreeSql.Sqlite namespace FreeSql.Sqlite
{ {
@@ -29,16 +30,21 @@ namespace FreeSql.Sqlite
_CreateCommandConnection = pool.TestConnection; _CreateCommandConnection = pool.TestConnection;
return; return;
} }
var isAdoPool = masterConnectionString?.StartsWith("AdoConnectionPool,") ?? false;
if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length);
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new SqliteConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); MasterPool = isAdoPool ?
if (slaveConnectionStrings != null) new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => SqliteConnectionPool.CreateConnection(masterConnectionString)) as IObjectPool<DbConnection> :
new SqliteConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) var slavePool = isAdoPool ?
{ new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => SqliteConnectionPool.CreateConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
var slavePool = new SqliteConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); new SqliteConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} });
}
} }
public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn)
{ {

View File

@@ -1,7 +1,5 @@
using FreeSql.Internal.ObjectPool; using FreeSql.Internal.ObjectPool;
using System; using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Data; using System.Data;
using System.Data.Common; using System.Data.Common;
#if MicrosoftData #if MicrosoftData
@@ -51,6 +49,16 @@ namespace FreeSql.Sqlite
} }
internal SqliteConnectionPoolPolicy policy; internal SqliteConnectionPoolPolicy policy;
public static DbConnection CreateConnection(string connectionString)
{
#if MicrosoftData
var conn = new SqliteConnection(connectionString);
#else
var conn = new SQLiteConnection(connectionString);
#endif
return conn;
}
} }
class SqliteConnectionPoolPolicy : IPolicy<DbConnection> class SqliteConnectionPoolPolicy : IPolicy<DbConnection>
@@ -137,15 +145,7 @@ namespace FreeSql.Sqlite
return obj.Value.Ping(true); return obj.Value.Ping(true);
} }
public DbConnection OnCreate() public DbConnection OnCreate() => SqliteConnectionPool.CreateConnection(_connectionString);
{
#if MicrosoftData
var conn = new SqliteConnection(_connectionString);
#else
var conn = new SQLiteConnection(_connectionString);
#endif
return conn;
}
public void OnDestroy(DbConnection obj) public void OnDestroy(DbConnection obj)
{ {

View File

@@ -1,4 +1,5 @@
using FreeSql.Internal; using FreeSql.Internal;
using FreeSql.Internal.CommonProvider;
using FreeSql.Internal.Model; using FreeSql.Internal.Model;
using FreeSql.Internal.ObjectPool; using FreeSql.Internal.ObjectPool;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
@@ -24,16 +25,21 @@ namespace FreeSql.Xugu
MasterPool = new FreeSql.Internal.CommonProvider.DbConnectionPool(DataType.PostgreSQL, connectionFactory); MasterPool = new FreeSql.Internal.CommonProvider.DbConnectionPool(DataType.PostgreSQL, connectionFactory);
return; return;
} }
var isAdoPool = masterConnectionString?.StartsWith("AdoConnectionPool,") ?? false;
if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length);
if (!string.IsNullOrEmpty(masterConnectionString)) if (!string.IsNullOrEmpty(masterConnectionString))
MasterPool = new XuguConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); MasterPool = isAdoPool ?
if (slaveConnectionStrings != null) new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new XGConnection(masterConnectionString)) as IObjectPool<DbConnection> :
new XuguConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null);
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
{ {
foreach (var slaveConnectionString in slaveConnectionStrings) var slavePool = isAdoPool ?
{ new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new XGConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
var slavePool = new XuguConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); new XuguConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
SlavePools.Add(slavePool); SlavePools.Add(slavePool);
} });
}
} }
public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn)