From 6da909c54b3a9b33b1d659202c0be122b3833201 Mon Sep 17 00:00:00 2001 From: nsnail Date: Fri, 20 Sep 2024 13:32:14 +0800 Subject: [PATCH 01/38] Update README.zh-CN.md --- README.zh-CN.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.zh-CN.md b/README.zh-CN.md index 117a57aad..61779560d 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -33,6 +33,7 @@ QQ群:561616019(在线)、4336577(已满)、8578575(已满)、52508226(已满) - [zhontai.net Admin 后台管理系统](https://github.com/zhontai/Admin.Core) - [A simple and practical CMS implemented by .NET Core](https://github.com/luoyunchong/lin-cms-dotnetcore) - [AIBPM 一个开源的工作流引擎](https://github.com/leooneone/aibpm.plus) +- [NetAdmin C#12/.NET9、FreeSql 快速开发框架](https://github.com/nsnail/NetAdmin)

From bf90738e6649a429812a313210d927e8fca93a37 Mon Sep 17 00:00:00 2001 From: nsnail Date: Fri, 20 Sep 2024 17:00:54 +0800 Subject: [PATCH 02/38] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit tku, dalao! --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 03a6c4492..427f6e344 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,7 @@ QQ Groups:**561616019(available)**、4336577(full)、8578575(full)、52508226( - [Zhontai.net Management System](https://github.com/zhontai/Admin.Core) - [A simple CMS implemented by .NET8](https://github.com/luoyunchong/lin-cms-dotnetcore) - [AIBPM workflow](https://github.com/leooneone/aibpm.plus) +- [NetAdmin A rapid development framework based on C#12/.NET9 and FreeSql](https://github.com/leooneone/aibpm.plus)

From 7fa58ab0a164867116e83dc77a387398b0d6c4f1 Mon Sep 17 00:00:00 2001 From: nsnail Date: Fri, 20 Sep 2024 17:01:42 +0800 Subject: [PATCH 03/38] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 427f6e344..f93f85795 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ QQ Groups:**561616019(available)**、4336577(full)、8578575(full)、52508226( - [Zhontai.net Management System](https://github.com/zhontai/Admin.Core) - [A simple CMS implemented by .NET8](https://github.com/luoyunchong/lin-cms-dotnetcore) - [AIBPM workflow](https://github.com/leooneone/aibpm.plus) -- [NetAdmin A rapid development framework based on C#12/.NET9 and FreeSql](https://github.com/leooneone/aibpm.plus) +- [NetAdmin A rapid development framework based on C#12/.NET9 and FreeSql](https://github.com/nsnail/NetAdmin)

From 4d0b5832b4e8ad7c5d8310b712153ccdc06e2c32 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Thu, 24 Oct 2024 13:10:51 +0800 Subject: [PATCH 04/38] update readme --- README.md | 2 +- docs/.gitignore | 15 ---- docs/README.md | 14 --- docs/api/index.md | 2 - docs/docfx.json | 142 ------------------------------- docs/freesql/provider/index.md | 0 docs/freesql/repository/index.md | 2 - docs/images/logo.svg | 104 ---------------------- docs/index.md | 11 --- docs/toc.yml | 11 --- 10 files changed, 1 insertion(+), 302 deletions(-) delete mode 100644 docs/.gitignore delete mode 100644 docs/README.md delete mode 100644 docs/api/index.md delete mode 100644 docs/docfx.json delete mode 100644 docs/freesql/provider/index.md delete mode 100644 docs/freesql/repository/index.md delete mode 100644 docs/images/logo.svg delete mode 100644 docs/index.md delete mode 100644 docs/toc.yml diff --git a/README.md b/README.md index f93f85795..e27e2db7f 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ QQ Groups:**561616019(available)**、4336577(full)、8578575(full)、52508226( | - | | [Get started](https://github.com/dotnetcore/FreeSql/wiki/Getting-Started)  \|  [Select](https://github.com/dotnetcore/FreeSql/wiki/Query-Data)  \|  [Update](https://github.com/dotnetcore/FreeSql/wiki/Update-Data)  \|  [Insert](https://github.com/dotnetcore/FreeSql/wiki/Insert-Data)  \|  [Delete](https://github.com/dotnetcore/FreeSql/wiki/Delete-Data)  \|  [FAQ](https://github.com/dotnetcore/FreeSql/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98)  | | [Expression](https://github.com/dotnetcore/FreeSql/wiki/%e8%a1%a8%e8%be%be%e5%bc%8f%e5%87%bd%e6%95%b0)  \|  [CodeFirst](https://github.com/dotnetcore/FreeSql/wiki/CodeFirst)  \|  [DbFirst](https://github.com/2881099/FreeSql/wiki/DbFirst)  \|  [Filters](https://github.com/dotnetcore/FreeSql/wiki/%e8%bf%87%e6%bb%a4%e5%99%a8)  \|  [AOP](https://github.com/2881099/FreeSql/wiki/AOP)  | -| [Repository](https://github.com/dotnetcore/FreeSql/wiki/Repository-layer)  \|  [UnitOfWork](https://github.com/dotnetcore/FreeSql/wiki/Unit-of-Work)  \|  [DbContext](https://github.com/dotnetcore/FreeSql/wiki/DbContext)  \|  [ADO](https://github.com/2881099/FreeSql/wiki/ADO)  | +| [Repository](https://github.com/dotnetcore/FreeSql/wiki/Repository-layer)  \|  [UnitOfWork](https://github.com/dotnetcore/FreeSql/wiki/Unit-of-Work)  \|  [Dynamic Operations](https://github.com/dotnetcore/FreeSql/wiki/%E5%8A%A8%E6%80%81%E6%93%8D%E4%BD%9C)  \|  [ADO](https://github.com/2881099/FreeSql/wiki/ADO)  | | [Read/Write](https://github.com/dotnetcore/FreeSql/wiki/%e8%af%bb%e5%86%99%e5%88%86%e7%a6%bb)  \|  [Splitting Table](https://github.com/dotnetcore/FreeSql/wiki/%e5%88%86%e8%a1%a8%e5%88%86%e5%ba%93)  \|  [Hide tech](https://github.com/dotnetcore/FreeSql/wiki/%E9%AA%9A%E6%93%8D%E4%BD%9C)  \|  [*Update Notes*](https://github.com/dotnetcore/FreeSql/wiki/%e6%9b%b4%e6%96%b0%e6%97%a5%e5%bf%97)  | > Please select a development mode: diff --git a/docs/.gitignore b/docs/.gitignore deleted file mode 100644 index d5705ab89..000000000 --- a/docs/.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -############### -# folder # -############### -/**/DROP/ -/**/TEMP/ -/**/packages/ -/**/bin/ -/**/obj/ -_site -/freesql/provider/*.yml -/freesql/provider/.manifest -/freesql/repository/*.yml -/freesql/repository/.manifest -/api/*.yml -/api/.manifest \ No newline at end of file diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index df64eec7b..000000000 --- a/docs/README.md +++ /dev/null @@ -1,14 +0,0 @@ - -### DocFX -- https://dotnet.github.io/docfx/tutorial/docfx_getting_started.html - - -run - -``` -docfx docfx_project\docfx.json --serve - -or - -docfx .\docfx.json --serve -``` \ No newline at end of file diff --git a/docs/api/index.md b/docs/api/index.md deleted file mode 100644 index 22d15855f..000000000 --- a/docs/api/index.md +++ /dev/null @@ -1,2 +0,0 @@ -# FreeSql -TODO: Add .NET projects to the *src* folder and run `docfx` to generate **REAL** *API Documentation*! diff --git a/docs/docfx.json b/docs/docfx.json deleted file mode 100644 index df093dcca..000000000 --- a/docs/docfx.json +++ /dev/null @@ -1,142 +0,0 @@ -{ - "metadata": [ - { - "src": [ - { - "files": [ - "FreeSql/*.csproj" - ], - "exclude": [ - "**/bin/**", - "**/obj/**" - ], - "src": "../" - } - ], - "dest": "api", - "disableGitFeatures": false, - "disableDefaultFilter": false - }, - { - "src": [ - { - "files": [ - "FreeSql.DbContext/*.csproj", - "FreeSql.Repository/*.csproj" - ], - "exclude": [ - "**/bin/**", - "**/obj/**" - ], - "src": "../" - } - ], - "dest": "freesql/repository", - "disableGitFeatures": false, - "disableDefaultFilter": false - }, - { - "src": [ - { - "files": [ - "Providers/FreeSql.Provider.ClickHouse/*.csproj", - "Providers/FreeSql.Provider.Dameng/*.csproj", - "Providers/FreeSql.Provider.Custom/*.csproj", - "Providers/FreeSql.Provider.Firebird/*.csproj", - "Providers/FreeSql.Provider.GBase/*.csproj", - "Providers/FreeSql.Provider.KingbaseES/*.csproj", - "Providers/FreeSql.Provider.MsAccess/*.csproj", - "Providers/FreeSql.Provider.MySql/*.csproj", - "Providers/FreeSql.Provider.MySqlConnector/*.csproj", - "Providers/FreeSql.Provider.Odbc/*.csproj", - "Providers/FreeSql.Provider.Oracle/*.csproj", - "Providers/FreeSql.Provider.PostgreSQL/*.csproj", - "Providers/FreeSql.Provider.ShenTong*.csproj", - "Providers/FreeSql.Provider.SqlServer/*.csproj", - "Providers/FreeSql.Provider.SqlServerForSystem/*.csproj", - "Providers/FreeSql.Provider.Sqlite/*.csproj", - "Providers/FreeSql.Provider.SqliteCore/*.csproj" - ], - "exclude": [ - "**/bin/**", - "**/obj/**" - ], - "src": "../" - } - ], - "dest": "freesql/provider", - "disableGitFeatures": false, - "disableDefaultFilter": false - } - ], - "build": { - "content": [ - { - "files": [ - "api/**.yml", - "api/index.md" - ] - }, - { - "files": [ - "freesql/repository/**.yml", - "freesql/repository/index.md" - ] - }, - { - "files": [ - "freesql/provider/**.yml", - "freesql/provider/index.md" - ] - }, - { - "files": [ - "articles/**.md", - "articles/**/toc.yml", - "toc.yml", - "*.md" - ] - } - ], - "resource": [ - { - "files": [ - "images/**", - "styles/**" - ] - } - ], - "overwrite": [ - { - "files": [ - "Docs/**.md" - ], - "exclude": [ - "obj/**", - "_site/**" - ] - } - ], - "dest": "_site", - "globalMetadataFiles": [], - "fileMetadataFiles": [], - "template": [ - "default" - ], - "globalMetadata": { - "_appTitle": "FreeSql API Docs", - "_appLogoPath": "./images/logo.svg", - "_gitContribute": { - "repo": "https://github.com/dotnetcore/freesql", - "branch": "master" - }, - "_enableSearch": true - }, - "postProcessors": [], - "markdownEngineName": "markdig", - "noLangKeyword": false, - "keepFileLink": false, - "cleanupCacheHistory": false, - "disableGitFeatures": false - } -} diff --git a/docs/freesql/provider/index.md b/docs/freesql/provider/index.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/docs/freesql/repository/index.md b/docs/freesql/repository/index.md deleted file mode 100644 index 726a58de0..000000000 --- a/docs/freesql/repository/index.md +++ /dev/null @@ -1,2 +0,0 @@ -# repository -TODO: Add .NET projects to the *src* folder and run `docfx` to generate **REAL** *API Documentation*! diff --git a/docs/images/logo.svg b/docs/images/logo.svg deleted file mode 100644 index 0af3c5728..000000000 --- a/docs/images/logo.svg +++ /dev/null @@ -1,104 +0,0 @@ - - - - diff --git a/docs/index.md b/docs/index.md deleted file mode 100644 index f63cb3c64..000000000 --- a/docs/index.md +++ /dev/null @@ -1,11 +0,0 @@ - -# FreeSql Document - -#### [http://freesql.net](http://freesql.net) - - - - .NET orm, Mysql orm, Postgresql orm, SqlServer orm, Oracle orm, Sqlite orm, Firebird orm, 达梦 orm, 人大金仓 orm, 神通 orm, MsAccess orm. - - - Github [https://github.com/dotnetcore/freesql](https://github.com/dotnetcore/freesql) - - Gitee [https://gitee.com/FreeSql/FreeSql-ORM](https://gitee.com/FreeSql/FreeSql-ORM) diff --git a/docs/toc.yml b/docs/toc.yml deleted file mode 100644 index e9b1d9621..000000000 --- a/docs/toc.yml +++ /dev/null @@ -1,11 +0,0 @@ -- name: FreeSql Documentation - href: api/ - homepage: api/index.md - -- name: Repository Documentation - href: freesql/repository/ - homepage: freesql/repository/index.md - -- name: Provider Documentation - href: freesql/provider/ - homepage: freesql/provider/index.md From a7ddaff4707e9cd5a8e30789b51a6187f87baeaa Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Thu, 24 Oct 2024 14:22:03 +0800 Subject: [PATCH 05/38] =?UTF-8?q?-=20=E4=BC=98=E5=8C=96=20UnionAll=20?= =?UTF-8?q?=E4=B8=BA=20null=20=E7=9A=84=20query=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Internal/CommonProvider/SelectProvider/Select1Provider.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs index 99fd0dc27..a06685c5d 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs @@ -213,6 +213,8 @@ namespace FreeSql.Internal.CommonProvider public ISelect UnionAll(params ISelect[] querys) { + querys = querys?.Where(q => q != null).ToArray(); + if (querys?.Any() != true) return this; var ret = (_orm as BaseDbProvider).CreateSelectProvider(null) as Select1Provider; var sb = new StringBuilder().Append(LocalGetQuerySql(this)); foreach (var select2 in querys) From 74a098b678da4ea8b75d767597e20bb5b53e6b60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=8B=E9=91=AB=E9=91=AB?= <1368084801@qq.com> Date: Tue, 29 Oct 2024 14:50:52 +0800 Subject: [PATCH 06/38] =?UTF-8?q?=E6=89=A9=E5=B1=95SqlExt=EF=BC=8C?= =?UTF-8?q?=E6=96=B0=E5=A2=9EDateDiff=E6=96=B9=E6=B3=95=EF=BC=8C=E6=94=AF?= =?UTF-8?q?=E6=8C=81SqlServer=E5=92=8CMySql=E6=97=B6=E9=97=B4=E5=B7=AE?= =?UTF-8?q?=E5=80=BC=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FreeSqlGlobalExpressionCallExtensions.cs | 996 +++++++++--------- 1 file changed, 526 insertions(+), 470 deletions(-) diff --git a/FreeSql/Extensions/FreeSqlGlobalExpressionCallExtensions.cs b/FreeSql/Extensions/FreeSqlGlobalExpressionCallExtensions.cs index 62d242ee8..eb3ebb16a 100644 --- a/FreeSql/Extensions/FreeSqlGlobalExpressionCallExtensions.cs +++ b/FreeSql/Extensions/FreeSqlGlobalExpressionCallExtensions.cs @@ -10,158 +10,158 @@ using static FreeSql.SqlExtExtensions; [ExpressionCall] public static class FreeSqlGlobalExpressionCallExtensions { - public static ThreadLocal expContext = new ThreadLocal(); + public static ThreadLocal expContext = new ThreadLocal(); - ///

- /// C#: that >= between && that <= and - /// SQL: that BETWEEN between AND and - /// - /// - /// - /// - /// - public static bool Between(this DateTime that, DateTime between, DateTime and) - { - if (expContext.IsValueCreated == false || expContext.Value == null || expContext.Value.ParsedContent == null) - return that >= between && that <= and; - var time1 = expContext.Value.RawExpression["between"].IsParameter() == false ? - expContext.Value.FormatSql(Expression.Lambda(expContext.Value.RawExpression["between"]).Compile().DynamicInvoke()) : - expContext.Value.ParsedContent["between"]; - var time2 = expContext.Value.RawExpression["and"].IsParameter() == false ? - expContext.Value.FormatSql(Expression.Lambda(expContext.Value.RawExpression["and"]).Compile().DynamicInvoke()) : - expContext.Value.ParsedContent["and"]; - expContext.Value.Result = $"{expContext.Value.ParsedContent["that"]} between {time1} and {time2}"; - return false; - } + /// + /// C#: that >= between && that <= and + /// SQL: that BETWEEN between AND and + /// + /// + /// + /// + /// + public static bool Between(this DateTime that, DateTime between, DateTime and) + { + if (expContext.IsValueCreated == false || expContext.Value == null || expContext.Value.ParsedContent == null) + return that >= between && that <= and; + var time1 = expContext.Value.RawExpression["between"].IsParameter() == false ? + expContext.Value.FormatSql(Expression.Lambda(expContext.Value.RawExpression["between"]).Compile().DynamicInvoke()) : + expContext.Value.ParsedContent["between"]; + var time2 = expContext.Value.RawExpression["and"].IsParameter() == false ? + expContext.Value.FormatSql(Expression.Lambda(expContext.Value.RawExpression["and"]).Compile().DynamicInvoke()) : + expContext.Value.ParsedContent["and"]; + expContext.Value.Result = $"{expContext.Value.ParsedContent["that"]} between {time1} and {time2}"; + return false; + } - /// - /// 注意:这个方法和 Between 有细微区别 - /// C#: that >= start && that < end - /// SQL: that >= start and that < end - /// - /// - /// - /// - /// - public static bool BetweenEnd(this DateTime that, DateTime start, DateTime end) - { - if (expContext.IsValueCreated == false || expContext.Value == null || expContext.Value.ParsedContent == null) - return that >= start && that < end; - var time1 = expContext.Value.RawExpression["start"].IsParameter() == false ? - expContext.Value.FormatSql(Expression.Lambda(expContext.Value.RawExpression["start"]).Compile().DynamicInvoke()) : - expContext.Value.ParsedContent["start"]; - var time2 = expContext.Value.RawExpression["end"].IsParameter() == false ? - expContext.Value.FormatSql(Expression.Lambda(expContext.Value.RawExpression["end"]).Compile().DynamicInvoke()) : - expContext.Value.ParsedContent["end"]; - expContext.Value.Result = $"{expContext.Value.ParsedContent["that"]} >= {time1} and {expContext.Value.ParsedContent["that"]} < {time2}"; - return false; - } + /// + /// 注意:这个方法和 Between 有细微区别 + /// C#: that >= start && that < end + /// SQL: that >= start and that < end + /// + /// + /// + /// + /// + public static bool BetweenEnd(this DateTime that, DateTime start, DateTime end) + { + if (expContext.IsValueCreated == false || expContext.Value == null || expContext.Value.ParsedContent == null) + return that >= start && that < end; + var time1 = expContext.Value.RawExpression["start"].IsParameter() == false ? + expContext.Value.FormatSql(Expression.Lambda(expContext.Value.RawExpression["start"]).Compile().DynamicInvoke()) : + expContext.Value.ParsedContent["start"]; + var time2 = expContext.Value.RawExpression["end"].IsParameter() == false ? + expContext.Value.FormatSql(Expression.Lambda(expContext.Value.RawExpression["end"]).Compile().DynamicInvoke()) : + expContext.Value.ParsedContent["end"]; + expContext.Value.Result = $"{expContext.Value.ParsedContent["that"]} >= {time1} and {expContext.Value.ParsedContent["that"]} < {time2}"; + return false; + } } namespace FreeSql { - /// - /// SqlExt 是利用自定表达式函数解析功能,解析默认常用的SQL函数,欢迎 PR - /// - [ExpressionCall] - public static class SqlExt - { - internal static ThreadLocal expContext = new ThreadLocal(); + /// + /// SqlExt 是利用自定表达式函数解析功能,解析默认常用的SQL函数,欢迎 PR + /// + [ExpressionCall] + public static class SqlExt + { + internal static ThreadLocal expContext = new ThreadLocal(); - //public static bool BitAnd(TEnum enum1, [RawValue] TEnum enum2) - //{ - // expContext.Value.Result = $"({expContext.Value.ParsedContent["enum1"]} & {Convert.ToInt32(enum2)}) = {Convert.ToInt32(enum2)}"; - // return false; - //} - //public static bool BitOr(TEnum enum1, [RawValue] TEnum enum2) - //{ - // expContext.Value.Result = $"({expContext.Value.ParsedContent["enum1"]} | {Convert.ToInt32(enum2)}) = {Convert.ToInt32(enum2)}"; - // return false; - //} + //public static bool BitAnd(TEnum enum1, [RawValue] TEnum enum2) + //{ + // expContext.Value.Result = $"({expContext.Value.ParsedContent["enum1"]} & {Convert.ToInt32(enum2)}) = {Convert.ToInt32(enum2)}"; + // return false; + //} + //public static bool BitOr(TEnum enum1, [RawValue] TEnum enum2) + //{ + // expContext.Value.Result = $"({expContext.Value.ParsedContent["enum1"]} | {Convert.ToInt32(enum2)}) = {Convert.ToInt32(enum2)}"; + // return false; + //} - #region SqlServer/PostgreSQL over - /// - /// rank() over(order by ...) - /// - /// - public static ISqlOver Rank() => Over("rank()"); - /// - /// dense_rank() over(order by ...) - /// - /// - public static ISqlOver DenseRank() => Over("dense_rank()"); - /// - /// count() over(order by ...) - /// - /// - public static ISqlOver Count(object column) => Over($"count({expContext.Value.ParsedContent["column"]})"); - /// - /// sum(..) over(order by ...) - /// - /// - /// - public static ISqlOver Sum(object column) => Over($"sum({expContext.Value.ParsedContent["column"]})"); - /// - /// avg(..) over(order by ...) - /// - /// - public static ISqlOver Avg(object column) => Over($"avg({expContext.Value.ParsedContent["column"]})"); - /// - /// max(..) over(order by ...) - /// - /// - /// - /// - public static ISqlOver Max(T column) => Over($"max({expContext.Value.ParsedContent["column"]})"); - /// - /// min(..) over(order by ...) - /// - /// - /// - /// - public static ISqlOver Min(T column) => Over($"min({expContext.Value.ParsedContent["column"]})"); - /// - /// SqlServer row_number() over(order by ...) - /// - /// - public static ISqlOver RowNumber() => Over("row_number()"); - #endregion + #region SqlServer/PostgreSQL over + /// + /// rank() over(order by ...) + /// + /// + public static ISqlOver Rank() => Over("rank()"); + /// + /// dense_rank() over(order by ...) + /// + /// + public static ISqlOver DenseRank() => Over("dense_rank()"); + /// + /// count() over(order by ...) + /// + /// + public static ISqlOver Count(object column) => Over($"count({expContext.Value.ParsedContent["column"]})"); + /// + /// sum(..) over(order by ...) + /// + /// + /// + public static ISqlOver Sum(object column) => Over($"sum({expContext.Value.ParsedContent["column"]})"); + /// + /// avg(..) over(order by ...) + /// + /// + public static ISqlOver Avg(object column) => Over($"avg({expContext.Value.ParsedContent["column"]})"); + /// + /// max(..) over(order by ...) + /// + /// + /// + /// + public static ISqlOver Max(T column) => Over($"max({expContext.Value.ParsedContent["column"]})"); + /// + /// min(..) over(order by ...) + /// + /// + /// + /// + public static ISqlOver Min(T column) => Over($"min({expContext.Value.ParsedContent["column"]})"); + /// + /// SqlServer row_number() over(order by ...) + /// + /// + public static ISqlOver RowNumber() => Over("row_number()"); + #endregion - /// - /// isnull、ifnull、coalesce、nvl - /// - /// - /// - /// - /// - public static TValue IsNull(TValue value, TValue defaultValue) - { - expContext.Value.Result = expContext.Value._commonExp._common.IsNull(expContext.Value.ParsedContent["value"], expContext.Value.ParsedContent["defaultValue"]); - return default(TValue); - } + /// + /// isnull、ifnull、coalesce、nvl + /// + /// + /// + /// + /// + public static TValue IsNull(TValue value, TValue defaultValue) + { + expContext.Value.Result = expContext.Value._commonExp._common.IsNull(expContext.Value.ParsedContent["value"], expContext.Value.ParsedContent["defaultValue"]); + return default(TValue); + } - /// - /// count(distinct name) - /// - /// - /// - /// - public static long DistinctCount(T column) - { - expContext.Value.Result = $"count(distinct {expContext.Value.ParsedContent["column"]})"; - return 0; - } + /// + /// count(distinct name) + /// + /// + /// + /// + public static long DistinctCount(T column) + { + expContext.Value.Result = $"count(distinct {expContext.Value.ParsedContent["column"]})"; + return 0; + } - /// - /// 注意:使用者自己承担【注入风险】 - /// - /// - /// - static bool InternalRawSql([RawValue] string sql) - { - expContext.Value.Result = sql; - return false; - } + /// + /// 注意:使用者自己承担【注入风险】 + /// + /// + /// + static bool InternalRawSql([RawValue] string sql) + { + expContext.Value.Result = sql; + return false; + } static object InternalRawField([RawValue] string sql) { expContext.Value.Result = sql; @@ -174,340 +174,396 @@ namespace FreeSql /// /// public static bool GreaterThan(TValue value1, TValue value2) - { - expContext.Value.Result = $"{expContext.Value.ParsedContent["value1"]} > {expContext.Value.ParsedContent["value2"]}"; - return false; - } - /// - /// 大于或等于 >= - /// - /// - public static bool GreaterThanOrEqual(TValue value1, TValue value2) - { - expContext.Value.Result = $"{expContext.Value.ParsedContent["value1"]} >= {expContext.Value.ParsedContent["value2"]}"; - return false; - } - /// - /// 小于 < - /// - /// - public static bool LessThan(TValue value1, TValue value2) - { - expContext.Value.Result = $"{expContext.Value.ParsedContent["value1"]} < {expContext.Value.ParsedContent["value2"]}"; - return false; - } - /// - /// 小于或等于 <= - /// - /// - public static bool LessThanOrEqual(TValue value1, TValue value2) - { - expContext.Value.Result = $"{expContext.Value.ParsedContent["value1"]} <= {expContext.Value.ParsedContent["value2"]}"; - return false; - } - /// - /// value1 IS NULL - /// - /// - /// - /// - public static bool EqualIsNull(TValue value1) - { - expContext.Value.Result = $"{expContext.Value.ParsedContent["value1"]} IS NULL"; - return false; - } - #endregion + { + expContext.Value.Result = $"{expContext.Value.ParsedContent["value1"]} > {expContext.Value.ParsedContent["value2"]}"; + return false; + } + /// + /// 大于或等于 >= + /// + /// + public static bool GreaterThanOrEqual(TValue value1, TValue value2) + { + expContext.Value.Result = $"{expContext.Value.ParsedContent["value1"]} >= {expContext.Value.ParsedContent["value2"]}"; + return false; + } + /// + /// 小于 < + /// + /// + public static bool LessThan(TValue value1, TValue value2) + { + expContext.Value.Result = $"{expContext.Value.ParsedContent["value1"]} < {expContext.Value.ParsedContent["value2"]}"; + return false; + } + /// + /// 小于或等于 <= + /// + /// + public static bool LessThanOrEqual(TValue value1, TValue value2) + { + expContext.Value.Result = $"{expContext.Value.ParsedContent["value1"]} <= {expContext.Value.ParsedContent["value2"]}"; + return false; + } + /// + /// value1 IS NULL + /// + /// + /// + /// + public static bool EqualIsNull(TValue value1) + { + expContext.Value.Result = $"{expContext.Value.ParsedContent["value1"]} IS NULL"; + return false; + } + #endregion - /// - /// case when .. then .. end - /// - /// - public static ICaseWhenEnd Case() => SqlExtExtensions.Case(); - /// - /// case when .. then .. end - /// - /// - /// - /// - /// - /// - public static TOutput CaseDict(TInput input, [RawValue] Dictionary dict) - { - var ec = expContext.Value; - var sb = new StringBuilder(); - sb.Append("case"); - foreach (var kv in dict) - sb.Append(" when ").Append(ec.ParsedContent["input"]).Append(" = ").Append(ec.FormatSql(kv.Key)) - .Append(" then ").Append(ec.FormatSql(kv.Value)); - sb.Append(" end"); - ec.Result = sb.ToString(); - return default; - } - /// - /// MySql group_concat(distinct .. order by .. separator ..) - /// - /// - /// - public static IGroupConcat GroupConcat(object column) => SqlExtExtensions.GroupConcat(column); - /// - /// MySql find_in_set(str, strlist) - /// - /// - /// - /// - /// - public static int FindInSet(TValue str, string strlist) - { - expContext.Value.Result = $"find_in_set({expContext.Value.ParsedContent["str"]}, {expContext.Value.ParsedContent["strlist"]})"; - return 0; - } + #region 时间比较 + /// + /// 计算两个日期之间的差异 + /// 时间2 - 时间1 + /// + /// + /// + /// + public static long DateDiff(string datePart, DateTimeOffset dateTimeOffset1, DateTimeOffset dateTimeOffset2) + { + var up = expContext.Value; - /// - /// PostgreSQL string_agg(.., ..) - /// - /// - /// - /// - public static string StringAgg(object column, object delimiter) - { - expContext.Value.Result = $"string_agg({expContext.Value.ParsedContent["column"]}, {expContext.Value.ParsedContent["delimiter"]})"; - return ""; - } - } + // 根据不同数据库类型定义不同的 SQL 语句 + if (up.DataType == DataType.SqlServer) + { + up.Result = $"DATEDIFF({datePart}, {up.ParsedContent["dateTimeOffset1"]}, {up.ParsedContent["dateTimeOffset2"]})"; + } + else if (up.DataType == DataType.MySql) + { + up.Result = $"TIMESTAMPDIFF({datePart}, {up.ParsedContent["dateTimeOffset1"]}, {up.ParsedContent["dateTimeOffset2"]})"; + } + else + { + throw new NotImplementedException("不支持的数据库类型"); + } + return 0; + } + /// + /// 计算两个日期之间的差异 + /// 时间2 - 时间1 + /// + /// + /// 时间1 + /// 时间2 + public static long DateDiff(string datePart, DateTime dateTime1, DateTime dateTime2) + { + var up = expContext.Value; - [ExpressionCall] - public static class SqlExtExtensions //这个类存在的意义,是不想使用者方法名污染 - { - static ThreadLocal expContextSelf = new ThreadLocal(); - static ExpressionCallContext expContext => expContextSelf.Value ?? SqlExt.expContext.Value; - internal static ThreadLocal> expSb = new ThreadLocal>(); - internal static ExpSbInfo expSbLast => expSb.Value.Last(); - internal class ExpSbInfo - { - public StringBuilder Sb { get; } = new StringBuilder(); - public bool IsOver = false; - public bool IsOrderBy = false; - public bool IsDistinct = false; - } + // 根据不同数据库类型定义不同的 SQL 语句 + if (up.DataType == DataType.SqlServer) + { + up.Result = $"DATEDIFF({datePart}, {up.ParsedContent["dateTimeOffset1"]}, {up.ParsedContent["dateTimeOffset2"]})"; + } + else if (up.DataType == DataType.MySql) + { + up.Result = $"TIMESTAMPDIFF({datePart}, {up.ParsedContent["dateTimeOffset1"]}, {up.ParsedContent["dateTimeOffset2"]})"; + } + else + { + throw new NotImplementedException("不支持的数据库类型"); + } + return 0; + } + #endregion - #region .. over([partition by ..] order by ...) - internal static ISqlOver Over(string sqlFunc) - { - if (expSb.Value == null) expSb.Value = new List(); - expSb.Value.Add(new ExpSbInfo()); - expSbLast.Sb.Append(sqlFunc); - return null; - } - public static ISqlOver Over(this ISqlOver that) - { - expSbLast.Sb.Append(" over("); - expSbLast.IsOver = true; - return that; - } - public static ISqlOver PartitionBy(this ISqlOver that, object column) - { - var sb = expSbLast.Sb; - sb.Append(" partition by "); - var exp = expContext.RawExpression["column"]; - if (exp.NodeType == ExpressionType.New) - { - var expNew = exp as NewExpression; - for (var a = 0; a < expNew.Arguments.Count; a++) - { - if (a > 0) sb.Append(","); - sb.Append(expContext.Utility.ParseExpression(expNew.Arguments[a])); - } - } else - sb.Append(expContext.ParsedContent["column"]); - return that; - } - public static ISqlOver OrderBy(this ISqlOver that, object column) => OrderByPriv(that, false); - public static ISqlOver OrderByDescending(this ISqlOver that, object column) => OrderByPriv(that, true); - static ISqlOver OrderByPriv(this ISqlOver that, bool isDesc) - { - var sb = expSbLast.Sb; - if (expSbLast.IsOrderBy == false) - { - sb.Append(" order by "); - expSbLast.IsOrderBy = true; - } - var exp = expContext.RawExpression["column"]; - if (exp.NodeType == ExpressionType.New) - { - var expNew = exp as NewExpression; - for (var a = 0; a < expNew.Arguments.Count; a++) - { - sb.Append(expContext.Utility.ParseExpression(expNew.Arguments[a])); - if (isDesc) sb.Append(" desc"); - sb.Append(","); - } - } - else - { - sb.Append(expContext.ParsedContent["column"]); - if (isDesc) sb.Append(" desc"); - sb.Append(","); - } - return that; - } - public static TValue ToValue(this ISqlOver that) - { - var sql = expSbLast.Sb.ToString().TrimEnd(','); - if (expSbLast.IsOver) sql = $"{sql})"; - expSbLast.Sb.Clear(); - expSb.Value.RemoveAt(expSb.Value.Count - 1); - expContext.Result = sql; - return default; - } - public interface ISqlOver { } - #endregion + /// + /// case when .. then .. end + /// + /// + public static ICaseWhenEnd Case() => SqlExtExtensions.Case(); + /// + /// case when .. then .. end + /// + /// + /// + /// + /// + /// + public static TOutput CaseDict(TInput input, [RawValue] Dictionary dict) + { + var ec = expContext.Value; + var sb = new StringBuilder(); + sb.Append("case"); + foreach (var kv in dict) + sb.Append(" when ").Append(ec.ParsedContent["input"]).Append(" = ").Append(ec.FormatSql(kv.Key)) + .Append(" then ").Append(ec.FormatSql(kv.Value)); + sb.Append(" end"); + ec.Result = sb.ToString(); + return default; + } + /// + /// MySql group_concat(distinct .. order by .. separator ..) + /// + /// + /// + public static IGroupConcat GroupConcat(object column) => SqlExtExtensions.GroupConcat(column); + /// + /// MySql find_in_set(str, strlist) + /// + /// + /// + /// + /// + public static int FindInSet(TValue str, string strlist) + { + expContext.Value.Result = $"find_in_set({expContext.Value.ParsedContent["str"]}, {expContext.Value.ParsedContent["strlist"]})"; + return 0; + } - #region case when .. then .. when .. then .. end - public static ICaseWhenEnd Case() - { - if (expSb.Value == null) expSb.Value = new List(); - expSb.Value.Add(new ExpSbInfo()); - expSbLast.Sb.Append("case "); - return null; - } - public static ICaseWhenEnd When(this ICaseWhenEnd that, bool test, TValue then) - { - expSbLast.Sb.Append($"\r\n{"".PadRight(expSb.Value.Count * 2)}when ").Append(expContext.ParsedContent["test"]).Append(" then ").Append(expContext.ParsedContent["then"]); - return null; - } - public static ICaseWhenEnd When(this ICaseWhenEnd that, bool test, TValue then) - { - expSbLast.Sb.Append($"\r\n{"".PadRight(expSb.Value.Count * 2)}when ").Append(expContext.ParsedContent["test"]).Append(" then ").Append(expContext.ParsedContent["then"]); - return null; - } - public static ICaseWhenEnd Else(this ICaseWhenEnd that, TValue then) - { - expSbLast.Sb.Append($"\r\n{"".PadRight(expSb.Value.Count * 2)}else ").Append(expContext.ParsedContent["then"]); - return null; - } - public static TValue End(this ICaseWhenEnd that) - { - var sql = expSbLast.Sb.Append($"\r\n{"".PadRight(expSb.Value.Count * 2 - 2)}end").ToString(); - expSbLast.Sb.Clear(); - expSb.Value.RemoveAt(expSb.Value.Count - 1); - expContext.Result = sql; - return default; - } - public interface ICaseWhenEnd { } - public interface ICaseWhenEnd { } - #endregion + /// + /// PostgreSQL string_agg(.., ..) + /// + /// + /// + /// + public static string StringAgg(object column, object delimiter) + { + expContext.Value.Result = $"string_agg({expContext.Value.ParsedContent["column"]}, {expContext.Value.ParsedContent["delimiter"]})"; + return ""; + } + } - #region group_concat - public static IGroupConcat GroupConcat(object column) - { - if (expSb.Value == null) expSb.Value = new List(); - expSb.Value.Add(new ExpSbInfo()); - expSbLast.Sb.Append("group_concat(").Append(expContext.ParsedContent["column"]); - return null; - } - public static IGroupConcat Distinct(this IGroupConcat that) - { - if (expSbLast.IsDistinct == false) - { - expSbLast.Sb.Insert(expSbLast.Sb.ToString().LastIndexOf("group_concat(") + 13, "distinct "); - expSbLast.IsDistinct = true; - } - return that; - } - public static IGroupConcat Separator(this IGroupConcat that, object separator) - { - if (expSbLast.IsOrderBy) expSbLast.Sb.Remove(expSbLast.Sb.Length - 1, 1); - expSbLast.Sb.Append(" separator ").Append(expContext.ParsedContent["separator"]); - return that; - } - public static IGroupConcat OrderBy(this IGroupConcat that, object column) => OrderByPriv(that, false); - public static IGroupConcat OrderByDescending(this IGroupConcat that, object column) => OrderByPriv(that, true); - static IGroupConcat OrderByPriv(this IGroupConcat that, bool isDesc) - { - var sb = expSbLast.Sb; - if (expSbLast.IsOrderBy == false) - { - sb.Append(" order by "); - expSbLast.IsOrderBy = true; - } - var exp = expContext.RawExpression["column"]; - if (exp.NodeType == ExpressionType.New) - { - var expNew = exp as NewExpression; - for (var a = 0; a < expNew.Arguments.Count; a++) - { - sb.Append(expContext.Utility.ParseExpression(expNew.Arguments[a])); - if (isDesc) sb.Append(" desc"); - sb.Append(","); - } - } - else - { - sb.Append(expContext.ParsedContent["column"]); - if (isDesc) sb.Append(" desc"); - sb.Append(","); - } - return that; - } - public static string ToValue(this IGroupConcat that) - { - var sql = expSbLast.Sb.ToString().TrimEnd(','); - expSbLast.Sb.Clear(); - expSb.Value.RemoveAt(expSb.Value.Count - 1); - expContext.Result = $"{sql})"; - return default; - } - public interface IGroupConcat { } - #endregion + [ExpressionCall] + public static class SqlExtExtensions //这个类存在的意义,是不想使用者方法名污染 + { + static ThreadLocal expContextSelf = new ThreadLocal(); + static ExpressionCallContext expContext => expContextSelf.Value ?? SqlExt.expContext.Value; + internal static ThreadLocal> expSb = new ThreadLocal>(); + internal static ExpSbInfo expSbLast => expSb.Value.Last(); + internal class ExpSbInfo + { + public StringBuilder Sb { get; } = new StringBuilder(); + public bool IsOver = false; + public bool IsOrderBy = false; + public bool IsDistinct = false; + } - #region string.Join 反射处理,此块代码用于反射,所以别修改定义 - public static string StringJoinSqliteGroupConcat(object column, object delimiter) - { - expContext.Result = $"group_concat({expContext.ParsedContent["column"]},{expContext.ParsedContent["delimiter"]})"; - return null; - } - public static string StringJoinPgsqlGroupConcat(object column, object delimiter) - { - expContext.Result = $"string_agg(({expContext.ParsedContent["column"]})::text,{expContext.ParsedContent["delimiter"]})"; - return null; - } - public static string StringJoinMySqlGroupConcat(object column, object delimiter) - { - expContext.Result = $"group_concat({expContext.ParsedContent["column"]} separator {expContext.ParsedContent["delimiter"]})"; - return null; - } - public static string StringJoinOracleGroupConcat(object column, object delimiter) - { - string orderby = null; - var subSelect = expContext._tsc?.subSelect001; - if (subSelect != null) - { - orderby = subSelect?._orderby?.Trim('\r', '\n'); - if (string.IsNullOrEmpty(orderby)) - { - var subSelectTb1 = subSelect._tables.FirstOrDefault(); - if (subSelectTb1 != null && subSelectTb1.Table.Primarys.Any() == true) - orderby = $"order by {string.Join(",", subSelectTb1.Table.Primarys.Select(a => $"{subSelectTb1.Alias}.{subSelect._commonUtils.QuoteSqlName(a.Attribute.Name)}"))}"; - } - } - if (string.IsNullOrEmpty(orderby)) orderby = "order by 1"; - expContext.Result = $"listagg(to_char({expContext.ParsedContent["column"]}),{expContext.ParsedContent["delimiter"]}) within group({orderby})"; - return null; - } - public static string StringJoinFirebirdList(object column, object delimiter) - { - expContext.Result = $"list({expContext.ParsedContent["column"]},{expContext.ParsedContent["delimiter"]})"; - return null; - } - public static string StringJoinGBaseWmConcatText(object column, object delimiter) - { - if (expContext.ParsedContent["delimiter"] == "','") - expContext.Result = $"wm_concat_text({expContext.ParsedContent["column"]})"; - else - throw new NotImplementedException(CoreStrings.GBase_NotSupport_OtherThanCommas); - //expContext.Result = $"replace(wm_concat_text({expContext.ParsedContent["column"]}), ',', {expContext.ParsedContent["delimiter"]})"; - return null; - } - #endregion - } + #region .. over([partition by ..] order by ...) + internal static ISqlOver Over(string sqlFunc) + { + if (expSb.Value == null) expSb.Value = new List(); + expSb.Value.Add(new ExpSbInfo()); + expSbLast.Sb.Append(sqlFunc); + return null; + } + public static ISqlOver Over(this ISqlOver that) + { + expSbLast.Sb.Append(" over("); + expSbLast.IsOver = true; + return that; + } + public static ISqlOver PartitionBy(this ISqlOver that, object column) + { + var sb = expSbLast.Sb; + sb.Append(" partition by "); + var exp = expContext.RawExpression["column"]; + if (exp.NodeType == ExpressionType.New) + { + var expNew = exp as NewExpression; + for (var a = 0; a < expNew.Arguments.Count; a++) + { + if (a > 0) sb.Append(","); + sb.Append(expContext.Utility.ParseExpression(expNew.Arguments[a])); + } + } + else + sb.Append(expContext.ParsedContent["column"]); + return that; + } + public static ISqlOver OrderBy(this ISqlOver that, object column) => OrderByPriv(that, false); + public static ISqlOver OrderByDescending(this ISqlOver that, object column) => OrderByPriv(that, true); + static ISqlOver OrderByPriv(this ISqlOver that, bool isDesc) + { + var sb = expSbLast.Sb; + if (expSbLast.IsOrderBy == false) + { + sb.Append(" order by "); + expSbLast.IsOrderBy = true; + } + var exp = expContext.RawExpression["column"]; + if (exp.NodeType == ExpressionType.New) + { + var expNew = exp as NewExpression; + for (var a = 0; a < expNew.Arguments.Count; a++) + { + sb.Append(expContext.Utility.ParseExpression(expNew.Arguments[a])); + if (isDesc) sb.Append(" desc"); + sb.Append(","); + } + } + else + { + sb.Append(expContext.ParsedContent["column"]); + if (isDesc) sb.Append(" desc"); + sb.Append(","); + } + return that; + } + public static TValue ToValue(this ISqlOver that) + { + var sql = expSbLast.Sb.ToString().TrimEnd(','); + if (expSbLast.IsOver) sql = $"{sql})"; + expSbLast.Sb.Clear(); + expSb.Value.RemoveAt(expSb.Value.Count - 1); + expContext.Result = sql; + return default; + } + public interface ISqlOver { } + #endregion + + #region case when .. then .. when .. then .. end + public static ICaseWhenEnd Case() + { + if (expSb.Value == null) expSb.Value = new List(); + expSb.Value.Add(new ExpSbInfo()); + expSbLast.Sb.Append("case "); + return null; + } + public static ICaseWhenEnd When(this ICaseWhenEnd that, bool test, TValue then) + { + expSbLast.Sb.Append($"\r\n{"".PadRight(expSb.Value.Count * 2)}when ").Append(expContext.ParsedContent["test"]).Append(" then ").Append(expContext.ParsedContent["then"]); + return null; + } + public static ICaseWhenEnd When(this ICaseWhenEnd that, bool test, TValue then) + { + expSbLast.Sb.Append($"\r\n{"".PadRight(expSb.Value.Count * 2)}when ").Append(expContext.ParsedContent["test"]).Append(" then ").Append(expContext.ParsedContent["then"]); + return null; + } + public static ICaseWhenEnd Else(this ICaseWhenEnd that, TValue then) + { + expSbLast.Sb.Append($"\r\n{"".PadRight(expSb.Value.Count * 2)}else ").Append(expContext.ParsedContent["then"]); + return null; + } + public static TValue End(this ICaseWhenEnd that) + { + var sql = expSbLast.Sb.Append($"\r\n{"".PadRight(expSb.Value.Count * 2 - 2)}end").ToString(); + expSbLast.Sb.Clear(); + expSb.Value.RemoveAt(expSb.Value.Count - 1); + expContext.Result = sql; + return default; + } + public interface ICaseWhenEnd { } + public interface ICaseWhenEnd { } + #endregion + + #region group_concat + public static IGroupConcat GroupConcat(object column) + { + if (expSb.Value == null) expSb.Value = new List(); + expSb.Value.Add(new ExpSbInfo()); + expSbLast.Sb.Append("group_concat(").Append(expContext.ParsedContent["column"]); + return null; + } + public static IGroupConcat Distinct(this IGroupConcat that) + { + if (expSbLast.IsDistinct == false) + { + expSbLast.Sb.Insert(expSbLast.Sb.ToString().LastIndexOf("group_concat(") + 13, "distinct "); + expSbLast.IsDistinct = true; + } + return that; + } + public static IGroupConcat Separator(this IGroupConcat that, object separator) + { + if (expSbLast.IsOrderBy) expSbLast.Sb.Remove(expSbLast.Sb.Length - 1, 1); + expSbLast.Sb.Append(" separator ").Append(expContext.ParsedContent["separator"]); + return that; + } + public static IGroupConcat OrderBy(this IGroupConcat that, object column) => OrderByPriv(that, false); + public static IGroupConcat OrderByDescending(this IGroupConcat that, object column) => OrderByPriv(that, true); + static IGroupConcat OrderByPriv(this IGroupConcat that, bool isDesc) + { + var sb = expSbLast.Sb; + if (expSbLast.IsOrderBy == false) + { + sb.Append(" order by "); + expSbLast.IsOrderBy = true; + } + var exp = expContext.RawExpression["column"]; + if (exp.NodeType == ExpressionType.New) + { + var expNew = exp as NewExpression; + for (var a = 0; a < expNew.Arguments.Count; a++) + { + sb.Append(expContext.Utility.ParseExpression(expNew.Arguments[a])); + if (isDesc) sb.Append(" desc"); + sb.Append(","); + } + } + else + { + sb.Append(expContext.ParsedContent["column"]); + if (isDesc) sb.Append(" desc"); + sb.Append(","); + } + return that; + } + public static string ToValue(this IGroupConcat that) + { + var sql = expSbLast.Sb.ToString().TrimEnd(','); + expSbLast.Sb.Clear(); + expSb.Value.RemoveAt(expSb.Value.Count - 1); + expContext.Result = $"{sql})"; + return default; + } + public interface IGroupConcat { } + #endregion + + #region string.Join 反射处理,此块代码用于反射,所以别修改定义 + public static string StringJoinSqliteGroupConcat(object column, object delimiter) + { + expContext.Result = $"group_concat({expContext.ParsedContent["column"]},{expContext.ParsedContent["delimiter"]})"; + return null; + } + public static string StringJoinPgsqlGroupConcat(object column, object delimiter) + { + expContext.Result = $"string_agg(({expContext.ParsedContent["column"]})::text,{expContext.ParsedContent["delimiter"]})"; + return null; + } + public static string StringJoinMySqlGroupConcat(object column, object delimiter) + { + expContext.Result = $"group_concat({expContext.ParsedContent["column"]} separator {expContext.ParsedContent["delimiter"]})"; + return null; + } + public static string StringJoinOracleGroupConcat(object column, object delimiter) + { + string orderby = null; + var subSelect = expContext._tsc?.subSelect001; + if (subSelect != null) + { + orderby = subSelect?._orderby?.Trim('\r', '\n'); + if (string.IsNullOrEmpty(orderby)) + { + var subSelectTb1 = subSelect._tables.FirstOrDefault(); + if (subSelectTb1 != null && subSelectTb1.Table.Primarys.Any() == true) + orderby = $"order by {string.Join(",", subSelectTb1.Table.Primarys.Select(a => $"{subSelectTb1.Alias}.{subSelect._commonUtils.QuoteSqlName(a.Attribute.Name)}"))}"; + } + } + if (string.IsNullOrEmpty(orderby)) orderby = "order by 1"; + expContext.Result = $"listagg(to_char({expContext.ParsedContent["column"]}),{expContext.ParsedContent["delimiter"]}) within group({orderby})"; + return null; + } + public static string StringJoinFirebirdList(object column, object delimiter) + { + expContext.Result = $"list({expContext.ParsedContent["column"]},{expContext.ParsedContent["delimiter"]})"; + return null; + } + public static string StringJoinGBaseWmConcatText(object column, object delimiter) + { + if (expContext.ParsedContent["delimiter"] == "','") + expContext.Result = $"wm_concat_text({expContext.ParsedContent["column"]})"; + else + throw new NotImplementedException(CoreStrings.GBase_NotSupport_OtherThanCommas); + //expContext.Result = $"replace(wm_concat_text({expContext.ParsedContent["column"]}), ',', {expContext.ParsedContent["delimiter"]})"; + return null; + } + #endregion + } } \ No newline at end of file From 59a27598ad8c27db8e96c3dadb0a9941382a8d27 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Fri, 1 Nov 2024 12:47:55 +0800 Subject: [PATCH 07/38] =?UTF-8?q?-=20=E4=BC=98=E5=8C=96=20DateTime.Subtrac?= =?UTF-8?q?t(date).TotalSecods=20=E7=AD=89=20lambda=20=E8=A1=A8=E8=BE=BE?= =?UTF-8?q?=E5=BC=8F=E8=A7=A3=E6=9E=90=EF=BC=8C=E5=AF=B9=E5=BA=94=20datedi?= =?UTF-8?q?ff=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql/Internal/CommonExpression.cs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index f4b12f73c..8fe94e652 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -1755,7 +1755,30 @@ namespace FreeSql.Internal { case "System.String": extRet = ExpressionLambdaToSqlMemberAccessString(exp4, tsc); break; case "System.DateTime": extRet = ExpressionLambdaToSqlMemberAccessDateTime(exp4, tsc); break; - case "System.TimeSpan": throw new Exception(CoreStrings.Unable_Parse_Expression(exp4)); + case "System.TimeSpan": + if (exp4.Expression != null && exp4.Expression.NodeType == ExpressionType.Call && + exp4.Expression is MethodCallExpression exp4CallExp && + exp4CallExp.Method.Name == "Subtract" && + exp4CallExp.Object != null && exp4CallExp.Object.Type == typeof(DateTime) && + exp4CallExp.Arguments.Count == 1 && exp4CallExp.Arguments[0].Type == typeof(DateTime)) + { + var left = ExpressionLambdaToSql(exp4.Expression, tsc); + switch (exp4.Member.Name) + { + case "Days": return $"floor(({left})/{60 * 60 * 24})"; + case "Hours": return $"floor(({left})/{60 * 60}%24)"; + case "Milliseconds": return $"(({left})*1000)"; + case "Minutes": return $"floor(({left})/60%60)"; + case "Seconds": return $"(({left})%60)"; + case "Ticks": return $"(({left})*10000000)"; + case "TotalDays": return $"(({left})/{60 * 60 * 24}.0)"; + case "TotalHours": return $"(({left})/{60 * 60}.0)"; + case "TotalMilliseconds": return $"(({left})*1000)"; + case "TotalMinutes": return $"(({left})/60.0)"; + case "TotalSeconds": return $"({left})"; + } + } + throw new Exception(CoreStrings.Unable_Parse_Expression(exp4)); } if (string.IsNullOrEmpty(extRet) == false) return extRet; var other4Exp = ExpressionLambdaToSqlOther(exp4, tsc); From 50919bbbf6de5d389a08ba1ae5af1048e9df8124 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Fri, 1 Nov 2024 22:16:54 +0800 Subject: [PATCH 08/38] =?UTF-8?q?-=20=E4=BC=98=E5=8C=96=20DateTime.Subtrac?= =?UTF-8?q?t=20=E7=BB=9F=E4=B8=80=E5=BE=97=E5=88=B0=E7=A7=92=E5=B7=AE?= =?UTF-8?q?=E5=80=BC=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FreeSql.Provider.ClickHouse/ClickHouseExpression.cs | 1 - Providers/FreeSql.Provider.Custom/CustomAdapter.cs | 1 - Providers/FreeSql.Provider.Custom/CustomExpression.cs | 1 - .../FreeSql.Provider.Custom/MySql/CustomMySqlExpression.cs | 7 +++---- .../Oracle/CustomOracleExpression.cs | 3 +-- .../PostgreSQL/CustomPostgreSQLExpression.cs | 5 ++--- .../SqlServer/CustomSqlServerExpression.cs | 1 - Providers/FreeSql.Provider.Dameng/DamengExpression.cs | 3 +-- Providers/FreeSql.Provider.Duckdb/DuckdbExpression.cs | 3 +-- Providers/FreeSql.Provider.Firebird/FirebirdExpression.cs | 1 - Providers/FreeSql.Provider.GBase/GBaseExpression.cs | 3 +-- .../FreeSql.Provider.KingbaseES/KingbaseESExpression.cs | 5 ++--- Providers/FreeSql.Provider.MsAccess/MsAccessExpression.cs | 1 - Providers/FreeSql.Provider.MySql/MySqlExpression.cs | 7 +++---- Providers/FreeSql.Provider.Odbc/Default/OdbcAdapter.cs | 1 - Providers/FreeSql.Provider.Odbc/Default/OdbcExpression.cs | 1 - .../FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs | 7 +++---- .../FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs | 3 +-- .../PostgreSQL/OdbcPostgreSQLExpression.cs | 5 ++--- .../SqlServer/OdbcSqlServerExpression.cs | 1 - Providers/FreeSql.Provider.Oracle/OracleExpression.cs | 3 +-- .../FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs | 5 ++--- Providers/FreeSql.Provider.QuestDb/QuestDbExpression.cs | 1 - Providers/FreeSql.Provider.ShenTong/ShenTongExpression.cs | 1 - .../FreeSql.Provider.SqlServer/SqlServerExpression.cs | 1 - Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs | 1 - Providers/FreeSql.Provider.Xugu/XuguExpression.cs | 1 - 27 files changed, 23 insertions(+), 50 deletions(-) diff --git a/Providers/FreeSql.Provider.ClickHouse/ClickHouseExpression.cs b/Providers/FreeSql.Provider.ClickHouse/ClickHouseExpression.cs index cf6e896e4..d66028146 100644 --- a/Providers/FreeSql.Provider.ClickHouse/ClickHouseExpression.cs +++ b/Providers/FreeSql.Provider.ClickHouse/ClickHouseExpression.cs @@ -461,7 +461,6 @@ namespace FreeSql.ClickHouse switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { case "System.DateTime": return $"dateDiff(second, {args1}, toDateTime({left}))"; - case "System.TimeSpan": return $"addSeconds(toDateTime({left}),(({args1})*-1))"; } break; case "Equals": return $"({left} = {args1})"; diff --git a/Providers/FreeSql.Provider.Custom/CustomAdapter.cs b/Providers/FreeSql.Provider.Custom/CustomAdapter.cs index 4847109fb..add3b7643 100644 --- a/Providers/FreeSql.Provider.Custom/CustomAdapter.cs +++ b/Providers/FreeSql.Provider.Custom/CustomAdapter.cs @@ -150,7 +150,6 @@ namespace FreeSql.Custom public virtual string LambdaDateTime_AddTicks(string operand, string value) => $"dateadd(second, ({value})/10000000, {operand})"; public virtual string LambdaDateTime_AddYears(string operand, string value) => $"dateadd(year, {value}, {operand})"; public virtual string LambdaDateTime_Subtract(string operand, string value) => $"datediff(second, {value}, {operand})"; - public virtual string LambdaDateTime_SubtractTimeSpan(string operand, string value) => $"dateadd(second, ({value})*-1, {operand})"; public virtual string LambdaDateTime_Equals(string operand, string value) => $"({operand} = {value})"; public virtual string LambdaDateTime_CompareTo(string operand, string value) => $"datediff(second,{value},{operand})"; public virtual string LambdaDateTime_ToString(string operand) => $"convert(varchar, {operand}, 121)"; diff --git a/Providers/FreeSql.Provider.Custom/CustomExpression.cs b/Providers/FreeSql.Provider.Custom/CustomExpression.cs index 8417152c7..66f2c4320 100644 --- a/Providers/FreeSql.Provider.Custom/CustomExpression.cs +++ b/Providers/FreeSql.Provider.Custom/CustomExpression.cs @@ -365,7 +365,6 @@ namespace FreeSql.Custom switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { case "System.DateTime": return _utils.Adapter.LambdaDateTime_Subtract(left, args1); - case "System.TimeSpan": return _utils.Adapter.LambdaDateTime_SubtractTimeSpan(left, args1); } break; case "Equals": return _utils.Adapter.LambdaDateTime_Equals(left, args1); diff --git a/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlExpression.cs b/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlExpression.cs index 415431477..702301d96 100644 --- a/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlExpression.cs +++ b/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlExpression.cs @@ -217,7 +217,7 @@ namespace FreeSql.Custom.MySql switch (exp.Member.Name) { case "Date": return $"cast(date_format({left},'%Y-%m-%d') as datetime)"; - case "TimeOfDay": return $"timestampdiff(microsecond, date_format({left},'%Y-%m-%d'), {left})"; + case "TimeOfDay": return $"timestampdiff(second, date_format({left},'%Y-%m-%d'), {left})"; case "DayOfWeek": return $"(dayofweek({left})-1)"; case "Day": return $"dayofmonth({left})"; case "DayOfYear": return $"dayofyear({left})"; @@ -417,12 +417,11 @@ namespace FreeSql.Custom.MySql case "Subtract": switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { - case "System.DateTime": return $"timestampdiff(microsecond, {args1}, {left})"; - case "System.TimeSpan": return $"date_sub({left}, interval ({args1}) microsecond)"; + case "System.DateTime": return $"timestampdiff(second, {args1}, {left})"; } break; case "Equals": return $"({left} = {args1})"; - case "CompareTo": return $"timestampdiff(microsecond,{args1},{left})"; + case "CompareTo": return $"timestampdiff(second,{args1},{left})"; case "ToString": if (exp.Arguments.Count == 0) return $"date_format({left},'%Y-%m-%d %H:%i:%s.%f')"; switch (args1) diff --git a/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleExpression.cs b/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleExpression.cs index bbd85d90c..90821040d 100644 --- a/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleExpression.cs +++ b/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleExpression.cs @@ -422,8 +422,7 @@ namespace FreeSql.Custom.Oracle case "Subtract": switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { - case "System.DateTime": return $"numtodsinterval(({left}+0)-({args1}+0),'day')"; - case "System.TimeSpan": return $"({left}-{args1})"; + case "System.DateTime": return $"((({left}+0)-({args1}+0))*{24 * 60 * 60})"; } break; case "Equals": return $"({left} = {args1})"; diff --git a/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLExpression.cs b/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLExpression.cs index 345800885..eac9daef5 100644 --- a/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLExpression.cs +++ b/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLExpression.cs @@ -305,7 +305,7 @@ namespace FreeSql.Custom.PostgreSQL switch (exp.Member.Name) { case "Date": return $"({left})::date"; - case "TimeOfDay": return $"(extract(epoch from ({left})::time)*1000000)"; + case "TimeOfDay": return $"extract(epoch from ({left})::time)"; case "DayOfWeek": return $"extract(dow from ({left})::timestamp)"; case "Day": return $"extract(day from ({left})::timestamp)"; case "DayOfYear": return $"extract(doy from ({left})::timestamp)"; @@ -511,8 +511,7 @@ namespace FreeSql.Custom.PostgreSQL case "Subtract": switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { - case "System.DateTime": return $"(extract(epoch from ({left})::timestamp-({args1})::timestamp)*1000000)"; - case "System.TimeSpan": return $"(({left})::timestamp-((({args1})/1000)||' milliseconds')::interval)"; + case "System.DateTime": return $"extract(epoch from ({left})::timestamp-({args1})::timestamp)"; } break; case "Equals": return $"({left} = ({args1})::timestamp)"; diff --git a/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerExpression.cs b/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerExpression.cs index 4b8d8358d..c9a37d419 100644 --- a/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerExpression.cs +++ b/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerExpression.cs @@ -420,7 +420,6 @@ namespace FreeSql.Custom.SqlServer switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { case "System.DateTime": return $"datediff(second, {args1}, {left})"; - case "System.TimeSpan": return $"dateadd(second, ({args1})*-1, {left})"; } break; case "Equals": return $"({left} = {args1})"; diff --git a/Providers/FreeSql.Provider.Dameng/DamengExpression.cs b/Providers/FreeSql.Provider.Dameng/DamengExpression.cs index 31a537569..8e2dbf577 100644 --- a/Providers/FreeSql.Provider.Dameng/DamengExpression.cs +++ b/Providers/FreeSql.Provider.Dameng/DamengExpression.cs @@ -422,8 +422,7 @@ namespace FreeSql.Dameng case "Subtract": switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { - case "System.DateTime": return $"(cast({left} as timestamp with time zone)-{args1})"; - case "System.TimeSpan": return $"({left}-{args1})"; + case "System.DateTime": return $"((cast({left} as timestamp with time zone)-{args1})*{24 * 60 * 60})"; } break; case "Equals": return $"({left} = {args1})"; diff --git a/Providers/FreeSql.Provider.Duckdb/DuckdbExpression.cs b/Providers/FreeSql.Provider.Duckdb/DuckdbExpression.cs index abcc9cb34..29b978781 100644 --- a/Providers/FreeSql.Provider.Duckdb/DuckdbExpression.cs +++ b/Providers/FreeSql.Provider.Duckdb/DuckdbExpression.cs @@ -488,8 +488,7 @@ namespace FreeSql.Duckdb case "Subtract": switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { - case "System.DateTime": return $"cast((epoch({left})-epoch({args1}))||' seconds' as interval)"; - case "System.TimeSpan": return $"date_add({left},{args1})"; + case "System.DateTime": return $"(epoch({left})-epoch({args1}))"; } break; case "Equals": return $"({left} = {args1})"; diff --git a/Providers/FreeSql.Provider.Firebird/FirebirdExpression.cs b/Providers/FreeSql.Provider.Firebird/FirebirdExpression.cs index 547a5167d..59a4f1780 100644 --- a/Providers/FreeSql.Provider.Firebird/FirebirdExpression.cs +++ b/Providers/FreeSql.Provider.Firebird/FirebirdExpression.cs @@ -408,7 +408,6 @@ namespace FreeSql.Firebird switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { case "System.DateTime": return $"datediff(second from {left} to {args1})"; - case "System.TimeSpan": return $"dateadd(({args1})*-1 second to {left})"; } break; case "Equals": return $"({left} = {args1})"; diff --git a/Providers/FreeSql.Provider.GBase/GBaseExpression.cs b/Providers/FreeSql.Provider.GBase/GBaseExpression.cs index 2474701e1..573858421 100644 --- a/Providers/FreeSql.Provider.GBase/GBaseExpression.cs +++ b/Providers/FreeSql.Provider.GBase/GBaseExpression.cs @@ -407,8 +407,7 @@ namespace FreeSql.GBase case "Subtract": switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { - case "System.DateTime": return $"({left} - {args1})"; - case "System.TimeSpan": return $"({left} - {args1})"; + case "System.DateTime": return $"(({left}-{args1})*{24 * 60 * 60})"; } break; case "Equals": return $"({left} = {args1})"; diff --git a/Providers/FreeSql.Provider.KingbaseES/KingbaseESExpression.cs b/Providers/FreeSql.Provider.KingbaseES/KingbaseESExpression.cs index 9ee054050..d17c761f0 100644 --- a/Providers/FreeSql.Provider.KingbaseES/KingbaseESExpression.cs +++ b/Providers/FreeSql.Provider.KingbaseES/KingbaseESExpression.cs @@ -336,7 +336,7 @@ namespace FreeSql.KingbaseES switch (exp.Member.Name) { case "Date": return $"({left})::date"; - case "TimeOfDay": return $"(extract(epoch from ({left})::time)*1000000)"; + case "TimeOfDay": return $"extract(epoch from ({left})::time)"; case "DayOfWeek": return $"extract(dow from ({left})::timestamp)"; case "Day": return $"extract(day from ({left})::timestamp)"; case "DayOfYear": return $"extract(doy from ({left})::timestamp)"; @@ -544,8 +544,7 @@ namespace FreeSql.KingbaseES case "Subtract": switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { - case "System.DateTime": return $"(extract(epoch from ({left})::timestamp-({args1})::timestamp)*1000000)"; - case "System.TimeSpan": return $"(({left})::timestamp-((({args1})/1000)||' milliseconds')::interval)"; + case "System.DateTime": return $"extract(epoch from ({left})::timestamp-({args1})::timestamp)"; } break; case "Equals": return $"({left} = ({args1})::timestamp)"; diff --git a/Providers/FreeSql.Provider.MsAccess/MsAccessExpression.cs b/Providers/FreeSql.Provider.MsAccess/MsAccessExpression.cs index 0b0b3ee4d..e878986c5 100644 --- a/Providers/FreeSql.Provider.MsAccess/MsAccessExpression.cs +++ b/Providers/FreeSql.Provider.MsAccess/MsAccessExpression.cs @@ -360,7 +360,6 @@ namespace FreeSql.MsAccess switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { case "System.DateTime": return $"datediff('s', {args1}, {left})"; - case "System.TimeSpan": return $"dateadd('s', ({args1})*-1, {left})"; } break; case "Equals": return $"({left} = {args1})"; diff --git a/Providers/FreeSql.Provider.MySql/MySqlExpression.cs b/Providers/FreeSql.Provider.MySql/MySqlExpression.cs index 289ff2187..4800911d5 100644 --- a/Providers/FreeSql.Provider.MySql/MySqlExpression.cs +++ b/Providers/FreeSql.Provider.MySql/MySqlExpression.cs @@ -219,7 +219,7 @@ namespace FreeSql.MySql switch (exp.Member.Name) { case "Date": return $"cast(date_format({left},'%Y-%m-%d') as datetime)"; - case "TimeOfDay": return $"timestampdiff(microsecond, date_format({left},'%Y-%m-%d'), {left})"; + case "TimeOfDay": return $"timestampdiff(second, date_format({left},'%Y-%m-%d'), {left})"; case "DayOfWeek": return $"(dayofweek({left})-1)"; case "Day": return $"dayofmonth({left})"; case "DayOfYear": return $"dayofyear({left})"; @@ -419,12 +419,11 @@ namespace FreeSql.MySql case "Subtract": switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { - case "System.DateTime": return $"timestampdiff(microsecond, {args1}, {left})"; - case "System.TimeSpan": return $"date_sub({left}, interval ({args1}) microsecond)"; + case "System.DateTime": return $"timestampdiff(second, {args1}, {left})"; } break; case "Equals": return $"({left} = {args1})"; - case "CompareTo": return $"timestampdiff(microsecond,{args1},{left})"; + case "CompareTo": return $"timestampdiff(second,{args1},{left})"; case "ToString": if (exp.Arguments.Count == 0) return $"date_format({left},'%Y-%m-%d %H:%i:%s.%f')"; switch (args1) diff --git a/Providers/FreeSql.Provider.Odbc/Default/OdbcAdapter.cs b/Providers/FreeSql.Provider.Odbc/Default/OdbcAdapter.cs index 49f48be5a..67538feec 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/OdbcAdapter.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/OdbcAdapter.cs @@ -150,7 +150,6 @@ namespace FreeSql.Odbc.Default public virtual string LambdaDateTime_AddTicks(string operand, string value) => $"dateadd(second, ({value})/10000000, {operand})"; public virtual string LambdaDateTime_AddYears(string operand, string value) => $"dateadd(year, {value}, {operand})"; public virtual string LambdaDateTime_Subtract(string operand, string value) => $"datediff(second, {value}, {operand})"; - public virtual string LambdaDateTime_SubtractTimeSpan(string operand, string value) => $"dateadd(second, ({value})*-1, {operand})"; public virtual string LambdaDateTime_Equals(string operand, string value) => $"({operand} = {value})"; public virtual string LambdaDateTime_CompareTo(string operand, string value) => $"datediff(second,{value},{operand})"; public virtual string LambdaDateTime_ToString(string operand) => $"convert(varchar, {operand}, 121)"; diff --git a/Providers/FreeSql.Provider.Odbc/Default/OdbcExpression.cs b/Providers/FreeSql.Provider.Odbc/Default/OdbcExpression.cs index 0678406f6..8091f1a88 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/OdbcExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/OdbcExpression.cs @@ -366,7 +366,6 @@ namespace FreeSql.Odbc.Default switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { case "System.DateTime": return _utils.Adapter.LambdaDateTime_Subtract(left, args1); - case "System.TimeSpan": return _utils.Adapter.LambdaDateTime_SubtractTimeSpan(left, args1); } break; case "Equals": return _utils.Adapter.LambdaDateTime_Equals(left, args1); diff --git a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs index 6f91eb841..a82cc4bfd 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs @@ -217,7 +217,7 @@ namespace FreeSql.Odbc.MySql switch (exp.Member.Name) { case "Date": return $"cast(date_format({left},'%Y-%m-%d') as datetime)"; - case "TimeOfDay": return $"timestampdiff(microsecond, date_format({left},'%Y-%m-%d'), {left})"; + case "TimeOfDay": return $"timestampdiff(second, date_format({left},'%Y-%m-%d'), {left})"; case "DayOfWeek": return $"(dayofweek({left})-1)"; case "Day": return $"dayofmonth({left})"; case "DayOfYear": return $"dayofyear({left})"; @@ -417,12 +417,11 @@ namespace FreeSql.Odbc.MySql case "Subtract": switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { - case "System.DateTime": return $"timestampdiff(microsecond, {args1}, {left})"; - case "System.TimeSpan": return $"date_sub({left}, interval ({args1}) microsecond)"; + case "System.DateTime": return $"timestampdiff(second, {args1}, {left})"; } break; case "Equals": return $"({left} = {args1})"; - case "CompareTo": return $"timestampdiff(microsecond,{args1},{left})"; + case "CompareTo": return $"timestampdiff(second,{args1},{left})"; case "ToString": if (exp.Arguments.Count == 0) return $"date_format({left},'%Y-%m-%d %H:%i:%s.%f')"; switch (args1) diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs index d06cf0721..dabb589a0 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs @@ -422,8 +422,7 @@ namespace FreeSql.Odbc.Oracle case "Subtract": switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { - case "System.DateTime": return $"numtodsinterval(({left}+0)-({args1}+0),'day')"; - case "System.TimeSpan": return $"({left}-{args1})"; + case "System.DateTime": return $"((({left}+0)-({args1}+0))*{24 * 60 * 60})"; } break; case "Equals": return $"({left} = {args1})"; diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs index 4c8abe477..4427a5a46 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs @@ -305,7 +305,7 @@ namespace FreeSql.Odbc.PostgreSQL switch (exp.Member.Name) { case "Date": return $"({left})::date"; - case "TimeOfDay": return $"(extract(epoch from ({left})::time)*1000000)"; + case "TimeOfDay": return $"extract(epoch from ({left})::time)"; case "DayOfWeek": return $"extract(dow from ({left})::timestamp)"; case "Day": return $"extract(day from ({left})::timestamp)"; case "DayOfYear": return $"extract(doy from ({left})::timestamp)"; @@ -511,8 +511,7 @@ namespace FreeSql.Odbc.PostgreSQL case "Subtract": switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { - case "System.DateTime": return $"(extract(epoch from ({left})::timestamp-({args1})::timestamp)*1000000)"; - case "System.TimeSpan": return $"(({left})::timestamp-((({args1})/1000)||' milliseconds')::interval)"; + case "System.DateTime": return $"extract(epoch from ({left})::timestamp-({args1})::timestamp)"; } break; case "Equals": return $"({left} = ({args1})::timestamp)"; diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerExpression.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerExpression.cs index db978b32d..6720d1c75 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerExpression.cs @@ -420,7 +420,6 @@ namespace FreeSql.Odbc.SqlServer switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { case "System.DateTime": return $"datediff(second, {args1}, {left})"; - case "System.TimeSpan": return $"dateadd(second, ({args1})*-1, {left})"; } break; case "Equals": return $"({left} = {args1})"; diff --git a/Providers/FreeSql.Provider.Oracle/OracleExpression.cs b/Providers/FreeSql.Provider.Oracle/OracleExpression.cs index 1da65fb41..3d5535f5c 100644 --- a/Providers/FreeSql.Provider.Oracle/OracleExpression.cs +++ b/Providers/FreeSql.Provider.Oracle/OracleExpression.cs @@ -422,8 +422,7 @@ namespace FreeSql.Oracle case "Subtract": switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { - case "System.DateTime": return $"numtodsinterval(({left}+0)-({args1}+0),'day')"; - case "System.TimeSpan": return $"({left}-{args1})"; + case "System.DateTime": return $"((({left}+0)-({args1}+0))*{24 * 60 * 60})"; } break; case "Equals": return $"({left} = {args1})"; diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs index cfc84ec79..2e6927321 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs @@ -336,7 +336,7 @@ namespace FreeSql.PostgreSQL switch (exp.Member.Name) { case "Date": return $"({left})::date"; - case "TimeOfDay": return $"(extract(epoch from ({left})::time)*1000000)"; + case "TimeOfDay": return $"extract(epoch from ({left})::time)"; case "DayOfWeek": return $"extract(dow from ({left})::timestamp)"; case "Day": return $"extract(day from ({left})::timestamp)"; case "DayOfYear": return $"extract(doy from ({left})::timestamp)"; @@ -542,8 +542,7 @@ namespace FreeSql.PostgreSQL case "Subtract": switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { - case "System.DateTime": return $"(extract(epoch from ({left})::timestamp-({args1})::timestamp)*1000000)"; - case "System.TimeSpan": return $"(({left})::timestamp-((({args1})/1000)||' milliseconds')::interval)"; + case "System.DateTime": return $"extract(epoch from ({left})::timestamp-({args1})::timestamp)"; } break; case "Equals": return $"({left} = ({args1})::timestamp)"; diff --git a/Providers/FreeSql.Provider.QuestDb/QuestDbExpression.cs b/Providers/FreeSql.Provider.QuestDb/QuestDbExpression.cs index ce3cd9c42..f1d85ec43 100644 --- a/Providers/FreeSql.Provider.QuestDb/QuestDbExpression.cs +++ b/Providers/FreeSql.Provider.QuestDb/QuestDbExpression.cs @@ -456,7 +456,6 @@ namespace FreeSql.QuestDb switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { case "System.DateTime": return $"datediff('s',{args1},{left})"; - case "System.TimeSpan": return $"dateadd('s',({args1})*-1,{left})"; } break; case "Equals": return $"({left} = cast({args1} as timestamp))"; diff --git a/Providers/FreeSql.Provider.ShenTong/ShenTongExpression.cs b/Providers/FreeSql.Provider.ShenTong/ShenTongExpression.cs index a1cec6aa8..26b22e3d6 100644 --- a/Providers/FreeSql.Provider.ShenTong/ShenTongExpression.cs +++ b/Providers/FreeSql.Provider.ShenTong/ShenTongExpression.cs @@ -467,7 +467,6 @@ namespace FreeSql.ShenTong switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { case "System.DateTime": return $"datediff('second',{args1},{left})"; - case "System.TimeSpan": return $"dateadd('second',({args1})*-1,{left})"; } break; case "Equals": return $"({left} = {args1})"; diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerExpression.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerExpression.cs index 72fdd1df4..97c47b8dc 100644 --- a/Providers/FreeSql.Provider.SqlServer/SqlServerExpression.cs +++ b/Providers/FreeSql.Provider.SqlServer/SqlServerExpression.cs @@ -419,7 +419,6 @@ namespace FreeSql.SqlServer switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { case "System.DateTime": return $"datediff(second, {args1}, {left})"; - case "System.TimeSpan": return $"dateadd(second, ({args1})*-1, {left})"; } break; case "Equals": return $"({left} = {args1})"; diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs b/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs index f07b91d16..5c300c78f 100644 --- a/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs +++ b/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs @@ -435,7 +435,6 @@ namespace FreeSql.Sqlite switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { case "System.DateTime": return $"(strftime('%s',{left})-strftime('%s',{args1}))"; - case "System.TimeSpan": return $"datetime({left},(({args1})*-1)||' seconds')"; } break; case "Equals": return $"({left} = {args1})"; diff --git a/Providers/FreeSql.Provider.Xugu/XuguExpression.cs b/Providers/FreeSql.Provider.Xugu/XuguExpression.cs index 070fde1c1..ed2a4b12d 100644 --- a/Providers/FreeSql.Provider.Xugu/XuguExpression.cs +++ b/Providers/FreeSql.Provider.Xugu/XuguExpression.cs @@ -468,7 +468,6 @@ namespace FreeSql.Xugu switch ((exp.Arguments[0].Type.IsNullableType() ? exp.Arguments[0].Type.GetGenericArguments().FirstOrDefault() : exp.Arguments[0].Type).FullName) { case "System.DateTime": return $"datediff(second, {args1}, {left})"; - case "System.TimeSpan": return $"dateadd(second, ({args1})*-1, {left})"; } break; case "Equals": return $"({left} = {args1})"; From 9d1634533d8ceb1a198f563d2963f7647e9e3ff0 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Fri, 1 Nov 2024 22:28:00 +0800 Subject: [PATCH 09/38] v3.5.100-preview20241101 #1906 --- Directory.Build.props | 2 +- .../FreeSql.Extensions.AggregateRoot.csproj | 2 +- .../FreeSql.Extensions.BaseEntity.csproj | 2 +- .../FreeSql.Extensions.JsonMap.csproj | 2 +- .../FreeSql.Extensions.LazyLoading.csproj | 2 +- .../FreeSql.Extensions.Linq.csproj | 2 +- .../FreeSql.Extensions.ZeroEntity.csproj | 2 +- .../FreeSql.Generator.csproj | 2 +- FreeSql.All/FreeSql.All.csproj | 2 +- FreeSql.DbContext/FreeSql.DbContext.csproj | 2 +- FreeSql.DbContext/FreeSql.DbContext.xml | 8 -- FreeSql.Repository/FreeSql.Repository.csproj | 2 +- FreeSql/FreeSql.csproj | 2 +- FreeSql/FreeSql.xml | 127 ++++++++++++++++++ .../FreeSql.Provider.ClickHouse.csproj | 2 +- .../FreeSql.Provider.Custom.csproj | 2 +- .../FreeSql.Provider.Dameng.csproj | 2 +- .../FreeSql.Provider.Duckdb.csproj | 2 +- .../FreeSql.Provider.Firebird.csproj | 2 +- .../FreeSql.Provider.GBase.csproj | 2 +- .../FreeSql.Provider.KingbaseES.csproj | 2 +- .../FreeSql.Provider.MsAccess.csproj | 2 +- .../FreeSql.Provider.MySql.csproj | 2 +- .../FreeSql.Provider.MySqlConnector.csproj | 2 +- .../FreeSql.Provider.Odbc.csproj | 2 +- .../FreeSql.Provider.Oracle.csproj | 2 +- .../FreeSql.Provider.OracleOledb.csproj | 2 +- .../FreeSql.Provider.PostgreSQL.csproj | 2 +- .../FreeSql.Provider.QuestDb.csproj | 2 +- .../FreeSql.Provider.ShenTong.csproj | 2 +- .../FreeSql.Provider.SqlServer.csproj | 2 +- ...FreeSql.Provider.SqlServerForSystem.csproj | 2 +- .../FreeSql.Provider.Sqlite.csproj | 2 +- .../FreeSql.Provider.SqliteCore.csproj | 2 +- .../FreeSql.Provider.Xugu.csproj | 2 +- 35 files changed, 160 insertions(+), 41 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 733843a8b..20c71c18a 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -12,7 +12,7 @@ diff --git a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj index fc1d73316..7cee11c10 100644 --- a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj +++ b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20240825 + 3.5.100-preview20241101 readme.md diff --git a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj index d015200c1..0ad75e480 100644 --- a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj +++ b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj @@ -19,7 +19,7 @@ key.snk false latest - 3.5.100-preview20240825 + 3.5.100-preview20241101 readme.md diff --git a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj index 05b21c1ba..19d6e80b2 100644 --- a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj +++ b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20240825 + 3.5.100-preview20241101 readme.md diff --git a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj index 85692c698..59e4240b6 100644 --- a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj +++ b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20240825 + 3.5.100-preview20241101 readme.md diff --git a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj index 5091147fb..17f7a5334 100644 --- a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj +++ b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20240825 + 3.5.100-preview20241101 readme.md diff --git a/Extensions/FreeSql.Extensions.ZeroEntity/FreeSql.Extensions.ZeroEntity.csproj b/Extensions/FreeSql.Extensions.ZeroEntity/FreeSql.Extensions.ZeroEntity.csproj index be7fa02d2..22672c702 100644 --- a/Extensions/FreeSql.Extensions.ZeroEntity/FreeSql.Extensions.ZeroEntity.csproj +++ b/Extensions/FreeSql.Extensions.ZeroEntity/FreeSql.Extensions.ZeroEntity.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20240825 + 3.5.100-preview20241101 readme.md diff --git a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj index b1fca30b8..e9bd30b8d 100644 --- a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj +++ b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj @@ -13,7 +13,7 @@ https://github.com/2881099/FreeSql https://github.com/2881099/FreeSql FreeSql DbFirst 实体生成器 - 3.5.100-preview20240825 + 3.5.100-preview20241101 readme.md diff --git a/FreeSql.All/FreeSql.All.csproj b/FreeSql.All/FreeSql.All.csproj index e23d7f7b3..830c501a4 100644 --- a/FreeSql.All/FreeSql.All.csproj +++ b/FreeSql.All/FreeSql.All.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.5.100-preview20240825 + 3.5.100-preview20241101 readme.md diff --git a/FreeSql.DbContext/FreeSql.DbContext.csproj b/FreeSql.DbContext/FreeSql.DbContext.csproj index fae896020..650678f3b 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.csproj +++ b/FreeSql.DbContext/FreeSql.DbContext.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.5.100-preview20240825 + 3.5.100-preview20241101 readme.md diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index 7bd2291ce..38ae854fd 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -775,13 +775,5 @@ - - - 批量注入 Repository,可以参考代码自行调整 - - - - - diff --git a/FreeSql.Repository/FreeSql.Repository.csproj b/FreeSql.Repository/FreeSql.Repository.csproj index 70b94bc4e..876d7a459 100644 --- a/FreeSql.Repository/FreeSql.Repository.csproj +++ b/FreeSql.Repository/FreeSql.Repository.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.5.100-preview20240825 + 3.5.100-preview20241101 readme.md diff --git a/FreeSql/FreeSql.csproj b/FreeSql/FreeSql.csproj index 177853141..bc6b6a176 100644 --- a/FreeSql/FreeSql.csproj +++ b/FreeSql/FreeSql.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.5.100-preview20240825 + 3.5.100-preview20241101 readme.md diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index ab8812a67..c2fac3dd8 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -1087,6 +1087,93 @@ + + + 动态创建实体类型 + + + + + 配置Class + + 类名 + 类标记的特性[Table(Name = "xxx")] [Index(xxxx)] + + + + + 获取类型构建器,可作为要构建的Type来引用 + + + + + 配置属性 + + 属性名称 + 属性类型 + 属性标记的特性-支持多个 + + + + + 配置属性 + + 属性名称 + 属性类型 + 该属性是否重写父类属性 + 属性标记的特性-支持多个 + + + + + 配置属性 + + 属性名称 + 属性类型 + 该属性是否重写父类属性 + 属性默认值 + 属性标记的特性-支持多个 + + + + + 配置父类 + + 父类类型 + + + + + Override属性 + + + + + + Emit动态创建出Class - Type + + + + + + Emit动态创建出Class - Type,不附带获取TableInfo + + + + + + 首字母小写 + + + + + + + 首字母大写 + + + + 获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值时,返回 "" @@ -1323,6 +1410,24 @@ + + + 计算两个日期之间的差异 + 时间2 - 时间1 + + + + + + + + 计算两个日期之间的差异 + 时间2 - 时间1 + + + 时间1 + 时间2 + case when .. then .. end @@ -5809,6 +5914,28 @@ 请使用 fsql.InsertDict(dict) 方法插入字典数据 + + + 动态构建Class Type + + + + + + 根据字典,创建 table 对应的实体对象 + + + + + + + + 根据实体对象,创建 table 对应的字典 + + + + + C#: that >= between && that <= and diff --git a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj index 66384f204..07d3224d5 100644 --- a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj +++ b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj @@ -19,7 +19,7 @@ False key.snk false - 3.5.100-preview20240825 + 3.5.100-preview20241101 readme.md diff --git a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj index a0140fe2b..f963da303 100644 --- a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj +++ b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20240825 + 3.5.100-preview20241101 readme.md diff --git a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj index ac1a90faa..ec01bc419 100644 --- a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj +++ b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20240825 + 3.5.100-preview20241101 readme.md diff --git a/Providers/FreeSql.Provider.Duckdb/FreeSql.Provider.Duckdb.csproj b/Providers/FreeSql.Provider.Duckdb/FreeSql.Provider.Duckdb.csproj index 866a01791..9e1625419 100644 --- a/Providers/FreeSql.Provider.Duckdb/FreeSql.Provider.Duckdb.csproj +++ b/Providers/FreeSql.Provider.Duckdb/FreeSql.Provider.Duckdb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20240825 + 3.5.100-preview20241101 readme.md diff --git a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj index dae4c0288..d72a0b689 100644 --- a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj +++ b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20240825 + 3.5.100-preview20241101 readme.md diff --git a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj index 40302b546..88156aef7 100644 --- a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj +++ b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20240825 + 3.5.100-preview20241101 readme.md diff --git a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj index a691485ef..162efc7cd 100644 --- a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj +++ b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20240825 + 3.5.100-preview20241101 readme.md diff --git a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj index 8be9256ab..b3e2e7084 100644 --- a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj +++ b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20240825 + 3.5.100-preview20241101 readme.md diff --git a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj index cb22e0b4e..e1270b20e 100644 --- a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj +++ b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20240825 + 3.5.100-preview20241101 readme.md diff --git a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj index eec066fb9..e36e08142 100644 --- a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj +++ b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20240825 + 3.5.100-preview20241101 readme.md diff --git a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj index f921467ee..d7670ef63 100644 --- a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj +++ b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20240825 + 3.5.100-preview20241101 readme.md diff --git a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj index 573f15a31..8fa7f7111 100644 --- a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj +++ b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20240825 + 3.5.100-preview20241101 readme.md diff --git a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj index 79f846eb0..2f9792000 100644 --- a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj +++ b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20240825 + 3.5.100-preview20241101 readme.md diff --git a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj index adc71f87c..b0bbab46b 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj +++ b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20240825 + 3.5.100-preview20241101 readme.md diff --git a/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj b/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj index f88a4d86f..1cff77804 100644 --- a/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj +++ b/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20240825 + 3.5.100-preview20241101 readme.md diff --git a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj index 0a1c89cf0..e96df8833 100644 --- a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj +++ b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20240825 + 3.5.100-preview20241101 readme.md diff --git a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj index 4e3ac6cbb..68dba74de 100644 --- a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj +++ b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj @@ -18,7 +18,7 @@ true false key.snk - 3.5.100-preview20240825 + 3.5.100-preview20241101 readme.md diff --git a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj index c8b176335..cc50612d0 100644 --- a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj +++ b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20240825 + 3.5.100-preview20241101 readme.md diff --git a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj index c23ee4411..151a9535d 100644 --- a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj +++ b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20240825 + 3.5.100-preview20241101 readme.md diff --git a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj index 47d79527a..486e2f0b3 100644 --- a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj +++ b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20240825 + 3.5.100-preview20241101 readme.md diff --git a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj index 284972562..a765bf535 100644 --- a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj +++ b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20240825 + 3.5.100-preview20241101 readme.md From 14c2d0bd39305c2a0dda946199f08c465cc9f20e Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Sat, 2 Nov 2024 10:25:46 +0800 Subject: [PATCH 10/38] =?UTF-8?q?-=20=E4=BC=98=E5=8C=96=20Lambda=20Min/Max?= =?UTF-8?q?/First=20=E9=92=88=E5=AF=B9=20DateTime=20=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E4=B8=8D=E8=87=AA=E5=8A=A8=E5=A4=84=E7=90=86=20IsNull=20?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=8C=E5=9B=A0=E4=B8=BA=E5=90=84=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E6=B2=A1=E6=9C=89=E7=BB=9F=E4=B8=80=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E5=80=BC=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql/Internal/CommonExpression.cs | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index 8fe94e652..136f07259 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -1627,7 +1627,10 @@ namespace FreeSql.Internal var sql4 = fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { $"{exp3.Method.Name.ToLower()}({fieldSql})" })?.ToString(); asSelectBefores.Clear(); - return _common.IsNull($"({sql4.Replace(" \r\n", " \r\n ")})", formatSql(exp3.Method.ReturnType.CreateInstanceGetDefaultValue(), exp3.Method.ReturnType, null, null)); + sql4 = $"({sql4.Replace(" \r\n", " \r\n ")})"; + if (exp3.Method.ReturnType.NullableTypeOrThis() != typeof(DateTime)) + sql4 = _common.IsNull(sql4, formatSql(exp3.Method.ReturnType.CreateInstanceGetDefaultValue(), exp3.Method.ReturnType, null, null)); + return sql4; } var sql3 = manySubSelectAggMethod.Invoke(fsql, new object[] { exp3Args0, FieldAliasOptions.AsProperty }) as string; @@ -1696,9 +1699,13 @@ namespace FreeSql.Internal tscClone1.subSelect001.GetNestSelectSql(exp3Args0, sqlSumField, tosqlField => fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { tosqlField })?.ToString()); if (string.IsNullOrEmpty(sqlSum) == false) - return tscClone1.subSelect001._limit <= 0 && tscClone1.subSelect001._skip <= 0 ? - _common.IsNull($"({sqlSum.Replace(" \r\n", " \r\n ")})", formatSql(exp3.Method.ReturnType.CreateInstanceGetDefaultValue(), exp3.Method.ReturnType, null, null)) : - _common.IsNull($"({sqlSum})", formatSql(exp3.Method.ReturnType.CreateInstanceGetDefaultValue(), exp3.Method.ReturnType, null, null)); + { + sqlSum = tscClone1.subSelect001._limit <= 0 && tscClone1.subSelect001._skip <= 0 ? + $"({sqlSum.Replace(" \r\n", " \r\n ")})" : $"({sqlSum})"; + if (exp3.Method.ReturnType.NullableTypeOrThis() != typeof(DateTime)) + sqlSum = _common.IsNull(sqlSum, formatSql(exp3.Method.ReturnType.CreateInstanceGetDefaultValue(), exp3.Method.ReturnType, null, null)); + return sqlSum; + } break; case "ToList": case "ToOne": @@ -2901,7 +2908,9 @@ namespace FreeSql.Internal commonExp.ReadAnonymousField(select._tables, select._tableRule, field, map, ref index, callExp.Arguments[1], null, null, null, null, null, false); var fieldSql = field.Length > 0 ? field.Remove(0, 2).ToString() : null; - e.Result = commonExp._common.IsNull($"({select.ToSql($"{aggregateMethodName}({fieldSql})").Replace(" \r\n", " \r\n ")})", commonExp.formatSql(callExp.Method.ReturnType.CreateInstanceGetDefaultValue(), callExp.Method.ReturnType, null, null)); + e.Result = $"({select.ToSql($"{aggregateMethodName}({fieldSql})").Replace(" \r\n", " \r\n ")})"; + if (callExp.Method.ReturnType.NullableTypeOrThis() != typeof(DateTime)) + e.Result = commonExp._common.IsNull(e.Result, commonExp.formatSql(callExp.Method.ReturnType.CreateInstanceGetDefaultValue(), callExp.Method.ReturnType, null, null)); return; } throw throwCallExp($"不支持 {callExp.Arguments.Count}个参数的方法"); From 4500ff94df22741fe6a773166d516985317bca40 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Mon, 4 Nov 2024 15:51:46 +0800 Subject: [PATCH 11/38] =?UTF-8?q?-=20=E4=BC=98=E5=8C=96=20FromQuery/UnionA?= =?UTF-8?q?ll=20=E5=9C=A8=E5=AD=90=E6=9F=A5=E4=B8=AD=E7=BB=A7=E7=BB=AD?= =?UTF-8?q?=E5=B5=8C=E5=A5=97=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql/Internal/CommonExpression.cs | 1000 +++++++++-------- .../SelectProvider/Select0Provider.cs | 2 +- 2 files changed, 538 insertions(+), 464 deletions(-) diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index 136f07259..dd3ffc8ad 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -141,7 +141,7 @@ namespace FreeSql.Internal break; case ExpressionType.Call: var callExp = exp as MethodCallExpression; - if (callExp.Method.Name == "ToList" && callExp.Object?.Type.FullName.StartsWith("FreeSql.ISelect`") == true) + if (callExp.Method.Name == "ToList" && callExp.Object != null && typeof(ISelect0).IsAssignableFrom(callExp.Object.Type)) { parent.SubSelectMany = exp; parent.CsType = exp.Type.GetGenericArguments().FirstOrDefault(); @@ -1204,8 +1204,10 @@ namespace FreeSql.Internal case "Min": return $"min({ExpressionLambdaToSql(exp3.Arguments[0], tsc)})"; } } - if (callType.FullName.StartsWith("FreeSql.ISelect`")) - { //子表查询 + if (typeof(ISelect0).IsAssignableFrom(callType)) + { + //子表查询 + var isSubQuery = false; switch (exp3.Method.Name) { case "Any": //exists @@ -1217,443 +1219,389 @@ namespace FreeSql.Internal case "ToList": //where in case "ToOne": case "First": - var anyArgs = exp3.Arguments; - var exp3Stack = new Stack(); - var exp3tmp = exp3.Object; - if (exp3.Method.Name == "Any" && exp3tmp != null && anyArgs.Any()) - exp3Stack.Push(Expression.Call(exp3tmp, callType.GetMethod("Where", anyArgs.Select(a => a.Type).ToArray()), anyArgs.ToArray())); - while (exp3tmp != null) + isSubQuery = true; + break; + default: + if (tsc.style == ExpressionStyle.ReturnISelect && typeof(ISelect0).IsAssignableFrom(exp3.Method.ReturnType)) + isSubQuery = true; + break; + } + if (isSubQuery) + { + var anyArgs = exp3.Arguments; + var exp3Stack = new Stack(); + var exp3tmp = exp3.Object; + if (exp3.Method.Name == "Any" && exp3tmp != null && anyArgs.Any()) + exp3Stack.Push(Expression.Call(exp3tmp, callType.GetMethod("Where", anyArgs.Select(a => a.Type).ToArray()), anyArgs.ToArray())); + while (exp3tmp != null) + { + exp3Stack.Push(exp3tmp); + switch (exp3tmp.NodeType) { - exp3Stack.Push(exp3tmp); - switch (exp3tmp.NodeType) - { - case ExpressionType.Call: - var exp3tmpCall = (exp3tmp as MethodCallExpression); - exp3tmp = exp3tmpCall.Object == null ? exp3tmpCall.Arguments.FirstOrDefault() : exp3tmpCall.Object; - continue; - case ExpressionType.MemberAccess: exp3tmp = (exp3tmp as MemberExpression).Expression; continue; - } - break; + case ExpressionType.Call: + var exp3tmpCall = (exp3tmp as MethodCallExpression); + exp3tmp = exp3tmpCall.Object == null ? exp3tmpCall.Arguments.FirstOrDefault() : exp3tmpCall.Object; + continue; + case ExpressionType.MemberAccess: exp3tmp = (exp3tmp as MemberExpression).Expression; continue; } - object fsql = null; - Expression fsqlExpLambda = null; - Select0Provider fsqlSelect0 = null; - List fsqltables = null; - var fsqltable1SetAlias = false; - var fsqltable1SetAliasGai = 0; - Type fsqlType = null; - Stack asSelectBefores = new Stack(); - var asSelectSql = ""; - Type asSelectEntityType = null; - MemberExpression asSelectParentExp1 = null; - Expression asSelectParentExp = null; - while (exp3Stack.Any()) + break; + } + object fsql = null; + Expression fsqlExpLambda = null; + Select0Provider fsqlSelect0 = null; + List fsqltables = null; + var fsqltable1SetAlias = false; + var fsqltable1SetAliasGai = 0; + Type fsqlType = null; + Stack asSelectBefores = new Stack(); + var asSelectSql = ""; + Type asSelectEntityType = null; + MemberExpression asSelectParentExp1 = null; + Expression asSelectParentExp = null; + while (exp3Stack.Any()) + { + exp3tmp = exp3Stack.Pop(); + if (typeof(ISelect0).IsAssignableFrom(exp3tmp.Type) && fsql == null) { - exp3tmp = exp3Stack.Pop(); - if (exp3tmp.Type.FullName.StartsWith("FreeSql.ISelect`") && fsql == null) + if (exp3tmp.NodeType == ExpressionType.Call) { - if (exp3tmp.NodeType == ExpressionType.Call) + var exp3tmpCall = (exp3tmp as MethodCallExpression); + if (exp3tmpCall.Method.Name == "AsSelect" && exp3tmpCall.Object == null) { - var exp3tmpCall = (exp3tmp as MethodCallExpression); - if (exp3tmpCall.Method.Name == "AsSelect" && exp3tmpCall.Object == null) + var exp3tmpArg1Type = exp3tmpCall.Arguments.FirstOrDefault()?.Type; + if (exp3tmpArg1Type != null) { - var exp3tmpArg1Type = exp3tmpCall.Arguments.FirstOrDefault()?.Type; - if (exp3tmpArg1Type != null) + asSelectEntityType = exp3tmpArg1Type.GetElementType() ?? exp3tmpArg1Type.GetGenericArguments().FirstOrDefault(); + if (asSelectEntityType != null) { - asSelectEntityType = exp3tmpArg1Type.GetElementType() ?? exp3tmpArg1Type.GetGenericArguments().FirstOrDefault(); - if (asSelectEntityType != null) - { - fsql = _dicExpressionLambdaToSqlAsSelectMethodInfo.GetOrAdd(asSelectEntityType, asSelectEntityType2 => typeof(IFreeSql).GetMethod("Select", new Type[0]).MakeGenericMethod(asSelectEntityType2)) - .Invoke(_common._orm, null); + fsql = _dicExpressionLambdaToSqlAsSelectMethodInfo.GetOrAdd(asSelectEntityType, asSelectEntityType2 => typeof(IFreeSql).GetMethod("Select", new Type[0]).MakeGenericMethod(asSelectEntityType2)) + .Invoke(_common._orm, null); + if (asSelectBefores.Any()) + { + asSelectParentExp1 = asSelectBefores.Pop() as MemberExpression; if (asSelectBefores.Any()) { - asSelectParentExp1 = asSelectBefores.Pop() as MemberExpression; - if (asSelectBefores.Any()) + asSelectParentExp = asSelectBefores.Pop(); + if (asSelectParentExp != null) { - asSelectParentExp = asSelectBefores.Pop(); - if (asSelectParentExp != null) - { - var testExecuteExp = asSelectParentExp; - if (asSelectParentExp.NodeType == ExpressionType.Parameter) //执行leftjoin关联 - testExecuteExp = Expression.Property(testExecuteExp, _common.GetTableByEntity(asSelectParentExp.Type).ColumnsByCs.First().Key); - var tsc2 = tsc.Clone_selectColumnMap_diymemexp_tbtype(new List(), tsc.diymemexp, SelectTableInfoType.LeftJoin); - tsc2.isDisableDiyParse = true; - tsc2.style = ExpressionStyle.AsSelect; - asSelectSql = ExpressionLambdaToSql(testExecuteExp, tsc2); - } + var testExecuteExp = asSelectParentExp; + if (asSelectParentExp.NodeType == ExpressionType.Parameter) //执行leftjoin关联 + testExecuteExp = Expression.Property(testExecuteExp, _common.GetTableByEntity(asSelectParentExp.Type).ColumnsByCs.First().Key); + var tsc2 = tsc.Clone_selectColumnMap_diymemexp_tbtype(new List(), tsc.diymemexp, SelectTableInfoType.LeftJoin); + tsc2.isDisableDiyParse = true; + tsc2.style = ExpressionStyle.AsSelect; + asSelectSql = ExpressionLambdaToSql(testExecuteExp, tsc2); } } } } } - if (new[] { "Where", "WhereIf" }.Contains(exp3tmpCall.Method.Name)) + } + if (new[] { "Where", "WhereIf" }.Contains(exp3tmpCall.Method.Name)) + { + //if (exp3tmpCall.Object != null) //BaseEntity.Where 也需要兼容 { - //if (exp3tmpCall.Object != null) //BaseEntity.Where 也需要兼容 + //这段特别兼容 DbSet.Where 表达式解析 #216 + var exp3tmpTestCall = Expression.Call(exp3tmpCall.Object, exp3tmpCall.Method, exp3tmpCall.Arguments.Select(a => { - //这段特别兼容 DbSet.Where 表达式解析 #216 - var exp3tmpTestCall = Expression.Call(exp3tmpCall.Object, exp3tmpCall.Method, exp3tmpCall.Arguments.Select(a => + var a2 = a; + if (a2.NodeType == ExpressionType.Quote) a2 = (a as UnaryExpression)?.Operand; + if (a2?.NodeType == ExpressionType.Lambda) { - var a2 = a; - if (a2.NodeType == ExpressionType.Quote) a2 = (a as UnaryExpression)?.Operand; - if (a2?.NodeType == ExpressionType.Lambda) - { - var alambda = a2 as LambdaExpression; - if (alambda.ReturnType == typeof(bool)) - return Expression.Constant(null, a.Type);// Expression.Lambda(Expression.Constant(true), alambda.Parameters); - } - return a; - //if (a.Type == typeof(Expression<>).MakeGenericType(typeof(Func<,>).MakeGenericType(exp3tmp.Type.GetGenericArguments()[0], typeof(bool)))) - // return Expression.Lambda(Expression.Constant(true), - }).ToArray()); - fsql = Expression.Lambda(exp3tmpTestCall).Compile().DynamicInvoke(); - var fsqlFindMethod = fsql.GetType().GetMethod(exp3tmpCall.Method.Name, exp3tmpCall.Arguments.Select(a => a.Type).ToArray()); - if (fsqlFindMethod == null) - throw new Exception(CoreStrings.Unable_Parse_ExpressionMethod(exp3tmpCall.Method.Name)); - var exp3StackOld = exp3Stack; - exp3Stack = new Stack(); - exp3Stack.Push(Expression.Call(Expression.Constant(fsql), fsqlFindMethod, exp3tmpCall.Arguments)); - while (exp3StackOld.Any()) exp3Stack.Push(exp3StackOld.Pop()); - } + var alambda = a2 as LambdaExpression; + if (alambda.ReturnType == typeof(bool)) + return Expression.Constant(null, a.Type);// Expression.Lambda(Expression.Constant(true), alambda.Parameters); + } + return a; + //if (a.Type == typeof(Expression<>).MakeGenericType(typeof(Func<,>).MakeGenericType(exp3tmp.Type.GetGenericArguments()[0], typeof(bool)))) + // return Expression.Lambda(Expression.Constant(true), + }).ToArray()); + fsql = Expression.Lambda(exp3tmpTestCall).Compile().DynamicInvoke(); + var fsqlFindMethod = fsql.GetType().GetMethod(exp3tmpCall.Method.Name, exp3tmpCall.Arguments.Select(a => a.Type).ToArray()); + if (fsqlFindMethod == null) + throw new Exception(CoreStrings.Unable_Parse_ExpressionMethod(exp3tmpCall.Method.Name)); + var exp3StackOld = exp3Stack; + exp3Stack = new Stack(); + exp3Stack.Push(Expression.Call(Expression.Constant(fsql), fsqlFindMethod, exp3tmpCall.Arguments)); + while (exp3StackOld.Any()) exp3Stack.Push(exp3StackOld.Pop()); } } - if (fsql == null) - { - fsql = Expression.Lambda(exp3tmp).Compile().DynamicInvoke(); - fsqlExpLambda = exp3tmp; - } - fsqlType = fsql?.GetType(); - if (fsqlType == null) break; - fsqlSelect0 = fsql as Select0Provider; - switch (exp3.Method.Name) - { - case "Any": //exists - switch (_ado.DataType) - { - case DataType.Oracle: - case DataType.OdbcOracle: - case DataType.CustomOracle: - case DataType.Dameng: - case DataType.GBase: - break; - default: - fsqlSelect0._limit = 1; //#462 ORACLE rownum <= 2 会影响索引变慢 - break; - } - break; - case "ToOne": - case "First": - fsqlSelect0._limit = 1; //#462 - break; - } - if (tsc.dbParams != null) fsqlSelect0._params = tsc.dbParams; - fsqltables = fsqlSelect0._tables; - //fsqltables[0].Alias = $"{tsc._tables[0].Alias}_{fsqltables[0].Alias}"; - if (fsqltables != tsc._tables) - { - if (tsc._tables == null && tsc.diymemexp == null) throw new NotSupportedException(CoreStrings.EspeciallySubquery_Cannot_Parsing); //2020-12-11 IUpdate 条件不支持子查询 - if (tsc._tables != null) //groupby is null - { - fsqltables.AddRange(tsc._tables.Select(a => new SelectTableInfo - { - Alias = a.Alias, - On = "1=1", - Table = a.Table, - Type = SelectTableInfoType.Parent, - Parameter = a.Parameter - })); - } - } - if (tsc.whereGlobalFilter != null) - { - fsqlSelect0._whereGlobalFilter.Clear(); - if (tsc.whereGlobalFilter.Any()) fsqlSelect0._whereGlobalFilter.AddRange(tsc.whereGlobalFilter); - } } - else if (fsqlType != null) + if (fsql == null) { - var call3Exp = exp3tmp as MethodCallExpression; - var method = call3Exp.Method; - //var method = fsqlType.GetMethod(call3Exp.Method.Name, call3Exp.Arguments.Select(a => a.Type).ToArray()); - //if (call3Exp.Method.ContainsGenericParameters) method.MakeGenericMethod(call3Exp.Method.GetGenericArguments()); - var parms = method.GetParameters(); - var args = new object[call3Exp.Arguments.Count]; - for (var a = 0; a < args.Length; a++) - { - var arg3Exp = call3Exp.Arguments[a]; - if (arg3Exp.NodeType == ExpressionType.Constant) + fsql = Expression.Lambda(exp3tmp).Compile().DynamicInvoke(); + fsqlExpLambda = exp3tmp; + } + fsqlType = fsql?.GetType(); + if (fsqlType == null) break; + fsqlSelect0 = fsql as Select0Provider; + switch (exp3.Method.Name) + { + case "Any": //exists + switch (_ado.DataType) { - args[a] = (arg3Exp as ConstantExpression)?.Value; - } - else if (arg3Exp == fsqlExpLambda) - { - args[a] = fsql; - } - else - { - var argExp = (arg3Exp as UnaryExpression)?.Operand; - if (argExp != null) - { - if (argExp.NodeType == ExpressionType.Lambda) - { - if (fsqltable1SetAlias == false) - { - fsqltable1SetAlias = true; - var argExpLambda = argExp as LambdaExpression; - var fsqlTypeGenericArgs = fsqlType.GetGenericArguments(); - - if (argExpLambda.Parameters.Count == 1 && argExpLambda.Parameters[0].Type.FullName.StartsWith("FreeSql.Internal.Model.HzyTuple`")) - { - for (; fsqltable1SetAliasGai < fsqlTypeGenericArgs.Length; fsqltable1SetAliasGai++) - fsqltables[fsqltable1SetAliasGai].Alias = "ht" + (fsqltable1SetAliasGai + 1); - } - else - { - for (; fsqltable1SetAliasGai < fsqlTypeGenericArgs.Length && fsqltable1SetAliasGai < argExpLambda.Parameters.Count; fsqltable1SetAliasGai++) - { - var alias = argExpLambda.Parameters[fsqltable1SetAliasGai].Name; - if (fsqltables.Any(x => x.Type == SelectTableInfoType.Parent && x.Alias == alias)) alias = $"sub_{alias}"; - fsqltables[fsqltable1SetAliasGai].Alias = alias; - } - } - } - } - else - { - argExp = null; - } - } - args[a] = argExp ?? Expression.Lambda(arg3Exp).Compile().DynamicInvoke(); - //if (args[a] == null) ExpressionLambdaToSql(call3Exp.Arguments[a], fsqltables, null, null, SelectTableInfoType.From, true); - } - } - var isSubSelectPdme = tsc._tables == null && tsc.diymemexp != null || tsc.diymemexp is Select0Provider.WithTempQueryParser; - try - { - if (isSubSelectPdme) - { - if (_subSelectParentDiyMemExps.Value == null) _subSelectParentDiyMemExps.Value = new List(); - _subSelectParentDiyMemExps.Value.Add(tsc.diymemexp); - } - switch (method.Name) - { - case nameof(ISelect.From): - case nameof(ISelect.FromQuery): - case nameof(ISelect.WithTempQuery): - fsql = method.Invoke(fsql, args); - fsqlType = fsql.GetType(); - fsqlSelect0 = fsql as Select0Provider; - if (tsc.dbParams != null) fsqlSelect0._params = tsc.dbParams; - fsqltables = fsqlSelect0._tables; - fsqltable1SetAlias = false; - if (method.Name == nameof(ISelect.WithTempQuery)) fsqltable1SetAliasGai = 0; + case DataType.Oracle: + case DataType.OdbcOracle: + case DataType.CustomOracle: + case DataType.Dameng: + case DataType.GBase: break; default: - method.Invoke(fsql, args); + fsqlSelect0._limit = 1; //#462 ORACLE rownum <= 2 会影响索引变慢 break; } - } - finally + break; + case "ToOne": + case "First": + fsqlSelect0._limit = 1; //#462 + break; + } + if (tsc.dbParams != null) fsqlSelect0._params = tsc.dbParams; + fsqltables = fsqlSelect0._tables; + //fsqltables[0].Alias = $"{tsc._tables[0].Alias}_{fsqltables[0].Alias}"; + if (fsqltables != tsc._tables) + { + if (tsc._tables == null && tsc.diymemexp == null) throw new NotSupportedException(CoreStrings.EspeciallySubquery_Cannot_Parsing); //2020-12-11 IUpdate 条件不支持子查询 + if (tsc._tables != null) //groupby is null { - if (isSubSelectPdme) + fsqltables.AddRange(tsc._tables.Select(a => new SelectTableInfo { - var psgpdmes = _subSelectParentDiyMemExps.Value; - if (psgpdmes != null) - { - psgpdmes.RemoveAt(psgpdmes.Count - 1); - if (psgpdmes.Count == 0) _subSelectParentDiyMemExps.Value = null; - } - } + Alias = a.Alias, + On = "1=1", + Table = a.Table, + Type = SelectTableInfoType.Parent, + Parameter = a.Parameter + })); } } - if (fsql == null) asSelectBefores.Push(exp3tmp); - } - if (fsql != null) - { - if (fsqlSelect0 != null && tsc._tableRule != null && fsqlSelect0._tableRules.Any() == false) - fsqlSelect0._tableRules.Add(tsc._tableRule); - - if (asSelectParentExp != null) + if (tsc.whereGlobalFilter != null) { - //执行 AsSelect() 的关联,OneToMany,ManyToMany,PgArrayToMany - if (fsqltables[0].Parameter == null) + fsqlSelect0._whereGlobalFilter.Clear(); + if (tsc.whereGlobalFilter.Any()) fsqlSelect0._whereGlobalFilter.AddRange(tsc.whereGlobalFilter); + } + } + else if (fsqlType != null) + { + var call3Exp = exp3tmp as MethodCallExpression; + var method = call3Exp.Method; + //var method = fsqlType.GetMethod(call3Exp.Method.Name, call3Exp.Arguments.Select(a => a.Type).ToArray()); + //if (call3Exp.Method.ContainsGenericParameters) method.MakeGenericMethod(call3Exp.Method.GetGenericArguments()); + var parms = method.GetParameters(); + var args = new object[call3Exp.Arguments.Count]; + for (var a = 0; a < args.Length; a++) + { + var arg3Exp = call3Exp.Arguments[a]; + if (arg3Exp.NodeType == ExpressionType.Constant) { - fsqltables[0].Alias = $"tb_{fsqltables.Count}"; - fsqltables[0].Parameter = Expression.Parameter(asSelectEntityType, fsqltables[0].Alias); + args[a] = (arg3Exp as ConstantExpression)?.Value; } - - var parm123Tb = _common.GetTableByEntity(asSelectParentExp.Type); - var parm123Ref = parm123Tb.GetTableRef(asSelectParentExp1.Member.Name, true, true); - if (parm123Ref != null) + else if (arg3Exp == fsqlExpLambda) { - if (parm123Ref.RefType == TableRefType.PgArrayToMany) + args[a] = fsql; + } + //UnionAll/FromQuery 多层级嵌套 + else if (arg3Exp is NewArrayExpression arg3ExpNewArray && arg3ExpNewArray?.Expressions.Any() == true && + typeof(ISelect0).IsAssignableFrom(arg3ExpNewArray.Expressions[0].Type)) + { + var arg3ExpNewArrayTables = fsqltables.Select(tbcopy => new SelectTableInfo { - var amtReftbname = ExpressionLambdaToSql(Expression.MakeMemberAccess(asSelectParentExp, parm123Tb.Properties[parm123Tb.ColumnsByPosition[0].CsName]), tsc); - amtReftbname = amtReftbname.Substring(0, amtReftbname.Length - _common.QuoteSqlName(parm123Tb.ColumnsByPosition[0].Attribute.Name).Length - 1); - if (parm123Ref.RefColumns[0] == fsqltables[0].Table.Primarys[0]) + Alias = tbcopy.Alias, + On = "1=1", + Table = tbcopy.Table, + Type = SelectTableInfoType.Parent, + Parameter = tbcopy.Parameter + }).ToList(); + args[a] = arg3ExpNewArray.Expressions.Select((b, bi) => + { + var thenTsc = new ExpTSC { - var dbinfo = _common._orm.CodeFirst.GetDbInfo(parm123Ref.Columns[0].CsType); - (fsql as Select0Provider)._where.Append(" AND (").Append($"{amtReftbname}.{_common.QuoteSqlName(parm123Ref.Columns[0].Attribute.Name)} @> ARRAY[{fsqltables[0].Alias}.{_common.QuoteSqlName(parm123Ref.RefColumns[0].Attribute.Name)}]::{dbinfo?.dbtype}").Append(")"); - } - else if (parm123Ref.Columns[0] == parm123Tb.Primarys[0]) + _tables = arg3ExpNewArrayTables, + _tableRule = tsc._tableRule, + diymemexp = tsc.diymemexp, + tbtype = SelectTableInfoType.From, + isQuoteName = true, + isDisableDiyParse = false, + style = ExpressionStyle.ReturnISelect, + whereGlobalFilter = tsc.whereGlobalFilter, + dbParams = tsc.dbParams + }; + ExpressionLambdaToSql(b, thenTsc); + return thenTsc._returnISelect; + }).ToArray(); + } + else if (typeof(ISelect0).IsAssignableFrom(arg3Exp.Type)) + { + var arg3ExpNewArrayTables = fsqltables.Select(tbcopy => new SelectTableInfo + { + Alias = tbcopy.Alias, + On = "1=1", + Table = tbcopy.Table, + Type = SelectTableInfoType.Parent, + Parameter = tbcopy.Parameter + }).ToList(); + var thenTsc = new ExpTSC + { + _tables = arg3ExpNewArrayTables, + _tableRule = tsc._tableRule, + diymemexp = tsc.diymemexp, + tbtype = SelectTableInfoType.From, + isQuoteName = true, + isDisableDiyParse = false, + style = ExpressionStyle.ReturnISelect, + whereGlobalFilter = tsc.whereGlobalFilter, + dbParams = tsc.dbParams + }; + ExpressionLambdaToSql(arg3Exp, thenTsc); + args[a] = thenTsc._returnISelect; + } + else + { + var argExp = (arg3Exp as UnaryExpression)?.Operand; + if (argExp != null) + { + if (argExp.NodeType == ExpressionType.Lambda) { - var dbinfo = _common._orm.CodeFirst.GetDbInfo(parm123Ref.RefColumns[0].CsType); - (fsql as Select0Provider)._where.Append(" AND (").Append($"{fsqltables[0].Alias}.{_common.QuoteSqlName(parm123Ref.RefColumns[0].Attribute.Name)} @> ARRAY[{amtReftbname}.{_common.QuoteSqlName(parm123Ref.Columns[0].Attribute.Name)}]::{dbinfo?.dbtype}").Append(")"); + if (fsqltable1SetAlias == false) + { + fsqltable1SetAlias = true; + var argExpLambda = argExp as LambdaExpression; + var fsqlTypeGenericArgs = fsqlType.GetGenericArguments(); + + if (argExpLambda.Parameters.Count == 1 && argExpLambda.Parameters[0].Type.FullName.StartsWith("FreeSql.Internal.Model.HzyTuple`")) + { + for (; fsqltable1SetAliasGai < fsqlTypeGenericArgs.Length; fsqltable1SetAliasGai++) + fsqltables[fsqltable1SetAliasGai].Alias = "ht" + (fsqltable1SetAliasGai + 1); + } + else + { + for (; fsqltable1SetAliasGai < fsqlTypeGenericArgs.Length && fsqltable1SetAliasGai < argExpLambda.Parameters.Count; fsqltable1SetAliasGai++) + { + var alias = argExpLambda.Parameters[fsqltable1SetAliasGai].Name; + if (fsqltables.Any(x => x.Type == SelectTableInfoType.Parent && x.Alias == alias)) alias = $"sub_{alias}"; + fsqltables[fsqltable1SetAliasGai].Alias = alias; + } + } + } } else { - ; + argExp = null; } } + args[a] = argExp ?? Expression.Lambda(arg3Exp).Compile().DynamicInvoke(); + //if (args[a] == null) ExpressionLambdaToSql(call3Exp.Arguments[a], fsqltables, null, null, SelectTableInfoType.From, true); + } + } + var isSubSelectPdme = tsc._tables == null && tsc.diymemexp != null || tsc.diymemexp is Select0Provider.WithTempQueryParser; + try + { + if (isSubSelectPdme) + { + if (_subSelectParentDiyMemExps.Value == null) _subSelectParentDiyMemExps.Value = new List(); + _subSelectParentDiyMemExps.Value.Add(tsc.diymemexp); + } + switch (method.Name) + { + case nameof(ISelect.From): + case nameof(ISelect.FromQuery): + case nameof(ISelect.WithTempQuery): + fsql = method.Invoke(fsql, args); + fsqlType = fsql.GetType(); + fsqlSelect0 = fsql as Select0Provider; + if (tsc.dbParams != null) fsqlSelect0._params = tsc.dbParams; + fsqltables = fsqlSelect0._tables; + fsqltable1SetAlias = false; + if (method.Name == nameof(ISelect.WithTempQuery)) fsqltable1SetAliasGai = 0; + break; + default: + method.Invoke(fsql, args); + break; + } + } + finally + { + if (isSubSelectPdme) + { + var psgpdmes = _subSelectParentDiyMemExps.Value; + if (psgpdmes != null) + { + psgpdmes.RemoveAt(psgpdmes.Count - 1); + if (psgpdmes.Count == 0) _subSelectParentDiyMemExps.Value = null; + } + } + } + } + if (fsql == null) asSelectBefores.Push(exp3tmp); + } + if (fsql != null) + { + if (fsqlSelect0 != null && tsc._tableRule != null && fsqlSelect0._tableRules.Any() == false) + fsqlSelect0._tableRules.Add(tsc._tableRule); + + if (asSelectParentExp != null) + { + //执行 AsSelect() 的关联,OneToMany,ManyToMany,PgArrayToMany + if (fsqltables[0].Parameter == null) + { + fsqltables[0].Alias = $"tb_{fsqltables.Count}"; + fsqltables[0].Parameter = Expression.Parameter(asSelectEntityType, fsqltables[0].Alias); + } + + var parm123Tb = _common.GetTableByEntity(asSelectParentExp.Type); + var parm123Ref = parm123Tb.GetTableRef(asSelectParentExp1.Member.Name, true, true); + if (parm123Ref != null) + { + if (parm123Ref.RefType == TableRefType.PgArrayToMany) + { + var amtReftbname = ExpressionLambdaToSql(Expression.MakeMemberAccess(asSelectParentExp, parm123Tb.Properties[parm123Tb.ColumnsByPosition[0].CsName]), tsc); + amtReftbname = amtReftbname.Substring(0, amtReftbname.Length - _common.QuoteSqlName(parm123Tb.ColumnsByPosition[0].Attribute.Name).Length - 1); + if (parm123Ref.RefColumns[0] == fsqltables[0].Table.Primarys[0]) + { + var dbinfo = _common._orm.CodeFirst.GetDbInfo(parm123Ref.Columns[0].CsType); + (fsql as Select0Provider)._where.Append(" AND (").Append($"{amtReftbname}.{_common.QuoteSqlName(parm123Ref.Columns[0].Attribute.Name)} @> ARRAY[{fsqltables[0].Alias}.{_common.QuoteSqlName(parm123Ref.RefColumns[0].Attribute.Name)}]::{dbinfo?.dbtype}").Append(")"); + } + else if (parm123Ref.Columns[0] == parm123Tb.Primarys[0]) + { + var dbinfo = _common._orm.CodeFirst.GetDbInfo(parm123Ref.RefColumns[0].CsType); + (fsql as Select0Provider)._where.Append(" AND (").Append($"{fsqltables[0].Alias}.{_common.QuoteSqlName(parm123Ref.RefColumns[0].Attribute.Name)} @> ARRAY[{amtReftbname}.{_common.QuoteSqlName(parm123Ref.Columns[0].Attribute.Name)}]::{dbinfo?.dbtype}").Append(")"); + } else { - var fsqlWhere = _dicExpressionLambdaToSqlAsSelectWhereMethodInfo.GetOrAdd(asSelectEntityType, asSelectEntityType3 => - typeof(ISelect<>).MakeGenericType(asSelectEntityType3).GetMethod("Where", new[] { + ; + } + } + else + { + var fsqlWhere = _dicExpressionLambdaToSqlAsSelectWhereMethodInfo.GetOrAdd(asSelectEntityType, asSelectEntityType3 => + typeof(ISelect<>).MakeGenericType(asSelectEntityType3).GetMethod("Where", new[] { typeof(Expression<>).MakeGenericType(typeof(Func<,>).MakeGenericType(asSelectEntityType3, typeof(bool))) - })); - var fsqlWhereParam = fsqltables.First().Parameter; //Expression.Parameter(asSelectEntityType); - Expression fsqlWhereExp = null; - if (parm123Ref.RefType == TableRefType.ManyToMany) - { - //g.mysql.Select().Where(a => g.mysql.Select().Where(b => b.Tag_id == a.Id && b.Song_id == 1).Any()); - var manyTb = _common.GetTableByEntity(parm123Ref.RefMiddleEntityType); - var manySubSelectWhere = _dicExpressionLambdaToSqlAsSelectWhereMethodInfo.GetOrAdd(parm123Ref.RefMiddleEntityType, refMiddleEntityType3 => - typeof(ISelect<>).MakeGenericType(refMiddleEntityType3).GetMethod("Where", new[] { + })); + var fsqlWhereParam = fsqltables.First().Parameter; //Expression.Parameter(asSelectEntityType); + Expression fsqlWhereExp = null; + if (parm123Ref.RefType == TableRefType.ManyToMany) + { + //g.mysql.Select().Where(a => g.mysql.Select().Where(b => b.Tag_id == a.Id && b.Song_id == 1).Any()); + var manyTb = _common.GetTableByEntity(parm123Ref.RefMiddleEntityType); + var manySubSelectWhere = _dicExpressionLambdaToSqlAsSelectWhereMethodInfo.GetOrAdd(parm123Ref.RefMiddleEntityType, refMiddleEntityType3 => + typeof(ISelect<>).MakeGenericType(refMiddleEntityType3).GetMethod("Where", new[] { typeof(Expression<>).MakeGenericType(typeof(Func<,>).MakeGenericType(refMiddleEntityType3, typeof(bool))) - })); - var manySubSelectWhereSql = _dicExpressionLambdaToSqlAsSelectWhereSqlMethodInfo.GetOrAdd(parm123Ref.RefMiddleEntityType, refMiddleEntityType3 => - typeof(ISelect0<,>).MakeGenericType(typeof(ISelect<>).MakeGenericType(refMiddleEntityType3), refMiddleEntityType3).GetMethod("Where", new[] { typeof(string), typeof(object) })); - var manySubSelectAsSelectExp = _dicFreeSqlGlobalExtensionsAsSelectExpression.GetOrAdd(parm123Ref.RefMiddleEntityType, refMiddleEntityType3 => - Expression.Call( - typeof(FreeSqlGlobalExtensions).GetMethods(BindingFlags.Static | BindingFlags.Public).Where(mfil => mfil.Name == "AsSelect" && mfil.GetParameters().Length == 1).FirstOrDefault()?.MakeGenericMethod(refMiddleEntityType3), - Expression.Constant(Activator.CreateInstance(typeof(List<>).MakeGenericType(refMiddleEntityType3))) - )); - var manyMainParam = tsc._tables[0].Parameter; - var manySubSelectWhereParam = Expression.Parameter(parm123Ref.RefMiddleEntityType, $"M{fsqlWhereParam.Name}_M{asSelectParentExp.ToString().Replace(".", "__")}");//, $"{fsqlWhereParam.Name}__"); - Expression manySubSelectWhereExp = null; - for (var mn = 0; mn < parm123Ref.Columns.Count; mn++) - { - var col1 = parm123Ref.MiddleColumns[mn]; - var col2 = parm123Ref.Columns[mn]; - var pexp1 = Expression.Property(manySubSelectWhereParam, col1.CsName); - var pexp2 = Expression.Property(asSelectParentExp, col2.CsName); - if (col1.CsType != col2.CsType) - { - if (col1.CsType.IsNullableType()) pexp1 = Expression.Property(pexp1, _dicNullableValueProperty.GetOrAdd(col1.CsType, ct1 => ct1.GetProperty("Value"))); - if (col2.CsType.IsNullableType()) pexp2 = Expression.Property(pexp2, _dicNullableValueProperty.GetOrAdd(col2.CsType, ct2 => ct2.GetProperty("Value"))); - } - var tmpExp = Expression.Equal(pexp1, pexp2); - if (mn == 0) manySubSelectWhereExp = tmpExp; - else manySubSelectWhereExp = Expression.AndAlso(manySubSelectWhereExp, tmpExp); - } - var manySubSelectExpBoy = Expression.Call( - manySubSelectAsSelectExp, - manySubSelectWhere, - Expression.Lambda( - manySubSelectWhereExp, - manySubSelectWhereParam - ) - ); - Expression fsqlManyWhereExp = null; - for (var mn = 0; mn < parm123Ref.RefColumns.Count; mn++) - { - var col1 = parm123Ref.RefColumns[mn]; - var col2 = parm123Ref.MiddleColumns[mn + parm123Ref.Columns.Count + mn]; - var pexp1 = Expression.Property(fsqlWhereParam, col1.CsName); - var pexp2 = Expression.Property(manySubSelectWhereParam, col2.CsName); - if (col1.CsType != col2.CsType) - { - if (col1.CsType.IsNullableType()) pexp1 = Expression.Property(pexp1, _dicNullableValueProperty.GetOrAdd(col1.CsType, ct1 => ct1.GetProperty("Value"))); - if (col2.CsType.IsNullableType()) pexp2 = Expression.Property(pexp2, _dicNullableValueProperty.GetOrAdd(col2.CsType, ct2 => ct2.GetProperty("Value"))); - } - var tmpExp = Expression.Equal(pexp1, pexp2); - if (mn == 0) fsqlManyWhereExp = tmpExp; - else fsqlManyWhereExp = Expression.AndAlso(fsqlManyWhereExp, tmpExp); - } - MethodInfo manySubSelectAggMethod = null; - switch (exp3.Method.Name) //https://github.com/dotnetcore/FreeSql/issues/362 - { - case "Any": - case "Count": - fsqltables.Add(new SelectTableInfo { Alias = manySubSelectWhereParam.Name, Parameter = manySubSelectWhereParam, Table = manyTb, Type = SelectTableInfoType.Parent }); - fsqlWhere.Invoke(fsql, new object[] { Expression.Lambda(fsqlManyWhereExp, fsqlWhereParam) }); - var sql2 = fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { "1" })?.ToString(); - if (string.IsNullOrEmpty(sql2) == false) - manySubSelectExpBoy = Expression.Call(manySubSelectExpBoy, manySubSelectWhereSql, Expression.Constant($"exists({sql2.Replace(" \r\n", " \r\n ")})"), Expression.Constant(null)); - manySubSelectAggMethod = _dicExpressionLambdaToSqlAsSelectAggMethodInfo.GetOrAdd(parm123Ref.RefMiddleEntityType, _ => new ConcurrentDictionary()).GetOrAdd(exp3.Method.Name, exp3MethodName => - typeof(ISelect0<,>).MakeGenericType(typeof(ISelect<>).MakeGenericType(parm123Ref.RefMiddleEntityType), parm123Ref.RefMiddleEntityType).GetMethod(exp3MethodName, new Type[0])); - manySubSelectExpBoy = Expression.Call(manySubSelectExpBoy, manySubSelectAggMethod); - break; - case "Sum": - case "Min": - case "Max": - case "Avg": - case "ToList": - case "ToOne": - case "First": - //解析:string.Join(",", w.Roles.AsSelect().ToList(b => b.RoleName) - var exp3Args0 = (exp3.Arguments[0] as UnaryExpression)?.Operand as LambdaExpression; - manySubSelectAggMethod = _dicSelectMethodToSql.GetOrAdd(fsqlType, fsqlType2 => - fsqlType2.GetMethods().Where(a => a.Name == "ToSql" && a.GetParameters().Length == 2 && a.GetParameters()[1].ParameterType == typeof(FieldAliasOptions) && a.GetGenericArguments().Length == 1).FirstOrDefault()); - if (manySubSelectAggMethod == null || exp3Args0 == null) throw new ArgumentException(CoreStrings.ManyToMany_AsSelect_NotSupport_Sum_Avg_etc); - manySubSelectAggMethod = manySubSelectAggMethod.MakeGenericMethod(exp3Args0.ReturnType); - var fsqls0p = fsql as Select0Provider; - var fsqls0pWhere = fsqls0p._where.ToString(); - fsqls0p._where.Clear(); - var fsqltablesLast = new SelectTableInfo { Alias = manySubSelectWhereParam.Name, Parameter = manySubSelectWhereParam, Table = manyTb, Type = SelectTableInfoType.InnerJoin }; - fsqltables.Add(fsqltablesLast); - fsqlWhere.Invoke(fsql, new object[] { Expression.Lambda(fsqlManyWhereExp, fsqlWhereParam) }); - fsqltablesLast.NavigateCondition = fsqls0p._where.ToString(); - if (fsqltablesLast.NavigateCondition.StartsWith(" AND (")) fsqltablesLast.NavigateCondition = fsqltablesLast.NavigateCondition.Substring(6, fsqltablesLast.NavigateCondition.Length - 7); - fsqls0p._where.Clear().Append(fsqls0pWhere); - var tsc3 = tsc.CloneDisableDiyParse(); - tsc3._tables = tsc._tables.ToList(); - var where2 = ExpressionLambdaToSql(Expression.Lambda(manySubSelectWhereExp, manySubSelectWhereParam), tsc3); - if (string.IsNullOrEmpty(where2) == false) fsqls0p._where.Append(" AND (").Append(where2).Append(")"); - - switch (exp3.Method.Name) - { - case "Sum": - case "Min": - case "Max": - case "Avg": - var map = new ReadAnonymousTypeInfo(); - var field = new StringBuilder(); - var index = -1; - - for (var a = 0; a < exp3Args0.Parameters.Count; a++) fsqls0p._tables[a].Parameter = exp3Args0.Parameters[a]; - ReadAnonymousField(fsqls0p._tables, fsqls0p._tableRule, field, map, ref index, exp3Args0, null, null, null, null, null, false); - var fieldSql = field.Length > 0 ? field.Remove(0, 2).ToString() : null; - - var sql4 = fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { $"{exp3.Method.Name.ToLower()}({fieldSql})" })?.ToString(); - asSelectBefores.Clear(); - sql4 = $"({sql4.Replace(" \r\n", " \r\n ")})"; - if (exp3.Method.ReturnType.NullableTypeOrThis() != typeof(DateTime)) - sql4 = _common.IsNull(sql4, formatSql(exp3.Method.ReturnType.CreateInstanceGetDefaultValue(), exp3.Method.ReturnType, null, null)); - return sql4; - } - - var sql3 = manySubSelectAggMethod.Invoke(fsql, new object[] { exp3Args0, FieldAliasOptions.AsProperty }) as string; - asSelectBefores.Clear(); - return $"({sql3.Replace(" \r\n", " \r\n ")})"; - } - asSelectBefores.Clear(); - var tscwhereGlobalFilter = tsc.whereGlobalFilter; - try - { - tsc.whereGlobalFilter = fsqlSelect0._whereGlobalFilter; //ManyToMany 中间表过滤器 - return ExpressionLambdaToSql(manySubSelectExpBoy, tsc); - } - finally - { - tsc.whereGlobalFilter = tscwhereGlobalFilter; - } - } + })); + var manySubSelectWhereSql = _dicExpressionLambdaToSqlAsSelectWhereSqlMethodInfo.GetOrAdd(parm123Ref.RefMiddleEntityType, refMiddleEntityType3 => + typeof(ISelect0<,>).MakeGenericType(typeof(ISelect<>).MakeGenericType(refMiddleEntityType3), refMiddleEntityType3).GetMethod("Where", new[] { typeof(string), typeof(object) })); + var manySubSelectAsSelectExp = _dicFreeSqlGlobalExtensionsAsSelectExpression.GetOrAdd(parm123Ref.RefMiddleEntityType, refMiddleEntityType3 => + Expression.Call( + typeof(FreeSqlGlobalExtensions).GetMethods(BindingFlags.Static | BindingFlags.Public).Where(mfil => mfil.Name == "AsSelect" && mfil.GetParameters().Length == 1).FirstOrDefault()?.MakeGenericMethod(refMiddleEntityType3), + Expression.Constant(Activator.CreateInstance(typeof(List<>).MakeGenericType(refMiddleEntityType3))) + )); + var manyMainParam = tsc._tables[0].Parameter; + var manySubSelectWhereParam = Expression.Parameter(parm123Ref.RefMiddleEntityType, $"M{fsqlWhereParam.Name}_M{asSelectParentExp.ToString().Replace(".", "__")}");//, $"{fsqlWhereParam.Name}__"); + Expression manySubSelectWhereExp = null; for (var mn = 0; mn < parm123Ref.Columns.Count; mn++) { - var col1 = parm123Ref.RefColumns[mn]; + var col1 = parm123Ref.MiddleColumns[mn]; var col2 = parm123Ref.Columns[mn]; - var pexp1 = Expression.Property(fsqlWhereParam, col1.CsName); + var pexp1 = Expression.Property(manySubSelectWhereParam, col1.CsName); var pexp2 = Expression.Property(asSelectParentExp, col2.CsName); if (col1.CsType != col2.CsType) { @@ -1661,87 +1609,212 @@ namespace FreeSql.Internal if (col2.CsType.IsNullableType()) pexp2 = Expression.Property(pexp2, _dicNullableValueProperty.GetOrAdd(col2.CsType, ct2 => ct2.GetProperty("Value"))); } var tmpExp = Expression.Equal(pexp1, pexp2); - if (mn == 0) fsqlWhereExp = tmpExp; - else fsqlWhereExp = Expression.AndAlso(fsqlWhereExp, tmpExp); + if (mn == 0) manySubSelectWhereExp = tmpExp; + else manySubSelectWhereExp = Expression.AndAlso(manySubSelectWhereExp, tmpExp); } - fsqlWhere.Invoke(fsql, new object[] { Expression.Lambda(fsqlWhereExp, fsqlWhereParam) }); - } - } - } - asSelectBefores.Clear(); - - switch (exp3.Method.Name) - { - case "Any": - var sql = fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { "1" })?.ToString(); - if (string.IsNullOrEmpty(sql) == false) - return $"exists({sql.Replace(" \r\n", " \r\n ")})"; - break; - case "Count": - var sqlCount = fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { "count(1)" })?.ToString(); - if (string.IsNullOrEmpty(sqlCount) == false) - return $"({sqlCount.Replace(" \r\n", " \r\n ")})"; - break; - case "Sum": - case "Min": - case "Max": - case "Avg": - var tscClone1 = tsc.CloneDisableDiyParse(); - tscClone1.subSelect001 = fsql as Select0Provider; //#405 Oracle within group(order by ..) - tscClone1.isDisableDiyParse = false; - tscClone1._tables = fsqltables; - var exp3Args0 = (exp3.Arguments.FirstOrDefault() as UnaryExpression)?.Operand as LambdaExpression; - if (exp3Args0.Parameters.Count == 1 && exp3Args0.Parameters[0].Type.FullName.StartsWith("FreeSql.Internal.Model.HzyTuple`")) - exp3Args0 = new ReplaceHzyTupleToMultiParam().Modify(exp3Args0, fsqltables); - var sqlSumField = $"{exp3.Method.Name.ToLower()}({ExpressionLambdaToSql(exp3Args0, tscClone1)})"; - var sqlSum = tscClone1.subSelect001._limit <= 0 && tscClone1.subSelect001._skip <= 0 ? - fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { $"{exp3.Method.Name.ToLower()}({ExpressionLambdaToSql(exp3Args0, tscClone1)})" })?.ToString() : - tscClone1.subSelect001.GetNestSelectSql(exp3Args0, sqlSumField, tosqlField => - fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { tosqlField })?.ToString()); - if (string.IsNullOrEmpty(sqlSum) == false) - { - sqlSum = tscClone1.subSelect001._limit <= 0 && tscClone1.subSelect001._skip <= 0 ? - $"({sqlSum.Replace(" \r\n", " \r\n ")})" : $"({sqlSum})"; - if (exp3.Method.ReturnType.NullableTypeOrThis() != typeof(DateTime)) - sqlSum = _common.IsNull(sqlSum, formatSql(exp3.Method.ReturnType.CreateInstanceGetDefaultValue(), exp3.Method.ReturnType, null, null)); - return sqlSum; - } - break; - case "ToList": - case "ToOne": - case "First": - var tscClone2 = tsc.CloneDisableDiyParse(); - var fsqlSelect0p = fsql as Select0Provider; - tscClone2.subSelect001 = fsqlSelect0p; //#405 Oracle within group(order by ..) - tscClone2.isDisableDiyParse = false; - tscClone2._tables = fsqltables; - var exp3Args02 = (exp3.Arguments.FirstOrDefault() as UnaryExpression)?.Operand as LambdaExpression; - if (exp3Args02.Parameters.Count == 1 && exp3Args02.Parameters[0].Type.FullName.StartsWith("FreeSql.Internal.Model.HzyTuple`")) - exp3Args02 = new ReplaceHzyTupleToMultiParam().Modify(exp3Args02, fsqltables); - var sqlFirstField = ExpressionLambdaToSql(exp3Args02, tscClone2); - var sqlFirst = fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { sqlFirstField })?.ToString(); - if (string.IsNullOrEmpty(sqlFirst) == false) - { - if (fsqlSelect0p._limit > 0) + var manySubSelectExpBoy = Expression.Call( + manySubSelectAsSelectExp, + manySubSelectWhere, + Expression.Lambda( + manySubSelectWhereExp, + manySubSelectWhereParam + ) + ); + Expression fsqlManyWhereExp = null; + for (var mn = 0; mn < parm123Ref.RefColumns.Count; mn++) { - switch (_ado.DataType) //使用 Limit 后的 IN 子查询需要套一层 + var col1 = parm123Ref.RefColumns[mn]; + var col2 = parm123Ref.MiddleColumns[mn + parm123Ref.Columns.Count + mn]; + var pexp1 = Expression.Property(fsqlWhereParam, col1.CsName); + var pexp2 = Expression.Property(manySubSelectWhereParam, col2.CsName); + if (col1.CsType != col2.CsType) { - case DataType.MySql: - case DataType.OdbcMySql: - case DataType.CustomMySql: - case DataType.GBase: - if (exp3.Method.Name == "ToList") - return $"( SELECT * FROM ({sqlFirst.Replace(" \r\n", " \r\n ")}) ftblmt50 )"; - break; + if (col1.CsType.IsNullableType()) pexp1 = Expression.Property(pexp1, _dicNullableValueProperty.GetOrAdd(col1.CsType, ct1 => ct1.GetProperty("Value"))); + if (col2.CsType.IsNullableType()) pexp2 = Expression.Property(pexp2, _dicNullableValueProperty.GetOrAdd(col2.CsType, ct2 => ct2.GetProperty("Value"))); } + var tmpExp = Expression.Equal(pexp1, pexp2); + if (mn == 0) fsqlManyWhereExp = tmpExp; + else fsqlManyWhereExp = Expression.AndAlso(fsqlManyWhereExp, tmpExp); + } + MethodInfo manySubSelectAggMethod = null; + switch (exp3.Method.Name) //https://github.com/dotnetcore/FreeSql/issues/362 + { + case "Any": + case "Count": + fsqltables.Add(new SelectTableInfo { Alias = manySubSelectWhereParam.Name, Parameter = manySubSelectWhereParam, Table = manyTb, Type = SelectTableInfoType.Parent }); + fsqlWhere.Invoke(fsql, new object[] { Expression.Lambda(fsqlManyWhereExp, fsqlWhereParam) }); + var sql2 = fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { "1" })?.ToString(); + if (string.IsNullOrEmpty(sql2) == false) + manySubSelectExpBoy = Expression.Call(manySubSelectExpBoy, manySubSelectWhereSql, Expression.Constant($"exists({sql2.Replace(" \r\n", " \r\n ")})"), Expression.Constant(null)); + manySubSelectAggMethod = _dicExpressionLambdaToSqlAsSelectAggMethodInfo.GetOrAdd(parm123Ref.RefMiddleEntityType, _ => new ConcurrentDictionary()).GetOrAdd(exp3.Method.Name, exp3MethodName => + typeof(ISelect0<,>).MakeGenericType(typeof(ISelect<>).MakeGenericType(parm123Ref.RefMiddleEntityType), parm123Ref.RefMiddleEntityType).GetMethod(exp3MethodName, new Type[0])); + manySubSelectExpBoy = Expression.Call(manySubSelectExpBoy, manySubSelectAggMethod); + break; + case "Sum": + case "Min": + case "Max": + case "Avg": + case "ToList": + case "ToOne": + case "First": + //解析:string.Join(",", w.Roles.AsSelect().ToList(b => b.RoleName) + var exp3Args0 = (exp3.Arguments[0] as UnaryExpression)?.Operand as LambdaExpression; + manySubSelectAggMethod = _dicSelectMethodToSql.GetOrAdd(fsqlType, fsqlType2 => + fsqlType2.GetMethods().Where(a => a.Name == "ToSql" && a.GetParameters().Length == 2 && a.GetParameters()[1].ParameterType == typeof(FieldAliasOptions) && a.GetGenericArguments().Length == 1).FirstOrDefault()); + if (manySubSelectAggMethod == null || exp3Args0 == null) throw new ArgumentException(CoreStrings.ManyToMany_AsSelect_NotSupport_Sum_Avg_etc); + manySubSelectAggMethod = manySubSelectAggMethod.MakeGenericMethod(exp3Args0.ReturnType); + var fsqls0p = fsql as Select0Provider; + var fsqls0pWhere = fsqls0p._where.ToString(); + fsqls0p._where.Clear(); + var fsqltablesLast = new SelectTableInfo { Alias = manySubSelectWhereParam.Name, Parameter = manySubSelectWhereParam, Table = manyTb, Type = SelectTableInfoType.InnerJoin }; + fsqltables.Add(fsqltablesLast); + fsqlWhere.Invoke(fsql, new object[] { Expression.Lambda(fsqlManyWhereExp, fsqlWhereParam) }); + fsqltablesLast.NavigateCondition = fsqls0p._where.ToString(); + if (fsqltablesLast.NavigateCondition.StartsWith(" AND (")) fsqltablesLast.NavigateCondition = fsqltablesLast.NavigateCondition.Substring(6, fsqltablesLast.NavigateCondition.Length - 7); + fsqls0p._where.Clear().Append(fsqls0pWhere); + var tsc3 = tsc.CloneDisableDiyParse(); + tsc3._tables = tsc._tables.ToList(); + var where2 = ExpressionLambdaToSql(Expression.Lambda(manySubSelectWhereExp, manySubSelectWhereParam), tsc3); + if (string.IsNullOrEmpty(where2) == false) fsqls0p._where.Append(" AND (").Append(where2).Append(")"); + + switch (exp3.Method.Name) + { + case "Sum": + case "Min": + case "Max": + case "Avg": + var map = new ReadAnonymousTypeInfo(); + var field = new StringBuilder(); + var index = -1; + + for (var a = 0; a < exp3Args0.Parameters.Count; a++) fsqls0p._tables[a].Parameter = exp3Args0.Parameters[a]; + ReadAnonymousField(fsqls0p._tables, fsqls0p._tableRule, field, map, ref index, exp3Args0, null, null, null, null, null, false); + var fieldSql = field.Length > 0 ? field.Remove(0, 2).ToString() : null; + + var sql4 = fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { $"{exp3.Method.Name.ToLower()}({fieldSql})" })?.ToString(); + asSelectBefores.Clear(); + sql4 = $"({sql4.Replace(" \r\n", " \r\n ")})"; + if (exp3.Method.ReturnType.NullableTypeOrThis() != typeof(DateTime)) + sql4 = _common.IsNull(sql4, formatSql(exp3.Method.ReturnType.CreateInstanceGetDefaultValue(), exp3.Method.ReturnType, null, null)); + return sql4; + } + + var sql3 = manySubSelectAggMethod.Invoke(fsql, new object[] { exp3Args0, FieldAliasOptions.AsProperty }) as string; + asSelectBefores.Clear(); + return $"({sql3.Replace(" \r\n", " \r\n ")})"; + } + asSelectBefores.Clear(); + var tscwhereGlobalFilter = tsc.whereGlobalFilter; + try + { + tsc.whereGlobalFilter = fsqlSelect0._whereGlobalFilter; //ManyToMany 中间表过滤器 + return ExpressionLambdaToSql(manySubSelectExpBoy, tsc); + } + finally + { + tsc.whereGlobalFilter = tscwhereGlobalFilter; } - return $"({sqlFirst.Replace(" \r\n", " \r\n ")})"; } - break; + for (var mn = 0; mn < parm123Ref.Columns.Count; mn++) + { + var col1 = parm123Ref.RefColumns[mn]; + var col2 = parm123Ref.Columns[mn]; + var pexp1 = Expression.Property(fsqlWhereParam, col1.CsName); + var pexp2 = Expression.Property(asSelectParentExp, col2.CsName); + if (col1.CsType != col2.CsType) + { + if (col1.CsType.IsNullableType()) pexp1 = Expression.Property(pexp1, _dicNullableValueProperty.GetOrAdd(col1.CsType, ct1 => ct1.GetProperty("Value"))); + if (col2.CsType.IsNullableType()) pexp2 = Expression.Property(pexp2, _dicNullableValueProperty.GetOrAdd(col2.CsType, ct2 => ct2.GetProperty("Value"))); + } + var tmpExp = Expression.Equal(pexp1, pexp2); + if (mn == 0) fsqlWhereExp = tmpExp; + else fsqlWhereExp = Expression.AndAlso(fsqlWhereExp, tmpExp); + } + fsqlWhere.Invoke(fsql, new object[] { Expression.Lambda(fsqlWhereExp, fsqlWhereParam) }); + } } } asSelectBefores.Clear(); - break; + + switch (exp3.Method.Name) + { + case "Any": + var sql = fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { "1" })?.ToString(); + if (string.IsNullOrEmpty(sql) == false) + return $"exists({sql.Replace(" \r\n", " \r\n ")})"; + break; + case "Count": + var sqlCount = fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { "count(1)" })?.ToString(); + if (string.IsNullOrEmpty(sqlCount) == false) + return $"({sqlCount.Replace(" \r\n", " \r\n ")})"; + break; + case "Sum": + case "Min": + case "Max": + case "Avg": + var tscClone1 = tsc.CloneDisableDiyParse(); + tscClone1.subSelect001 = fsql as Select0Provider; //#405 Oracle within group(order by ..) + tscClone1.isDisableDiyParse = false; + tscClone1._tables = fsqltables; + var exp3Args0 = (exp3.Arguments.FirstOrDefault() as UnaryExpression)?.Operand as LambdaExpression; + if (exp3Args0.Parameters.Count == 1 && exp3Args0.Parameters[0].Type.FullName.StartsWith("FreeSql.Internal.Model.HzyTuple`")) + exp3Args0 = new ReplaceHzyTupleToMultiParam().Modify(exp3Args0, fsqltables); + var sqlSumField = $"{exp3.Method.Name.ToLower()}({ExpressionLambdaToSql(exp3Args0, tscClone1)})"; + var sqlSum = tscClone1.subSelect001._limit <= 0 && tscClone1.subSelect001._skip <= 0 ? + fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { $"{exp3.Method.Name.ToLower()}({ExpressionLambdaToSql(exp3Args0, tscClone1)})" })?.ToString() : + tscClone1.subSelect001.GetNestSelectSql(exp3Args0, sqlSumField, tosqlField => + fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { tosqlField })?.ToString()); + if (string.IsNullOrEmpty(sqlSum) == false) + { + sqlSum = tscClone1.subSelect001._limit <= 0 && tscClone1.subSelect001._skip <= 0 ? + $"({sqlSum.Replace(" \r\n", " \r\n ")})" : $"({sqlSum})"; + if (exp3.Method.ReturnType.NullableTypeOrThis() != typeof(DateTime)) + sqlSum = _common.IsNull(sqlSum, formatSql(exp3.Method.ReturnType.CreateInstanceGetDefaultValue(), exp3.Method.ReturnType, null, null)); + return sqlSum; + } + break; + case "ToList": + case "ToOne": + case "First": + var tscClone2 = tsc.CloneDisableDiyParse(); + var fsqlSelect0p = fsql as Select0Provider; + tscClone2.subSelect001 = fsqlSelect0p; //#405 Oracle within group(order by ..) + tscClone2.isDisableDiyParse = false; + tscClone2._tables = fsqltables; + var exp3Args02 = (exp3.Arguments.FirstOrDefault() as UnaryExpression)?.Operand as LambdaExpression; + if (exp3Args02.Parameters.Count == 1 && exp3Args02.Parameters[0].Type.FullName.StartsWith("FreeSql.Internal.Model.HzyTuple`")) + exp3Args02 = new ReplaceHzyTupleToMultiParam().Modify(exp3Args02, fsqltables); + var sqlFirstField = ExpressionLambdaToSql(exp3Args02, tscClone2); + var sqlFirst = fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { sqlFirstField })?.ToString(); + if (string.IsNullOrEmpty(sqlFirst) == false) + { + if (fsqlSelect0p._limit > 0) + { + switch (_ado.DataType) //使用 Limit 后的 IN 子查询需要套一层 + { + case DataType.MySql: + case DataType.OdbcMySql: + case DataType.CustomMySql: + case DataType.GBase: + if (exp3.Method.Name == "ToList") + return $"( SELECT * FROM ({sqlFirst.Replace(" \r\n", " \r\n ")}) ftblmt50 )"; + break; + } + } + return $"({sqlFirst.Replace(" \r\n", " \r\n ")})"; + } + break; + default: + if (tsc.style == ExpressionStyle.ReturnISelect) + { + tsc._returnISelect = fsql; + return ""; + } + break; + } + } + asSelectBefores.Clear(); + break; } } other3Exp = ExpressionLambdaToSqlOther(exp3, tsc); @@ -2347,7 +2420,7 @@ namespace FreeSql.Internal public enum ExpressionStyle { - Where, AsSelect, SelectColumns + Where, AsSelect, SelectColumns, ReturnISelect } public class ExpTSC { @@ -2369,6 +2442,7 @@ namespace FreeSql.Internal public List dbParams { get; set; } public string alias001 { get; set; } //单表字段的表别名 public int parseDepth { get; set; } //Aop 解析深度,防止死循环 + public object _returnISelect { get; set; } public ExpTSC SetMapColumnTmp(ColumnInfo col) { @@ -2680,7 +2754,7 @@ namespace FreeSql.Internal { case ExpressionType.Call: var exp3tmpCall = (exp3tmp as MethodCallExpression); - if (exp3tmpCall.Type.FullName.StartsWith("FreeSql.ISelect`") && exp3tmpCall.Method.Name == "AsSelect" && exp3tmpCall.Object == null) return; + if (typeof(ISelect0).IsAssignableFrom(exp3tmpCall.Type) && exp3tmpCall.Method.Name == "AsSelect" && exp3tmpCall.Object == null) return; exp3tmp = exp3tmpCall.Object == null ? exp3tmpCall.Arguments.FirstOrDefault() : exp3tmpCall.Object; continue; case ExpressionType.MemberAccess: diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs index ae8d18b8a..33ce90c41 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs @@ -412,7 +412,7 @@ namespace FreeSql.Internal.CommonProvider callExp = callExp.Object as MethodCallExpression; //忽略第一个方法 while (callExp != null) { - if (callExp?.Type.FullName.StartsWith("FreeSql.ISelect`") == true) + if (callExp != null && typeof(ISelect0).IsAssignableFrom(callExp.Type)) { callExpStack.Push(callExp); callExp = callExp.Object as MethodCallExpression; From 800640ada936a178efd01461306533767bc111bc Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Mon, 4 Nov 2024 16:23:47 +0800 Subject: [PATCH 12/38] =?UTF-8?q?-=20=E4=BC=98=E5=8C=96=20=E5=AD=90?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E4=B8=AD=20UnionAll=20=E7=9A=84=E8=A7=A3?= =?UTF-8?q?=E6=9E=90=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql/FreeSql.xml | 232 ++++++++++++++------------- FreeSql/Internal/CommonExpression.cs | 28 ++-- 2 files changed, 139 insertions(+), 121 deletions(-) diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index c2fac3dd8..c7899724b 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -1087,93 +1087,6 @@ - - - 动态创建实体类型 - - - - - 配置Class - - 类名 - 类标记的特性[Table(Name = "xxx")] [Index(xxxx)] - - - - - 获取类型构建器,可作为要构建的Type来引用 - - - - - 配置属性 - - 属性名称 - 属性类型 - 属性标记的特性-支持多个 - - - - - 配置属性 - - 属性名称 - 属性类型 - 该属性是否重写父类属性 - 属性标记的特性-支持多个 - - - - - 配置属性 - - 属性名称 - 属性类型 - 该属性是否重写父类属性 - 属性默认值 - 属性标记的特性-支持多个 - - - - - 配置父类 - - 父类类型 - - - - - Override属性 - - - - - - Emit动态创建出Class - Type - - - - - - Emit动态创建出Class - Type,不附带获取TableInfo - - - - - - 首字母小写 - - - - - - - 首字母大写 - - - - 获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值时,返回 "" @@ -5914,28 +5827,6 @@ 请使用 fsql.InsertDict(dict) 方法插入字典数据 - - - 动态构建Class Type - - - - - - 根据字典,创建 table 对应的实体对象 - - - - - - - - 根据实体对象,创建 table 对应的字典 - - - - - C#: that >= between && that <= and @@ -6472,3 +6363,126 @@ + + + + + 插入数据,传入实体集合 + + + + + + + + 插入数据,传入实体集合 + + + + + + + + 插入或更新数据,此功能依赖数据库特性(低版本可能不支持),参考如下: + MySql 5.6+: on duplicate key update + PostgreSQL 9.4+: on conflict do update + SqlServer 2008+: merge into + Oracle 11+: merge into + Sqlite: replace into + DuckDB: on conflict do update + 达梦: merge into + 人大金仓:on conflict do update + 神通:merge into + MsAccess:不支持 + 注意区别:FreeSql.Repository 仓储也有 InsertOrUpdate 方法(不依赖数据库特性) + + + + + + + 修改数据 + + + + + + + 修改数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} + + + 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 + + + + + 查询数据 + + + + + + + 查询数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} + + + 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 + + + + + 删除数据 + + + + + + + 删除数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} + + + 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 + + + + + 开启事务(不支持异步) + v1.5.0 关闭了线程事务超时自动提交的机制 + + 事务体 () => {} + + + + 开启事务(不支持异步) + v1.5.0 关闭了线程事务超时自动提交的机制 + + + 事务体 () => {} + + + + 数据库访问对象 + + + + + 所有拦截方法都在这里 + + + + + CodeFirst 模式开发相关方法 + + + + + DbFirst 模式开发相关方法 + + + + + 全局过滤设置,可默认附加为 Select/Update/Delete 条件 + + + + diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index dd3ffc8ad..a6a673a5a 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -1233,6 +1233,8 @@ namespace FreeSql.Internal var exp3tmp = exp3.Object; if (exp3.Method.Name == "Any" && exp3tmp != null && anyArgs.Any()) exp3Stack.Push(Expression.Call(exp3tmp, callType.GetMethod("Where", anyArgs.Select(a => a.Type).ToArray()), anyArgs.ToArray())); + if (tsc.style == ExpressionStyle.ReturnISelect && typeof(ISelect0).IsAssignableFrom(exp3.Method.ReturnType)) + exp3Stack.Push(exp3); //WithTempQuery 或第后一个方法附加到解析或运行,Any/Count/Sum/Min/Max/Avg/ToList/ToOne/First 等方法不需要 while (exp3tmp != null) { exp3Stack.Push(exp3tmp); @@ -1404,16 +1406,17 @@ namespace FreeSql.Internal else if (arg3Exp is NewArrayExpression arg3ExpNewArray && arg3ExpNewArray?.Expressions.Any() == true && typeof(ISelect0).IsAssignableFrom(arg3ExpNewArray.Expressions[0].Type)) { - var arg3ExpNewArrayTables = fsqltables.Select(tbcopy => new SelectTableInfo - { - Alias = tbcopy.Alias, - On = "1=1", - Table = tbcopy.Table, - Type = SelectTableInfoType.Parent, - Parameter = tbcopy.Parameter - }).ToList(); - args[a] = arg3ExpNewArray.Expressions.Select((b, bi) => + Array arg3Values = Array.CreateInstance(arg3ExpNewArray.Expressions[0].Type, arg3ExpNewArray.Expressions.Count); + for (var arg3Idx = 0;arg3Idx < arg3ExpNewArray.Expressions.Count; arg3Idx++) { + var arg3ExpNewArrayTables = fsqltables.Select(tbcopy => new SelectTableInfo + { + Alias = tbcopy.Alias, + On = "1=1", + Table = tbcopy.Table, + Type = SelectTableInfoType.Parent, + Parameter = tbcopy.Parameter + }).ToList(); var thenTsc = new ExpTSC { _tables = arg3ExpNewArrayTables, @@ -1426,9 +1429,10 @@ namespace FreeSql.Internal whereGlobalFilter = tsc.whereGlobalFilter, dbParams = tsc.dbParams }; - ExpressionLambdaToSql(b, thenTsc); - return thenTsc._returnISelect; - }).ToArray(); + ExpressionLambdaToSql(arg3ExpNewArray.Expressions[arg3Idx], thenTsc); + arg3Values.SetValue(thenTsc._returnISelect, arg3Idx); + } + args[a] = arg3Values; } else if (typeof(ISelect0).IsAssignableFrom(arg3Exp.Type)) { From 8b16e30d3b85b72c27b71abd76b71597c145b616 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Mon, 4 Nov 2024 17:01:10 +0800 Subject: [PATCH 13/38] =?UTF-8?q?-=20=E4=BC=98=E5=8C=96=20UnionAll=20?= =?UTF-8?q?=E5=B5=8C=E5=A5=97=E8=A7=A3=E6=9E=90=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql/FreeSql.xml | 232 +++++++++++++-------------- FreeSql/Internal/CommonExpression.cs | 1 + 2 files changed, 110 insertions(+), 123 deletions(-) diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index c7899724b..c2fac3dd8 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -1087,6 +1087,93 @@ + + + 动态创建实体类型 + + + + + 配置Class + + 类名 + 类标记的特性[Table(Name = "xxx")] [Index(xxxx)] + + + + + 获取类型构建器,可作为要构建的Type来引用 + + + + + 配置属性 + + 属性名称 + 属性类型 + 属性标记的特性-支持多个 + + + + + 配置属性 + + 属性名称 + 属性类型 + 该属性是否重写父类属性 + 属性标记的特性-支持多个 + + + + + 配置属性 + + 属性名称 + 属性类型 + 该属性是否重写父类属性 + 属性默认值 + 属性标记的特性-支持多个 + + + + + 配置父类 + + 父类类型 + + + + + Override属性 + + + + + + Emit动态创建出Class - Type + + + + + + Emit动态创建出Class - Type,不附带获取TableInfo + + + + + + 首字母小写 + + + + + + + 首字母大写 + + + + 获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值时,返回 "" @@ -5827,6 +5914,28 @@ 请使用 fsql.InsertDict(dict) 方法插入字典数据 + + + 动态构建Class Type + + + + + + 根据字典,创建 table 对应的实体对象 + + + + + + + + 根据实体对象,创建 table 对应的字典 + + + + + C#: that >= between && that <= and @@ -6363,126 +6472,3 @@ - - - - - 插入数据,传入实体集合 - - - - - - - - 插入数据,传入实体集合 - - - - - - - - 插入或更新数据,此功能依赖数据库特性(低版本可能不支持),参考如下: - MySql 5.6+: on duplicate key update - PostgreSQL 9.4+: on conflict do update - SqlServer 2008+: merge into - Oracle 11+: merge into - Sqlite: replace into - DuckDB: on conflict do update - 达梦: merge into - 人大金仓:on conflict do update - 神通:merge into - MsAccess:不支持 - 注意区别:FreeSql.Repository 仓储也有 InsertOrUpdate 方法(不依赖数据库特性) - - - - - - - 修改数据 - - - - - - - 修改数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} - - - 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 - - - - - 查询数据 - - - - - - - 查询数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} - - - 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 - - - - - 删除数据 - - - - - - - 删除数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} - - - 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 - - - - - 开启事务(不支持异步) - v1.5.0 关闭了线程事务超时自动提交的机制 - - 事务体 () => {} - - - - 开启事务(不支持异步) - v1.5.0 关闭了线程事务超时自动提交的机制 - - - 事务体 () => {} - - - - 数据库访问对象 - - - - - 所有拦截方法都在这里 - - - - - CodeFirst 模式开发相关方法 - - - - - DbFirst 模式开发相关方法 - - - - - 全局过滤设置,可默认附加为 Select/Update/Delete 条件 - - - - diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index a6a673a5a..5cc620377 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -1510,6 +1510,7 @@ namespace FreeSql.Internal case nameof(ISelect.From): case nameof(ISelect.FromQuery): case nameof(ISelect.WithTempQuery): + case nameof(ISelect.UnionAll): fsql = method.Invoke(fsql, args); fsqlType = fsql.GetType(); fsqlSelect0 = fsql as Select0Provider; From 01a0bfda63675b0644e3d4235a1a312d75620433 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Mon, 4 Nov 2024 17:51:13 +0800 Subject: [PATCH 14/38] =?UTF-8?q?-=20=E4=BC=98=E5=8C=96=20ExpressionCall?= =?UTF-8?q?=20+=20DynamicInvoke=20=E7=9A=84=E8=A7=A3=E6=9E=90=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FreeSqlGlobalExpressionCallExtensions.cs | 21 ++++++++++--- .../Extensions/LambadaExpressionExtensions.cs | 25 +++++++++++++++ FreeSql/Internal/CommonExpression.cs | 31 +++++++------------ 3 files changed, 54 insertions(+), 23 deletions(-) diff --git a/FreeSql/Extensions/FreeSqlGlobalExpressionCallExtensions.cs b/FreeSql/Extensions/FreeSqlGlobalExpressionCallExtensions.cs index eb3ebb16a..6ce95002e 100644 --- a/FreeSql/Extensions/FreeSqlGlobalExpressionCallExtensions.cs +++ b/FreeSql/Extensions/FreeSqlGlobalExpressionCallExtensions.cs @@ -1,12 +1,25 @@ using FreeSql.DataAnnotations; using System; +using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading; +using System.Xml.Linq; using static FreeSql.SqlExtExtensions; +internal static class FreeSqlInternalExpressionCallExtensions +{ + static ConcurrentDictionary _dicTypeExistsExpressionCallAttribute = new ConcurrentDictionary(); + public static bool IsExpressionCall(this MethodCallExpression node) + { + return node.Object == null && ( + _dicTypeExistsExpressionCallAttribute.GetOrAdd(node.Method.DeclaringType, dttp => dttp.GetCustomAttributes(typeof(ExpressionCallAttribute), true).Any()) || + node.Method.GetCustomAttributes(typeof(ExpressionCallAttribute), true).Any()); + } +} + [ExpressionCall] public static class FreeSqlGlobalExpressionCallExtensions { @@ -24,10 +37,10 @@ public static class FreeSqlGlobalExpressionCallExtensions { if (expContext.IsValueCreated == false || expContext.Value == null || expContext.Value.ParsedContent == null) return that >= between && that <= and; - var time1 = expContext.Value.RawExpression["between"].IsParameter() == false ? + var time1 = expContext.Value.RawExpression["between"].CanDynamicInvoke() ? expContext.Value.FormatSql(Expression.Lambda(expContext.Value.RawExpression["between"]).Compile().DynamicInvoke()) : expContext.Value.ParsedContent["between"]; - var time2 = expContext.Value.RawExpression["and"].IsParameter() == false ? + var time2 = expContext.Value.RawExpression["and"].CanDynamicInvoke() ? expContext.Value.FormatSql(Expression.Lambda(expContext.Value.RawExpression["and"]).Compile().DynamicInvoke()) : expContext.Value.ParsedContent["and"]; expContext.Value.Result = $"{expContext.Value.ParsedContent["that"]} between {time1} and {time2}"; @@ -47,10 +60,10 @@ public static class FreeSqlGlobalExpressionCallExtensions { if (expContext.IsValueCreated == false || expContext.Value == null || expContext.Value.ParsedContent == null) return that >= start && that < end; - var time1 = expContext.Value.RawExpression["start"].IsParameter() == false ? + var time1 = expContext.Value.RawExpression["start"].CanDynamicInvoke() ? expContext.Value.FormatSql(Expression.Lambda(expContext.Value.RawExpression["start"]).Compile().DynamicInvoke()) : expContext.Value.ParsedContent["start"]; - var time2 = expContext.Value.RawExpression["end"].IsParameter() == false ? + var time2 = expContext.Value.RawExpression["end"].CanDynamicInvoke() ? expContext.Value.FormatSql(Expression.Lambda(expContext.Value.RawExpression["end"]).Compile().DynamicInvoke()) : expContext.Value.ParsedContent["end"]; expContext.Value.Result = $"{expContext.Value.ParsedContent["that"]} >= {time1} and {expContext.Value.ParsedContent["that"]} < {time2}"; diff --git a/FreeSql/Extensions/LambadaExpressionExtensions.cs b/FreeSql/Extensions/LambadaExpressionExtensions.cs index 9f2191948..1a49167dd 100644 --- a/FreeSql/Extensions/LambadaExpressionExtensions.cs +++ b/FreeSql/Extensions/LambadaExpressionExtensions.cs @@ -1,4 +1,6 @@ using FreeSql; +using FreeSql.DataAnnotations; +using FreeSql.Internal; using System; using System.Collections.Concurrent; using System.Collections.Generic; @@ -227,6 +229,12 @@ namespace System.Linq.Expressions public static Expression> Not(this Expression> exp, bool condition = true) => (Expression>)InternalNotExpression(condition, exp); #endregion + public static bool CanDynamicInvoke(this Expression exp) + { + var test = new TestCanDynamicInvokeExpressionVisitor(); + test.Visit(exp); + return test.Result; + } public static bool IsParameter(this Expression exp) { var test = new TestParameterExpressionVisitor(); @@ -364,6 +372,23 @@ namespace System.Linq.Expressions } } + internal class TestCanDynamicInvokeExpressionVisitor : ExpressionVisitor + { + public bool Result { get; private set; } = true; + + protected override Expression VisitParameter(ParameterExpression node) + { + if (Result) Result = false; + return node; + } + + protected override Expression VisitMethodCall(MethodCallExpression node) + { + if (Result && node.IsExpressionCall()) Result = false; + return base.VisitMethodCall(node); + } + } + internal class GetParameterExpressionVisitor : ExpressionVisitor { public ParameterExpression Result { get; private set; } diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index 5cc620377..b05aee762 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -136,7 +136,7 @@ namespace FreeSql.Internal return false; case ExpressionType.Conditional: var condExp = exp as ConditionalExpression; - if (condExp.Test.IsParameter() == false) return ReadAnonymousField(_tables, _tableRule, field, parent, ref index, + if (condExp.Test.CanDynamicInvoke()) return ReadAnonymousField(_tables, _tableRule, field, parent, ref index, (bool)Expression.Lambda(condExp.Test).Compile().DynamicInvoke() ? condExp.IfTrue : condExp.IfFalse, select, diymemexp, whereGlobalFilter, findIncludeMany, findSubSelectMany, isAllDtoMap); break; case ExpressionType.Call: @@ -871,7 +871,7 @@ namespace FreeSql.Internal if (isLeftMapType) oldMapType = tsc.SetMapTypeReturnOld(leftMapColumn.Attribute.MapType); var right = (leftMapColumn != null && - (leftMapColumn.Table.AsTableColumn == leftMapColumn && rightExp.IsParameter() == false)) ? //自动分表 + (leftMapColumn.Table.AsTableColumn == leftMapColumn && rightExp.CanDynamicInvoke())) ? //自动分表 formatSql(Expression.Lambda(rightExp).Compile().DynamicInvoke(), leftMapColumn.Attribute.MapType, leftMapColumn, tsc.dbParams) : ExpressionLambdaToSql(rightExp, tsc); if (right != "NULL" && isLeftMapType && @@ -897,7 +897,7 @@ namespace FreeSql.Internal { oldMapType = tsc.SetMapTypeReturnOld(rightMapColumn.Attribute.MapType); left = (rightMapColumn != null && - (rightMapColumn.Table.AsTableColumn == rightMapColumn && leftExp.IsParameter() == false)) ? //自动分表 + (rightMapColumn.Table.AsTableColumn == rightMapColumn && leftExp.CanDynamicInvoke())) ? //自动分表 formatSql(Expression.Lambda(leftExp).Compile().DynamicInvoke(), rightMapColumn.Attribute.MapType, rightMapColumn, tsc.dbParams) : ExpressionLambdaToSql(leftExp, tsc); if (left != "NULL" && isRightMapType && @@ -963,7 +963,6 @@ namespace FreeSql.Internal tsc.SetMapColumnTmp(null).SetMapTypeReturnOld(oldMapType); return $"{left} {oper} {right}"; } - static ConcurrentDictionary _dicTypeExistsExpressionCallAttribute = new ConcurrentDictionary(); static ConcurrentDictionary> _dicMethodExistsExpressionCallAttribute = new ConcurrentDictionary>(); static ConcurrentDictionary _dicTypeExpressionCallClassContextFields = new ConcurrentDictionary(); static ThreadLocal> _subSelectParentDiyMemExps = new ThreadLocal>(); //子查询的所有父自定义查询,比如分组之后的子查询 @@ -1019,7 +1018,7 @@ namespace FreeSql.Internal //var othercExp = ExpressionLambdaToSqlOther(exp, tsc); //if (string.IsNullOrEmpty(othercExp) == false) return othercExp; var expOperand = (exp as UnaryExpression)?.Operand; - if (expOperand.Type.NullableTypeOrThis().IsEnum && exp.IsParameter() == false) + if (expOperand.Type.NullableTypeOrThis().IsEnum && exp.CanDynamicInvoke()) return formatSql(Expression.Lambda(exp).Compile().DynamicInvoke(), tsc.mapType, tsc.mapColumnTmp, tsc.dbParams); //bug: Where(a => a.Id = (int)enum) return ExpressionLambdaToSql(expOperand, tsc); case ExpressionType.Negate: @@ -1028,7 +1027,7 @@ namespace FreeSql.Internal case ExpressionType.Conditional: var condExp = exp as ConditionalExpression; var conditionalTestOldMapType = tsc.SetMapTypeReturnOld(null); - if (condExp.Test.IsParameter()) + if (condExp.Test.CanDynamicInvoke() == false) { var condExp2 = condExp.Test; if (condExp2.NodeType == ExpressionType.MemberAccess) condExp2 = Expression.Equal(condExp2, Expression.Constant(true)); @@ -1055,10 +1054,7 @@ namespace FreeSql.Internal case ExpressionType.Call: tsc.mapType = null; var exp3 = exp as MethodCallExpression; - if (exp3.Object == null && ( - _dicTypeExistsExpressionCallAttribute.GetOrAdd(exp3.Method.DeclaringType, dttp => dttp.GetCustomAttributes(typeof(ExpressionCallAttribute), true).Any()) || - exp3.Method.GetCustomAttributes(typeof(ExpressionCallAttribute), true).Any() - )) + if (exp3.IsExpressionCall()) { var ecc = new ExpressionCallContext { @@ -1097,10 +1093,7 @@ namespace FreeSql.Internal if (exp3.Arguments[a].NodeType == ExpressionType.Call) //判断如果参数也是标记 ExpressionCall { var exp3ArgsACallExp = exp3.Arguments[a] as MethodCallExpression; - if (exp3ArgsACallExp.Object == null && ( - _dicTypeExistsExpressionCallAttribute.GetOrAdd(exp3ArgsACallExp.Method.DeclaringType, dttp => dttp.GetCustomAttributes(typeof(ExpressionCallAttribute), true).Any()) || - exp3ArgsACallExp.Method.GetCustomAttributes(typeof(ExpressionCallAttribute), true).Any() - )) + if (exp3ArgsACallExp.IsExpressionCall()) isdyInvoke = false; } if (isdyInvoke) @@ -1824,7 +1817,7 @@ namespace FreeSql.Internal } other3Exp = ExpressionLambdaToSqlOther(exp3, tsc); if (string.IsNullOrEmpty(other3Exp) == false) return other3Exp; - if (exp3.IsParameter() == false) return formatSql(Expression.Lambda(exp3).Compile().DynamicInvoke(), tsc.mapType, tsc.mapColumnTmp, tsc.dbParams); + if (exp3.CanDynamicInvoke()) return formatSql(Expression.Lambda(exp3).Compile().DynamicInvoke(), tsc.mapType, tsc.mapColumnTmp, tsc.dbParams); if (exp3.Method.DeclaringType == typeof(Enumerable)) throw new Exception(CoreStrings.Not_Implemented_Expression_UseAsSelect(exp3, exp3.Method.Name, (exp3.Arguments.Count > 1 ? "..." : ""))); throw new Exception(CoreStrings.Not_Implemented_Expression(exp3)); case ExpressionType.Parameter: @@ -2230,7 +2223,7 @@ namespace FreeSql.Internal } if (dicExpressionOperator.TryGetValue(expBinary.NodeType, out var tryoper) == false) { - if (exp.IsParameter() == false) return formatSql(Expression.Lambda(exp).Compile().DynamicInvoke(), tsc.mapType, tsc.mapColumnTmp, tsc.dbParams); + if (exp.CanDynamicInvoke()) return formatSql(Expression.Lambda(exp).Compile().DynamicInvoke(), tsc.mapType, tsc.mapColumnTmp, tsc.dbParams); return ""; } switch (expBinary.NodeType) @@ -2392,11 +2385,11 @@ namespace FreeSql.Internal var expStackFirstMem = expStack.First() as MemberExpression; if (expStackFirstMem.Expression?.NodeType == ExpressionType.Constant) firstValue = (expStackFirstMem.Expression as ConstantExpression)?.Value; - else if (exp.IsParameter() == false) + else if (exp.CanDynamicInvoke()) return Expression.Lambda(exp).Compile().DynamicInvoke(); break; case ExpressionType.Call: - if (exp.IsParameter() == false) + if (exp.CanDynamicInvoke()) return Expression.Lambda(exp).Compile().DynamicInvoke(); break; } @@ -2417,7 +2410,7 @@ namespace FreeSql.Internal } return Expression.Lambda(exp).Compile().DynamicInvoke(); } - if (exp.IsParameter() == false) + if (exp.CanDynamicInvoke()) return Expression.Lambda(exp).Compile().DynamicInvoke(); success = false; return null; From fa0e5ba0e260592ac3f319134ce3a3b1d9ae0c0a Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Tue, 5 Nov 2024 11:32:41 +0800 Subject: [PATCH 15/38] =?UTF-8?q?-=20=E4=BC=98=E5=8C=96=20DbSet/Repository?= =?UTF-8?q?=20=E5=88=A0=E9=99=A4=E5=A4=9A=E4=B8=BB=E9=94=AE=E5=88=86?= =?UTF-8?q?=E6=89=B9300=EF=BC=8C=E9=98=B2=E6=AD=A2=20SQL=20AND=20OR=20?= =?UTF-8?q?=E8=BF=87=E9=95=BF=E9=97=AE=E9=A2=98=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql.DbContext/DbSet/DbSetAsync.cs | 11 ++++++++++- FreeSql.DbContext/DbSet/DbSetSync.cs | 11 ++++++++++- FreeSql.DbContext/FreeSql.DbContext.xml | 8 ++++++++ FreeSql/Internal/CommonExpression.cs | 11 +++++++---- FreeSql/Internal/CommonUtils.cs | 1 - 5 files changed, 35 insertions(+), 7 deletions(-) diff --git a/FreeSql.DbContext/DbSet/DbSetAsync.cs b/FreeSql.DbContext/DbSet/DbSetAsync.cs index 42ad2ca8b..31231e5b1 100644 --- a/FreeSql.DbContext/DbSet/DbSetAsync.cs +++ b/FreeSql.DbContext/DbSet/DbSetAsync.cs @@ -418,7 +418,16 @@ namespace FreeSql async Task DbContextBatchRemoveAsync(EntityState[] dels, CancellationToken cancellationToken) { if (dels.Any() == false) return 0; - var affrows = await this.OrmDelete(dels.Select(a => a.Value)).ExecuteAffrowsAsync(cancellationToken); + var affrows = 0; + if (_table.Primarys.Length == 1) + affrows = await this.OrmDelete(dels.Select(a => a.Value)).ExecuteAffrowsAsync(cancellationToken); + else + { + var takeMax = 300; + var execCount = (int)Math.Ceiling(1.0 * dels.Length / takeMax); + for (var a = 0; a < execCount; a++) + affrows += await this.OrmDelete(dels.Skip(a * takeMax).Take(Math.Min(takeMax, dels.Length - a * takeMax)).Select(d => d.Value)).ExecuteAffrowsAsync(cancellationToken); + } _db._entityChangeReport.AddRange(dels.Select(a => new DbContext.EntityChangeReport.ChangeInfo { EntityType = _entityType, Object = a.Value, Type = DbContext.EntityChangeType.Delete })); return affrows; } diff --git a/FreeSql.DbContext/DbSet/DbSetSync.cs b/FreeSql.DbContext/DbSet/DbSetSync.cs index 660acaad8..3cf7b2190 100644 --- a/FreeSql.DbContext/DbSet/DbSetSync.cs +++ b/FreeSql.DbContext/DbSet/DbSetSync.cs @@ -450,7 +450,16 @@ namespace FreeSql int DbContextBatchRemove(EntityState[] dels) { if (dels.Any() == false) return 0; - var affrows = this.OrmDelete(dels.Select(a => a.Value)).ExecuteAffrows(); + var affrows = 0; + if (_table.Primarys.Length == 1) + affrows = this.OrmDelete(dels.Select(a => a.Value)).ExecuteAffrows(); + else + { + var takeMax = 300; + var execCount = (int)Math.Ceiling(1.0 * dels.Length / takeMax); + for (var a = 0; a < execCount; a++) + affrows += this.OrmDelete(dels.Skip(a * takeMax).Take(Math.Min(takeMax, dels.Length - a * takeMax)).Select(d => d.Value)).ExecuteAffrows(); + } _db._entityChangeReport.AddRange(dels.Select(a => new DbContext.EntityChangeReport.ChangeInfo { EntityType = _entityType, Object = a.Value, Type = DbContext.EntityChangeType.Delete })); return affrows; //https://github.com/dotnetcore/FreeSql/issues/373 } diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index 38ae854fd..7bd2291ce 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -775,5 +775,13 @@ + + + 批量注入 Repository,可以参考代码自行调整 + + + + + diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index b05aee762..8181b067e 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -1347,10 +1347,6 @@ namespace FreeSql.Internal break; } break; - case "ToOne": - case "First": - fsqlSelect0._limit = 1; //#462 - break; } if (tsc.dbParams != null) fsqlSelect0._params = tsc.dbParams; fsqltables = fsqlSelect0._tables; @@ -1774,6 +1770,13 @@ namespace FreeSql.Internal case "ToList": case "ToOne": case "First": + switch (exp3.Method.Name) + { + case "ToOne": + case "First": + fsqlSelect0._limit = 1; //#462 + break; + } var tscClone2 = tsc.CloneDisableDiyParse(); var fsqlSelect0p = fsql as Select0Provider; tscClone2.subSelect001 = fsqlSelect0p; //#405 Oracle within group(order by ..) diff --git a/FreeSql/Internal/CommonUtils.cs b/FreeSql/Internal/CommonUtils.cs index 1f960f18e..dd93f7010 100644 --- a/FreeSql/Internal/CommonUtils.cs +++ b/FreeSql/Internal/CommonUtils.cs @@ -540,7 +540,6 @@ namespace FreeSql.Internal } if (dywhere is IEnumerable) { - var sb = new StringBuilder(); var ie = dywhere as IEnumerable; var ieSingle = LocalGetSingleElement(ie); From 01b9ae00760c23d67ae2f7b32103ea554501cbd9 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Fri, 8 Nov 2024 14:35:10 +0800 Subject: [PATCH 16/38] =?UTF-8?q?-=20=E8=B0=83=E6=95=B4=20resources=20?= =?UTF-8?q?=E8=BD=AC=E6=8D=A2=E6=88=90=20static=20class=20=E9=9D=99?= =?UTF-8?q?=E6=80=81=E7=B1=BB=EF=BC=9B#1917?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AggregateRootRepository.cs | 4 +- .../AggregateRootRepositoryAsync.cs | 2 +- .../AggregateRootRepositorySync.cs | 4 +- .../AggregateRootUtils.cs | 4 +- .../BaseEntityReadOnly.cs | 2 +- .../FreeSqlExtensionsLinq.cs | 2 +- .../QueryableProvider.cs | 16 +- .../ZeroDbContext.SelectImpl.cs | 2 +- .../ZeroDbContext.cs | 4 +- Extensions/FreeSql.Generator/ConsoleApp.cs | 10 +- FreeSql.DbContext/DbContext/DbContext.cs | 6 +- .../DbContext/DbContextErrorStrings.cs | 266 +++ FreeSql.DbContext/DbSet/DbSet.cs | 30 +- FreeSql.DbContext/DbSet/DbSetAsync.cs | 10 +- FreeSql.DbContext/DbSet/DbSetSync.cs | 20 +- .../EfCoreFluentApi/EfCoreTableFluent.cs | 48 +- .../EfCoreFluentApi/EfCoreTableFluent`1.cs | 40 +- .../Extensions/DependencyInjection.cs | 4 +- FreeSql.DbContext/FreeSql.DbContext.csproj | 22 - FreeSql.DbContext/FreeSql.DbContext.xml | 437 ++-- .../Properties/DbContextStrings.Designer.cs | 375 --- .../Properties/DbContextStrings.Designer.tt | 5 - .../Properties/DbContextStrings.resx | 246 -- .../Properties/DbContextStrings.zh-Hans.resx | 246 -- .../Repository/Repository/BaseRepository.cs | 6 +- FreeSql.DbContext/UnitOfWork/UnitOfWork.cs | 2 +- .../UnitOfWork/UnitOfWorkManager.cs | 6 +- FreeSql/DataAnnotations/TableAttribute.cs | 30 +- FreeSql/DataAnnotations/TableFluent.cs | 12 +- FreeSql/Extensions/AdoNetExtensions.cs | 28 +- .../FreeSqlGlobalExpressionCallExtensions.cs | 2 +- FreeSql/Extensions/FreeSqlGlobalExtensions.cs | 46 +- FreeSql/FreeSql.csproj | 18 - FreeSql/FreeSql.xml | 633 +++-- FreeSql/FreeSqlBuilder.cs | 16 +- FreeSql/Internal/CommonExpression.cs | 50 +- .../CommonProvider/AdoProvider/AdoProvider.cs | 2 +- .../AdoProvider/AdoProviderAsync.cs | 2 +- .../AdoProvider/AdoProviderTransaction.cs | 2 +- .../Internal/CommonProvider/BaseDbProvider.cs | 8 +- .../Internal/CommonProvider/DeleteProvider.cs | 4 +- .../CommonProvider/InsertOrUpdateProvider.cs | 16 +- .../Internal/CommonProvider/InsertProvider.cs | 24 +- .../CommonProvider/InsertProviderAsync.cs | 18 +- .../SelectProvider/Select0Provider.cs | 32 +- .../SelectProvider/Select0ProviderReader.cs | 16 +- .../SelectProvider/Select1Provider.cs | 40 +- .../SelectProvider/SelectGroupingProvider.cs | 2 +- .../Internal/CommonProvider/UpdateProvider.cs | 24 +- .../CommonProvider/UpdateProviderAsync.cs | 6 +- .../Internal/Exception/CoreErrorStrings.cs | 2027 +++++++++++++++++ FreeSql/Internal/UtilsExpressionTree.cs | 66 +- FreeSql/Properties/CoreStrings.Designer.cs | 1243 ---------- FreeSql/Properties/CoreStrings.Designer.tt | 5 - FreeSql/Properties/CoreStrings.resx | 603 ----- FreeSql/Properties/CoreStrings.zh-Hans.resx | 638 ------ FreeSql/Properties/Resources.tt | 281 --- .../ClickHouseAdo/ClickHouseAdo.cs | 8 +- .../ClickHouseAdo/ClickHouseConnectionPool.cs | 10 +- .../ClickHouseCodeFirst.cs | 4 +- .../ClickHouseExpression.cs | 2 +- .../Curd/ClickHouseDelete.cs | 4 +- .../Curd/ClickHouseUpdate.cs | 4 +- .../Curd/CustomDelete.cs | 4 +- .../Curd/CustomInsert.cs | 4 +- .../Curd/CustomSelect.cs | 2 +- .../Curd/CustomUpdate.cs | 4 +- .../CustomAdo/CustomAdo.cs | 4 +- .../CustomCodeFirst.cs | 2 +- .../FreeSql.Provider.Custom/CustomProvider.cs | 4 +- .../MySql/Curd/CustomMySqlInsertOrUpdate.cs | 2 +- .../Curd/CustomMySqlOnDuplicateKeyUpdate.cs | 2 +- .../MySql/CustomMySqlAdo/CustomMySqlAdo.cs | 2 +- .../MySql/CustomMySqlCodeFirst.cs | 4 +- .../MySql/CustomMySqlExpression.cs | 2 +- .../Oracle/Curd/CustomOracleDelete.cs | 4 +- .../Oracle/Curd/CustomOracleInsertOrUpdate.cs | 2 +- .../Oracle/Curd/CustomOracleUpdate.cs | 4 +- .../Oracle/CustomOracleAdo/CustomOracleAdo.cs | 2 +- .../Oracle/CustomOracleCodeFirst.cs | 6 +- .../Oracle/CustomOracleDbFirst.cs | 2 +- .../Oracle/CustomOracleExpression.cs | 2 +- .../CustomPostgreSQLOnConflictDoUpdate.cs | 4 +- .../CustomPostgreSQLAdo.cs | 2 +- .../PostgreSQL/CustomPostgreSQLCodeFirst.cs | 4 +- .../PostgreSQL/CustomPostgreSQLExpression.cs | 2 +- .../SqlServer/Curd/CustomSqlServerDelete.cs | 4 +- .../SqlServer/Curd/CustomSqlServerInsert.cs | 8 +- .../Curd/CustomSqlServerInsertOrUpdate.cs | 2 +- .../SqlServer/Curd/CustomSqlServerUpdate.cs | 4 +- .../CustomSqlServerAdo/CustomSqlServerAdo.cs | 2 +- .../SqlServer/CustomSqlServerCodeFirst.cs | 4 +- .../SqlServer/CustomSqlServerExpression.cs | 2 +- .../Curd/DamengDelete.cs | 4 +- .../Curd/DamengInsertOrUpdate.cs | 2 +- .../Curd/DamengUpdate.cs | 4 +- .../DamengAdo/DamengAdo.cs | 8 +- .../DamengAdo/DamengConnectionPool.cs | 10 +- .../DamengCodeFirst.cs | 6 +- .../FreeSql.Provider.Dameng/DamengDbFirst.cs | 2 +- .../DamengExpression.cs | 2 +- .../DamengExtensions.cs | 4 +- .../Curd/DuckdbDelete.cs | 4 +- .../Curd/DuckdbUpdate.cs | 4 +- .../Curd/OnConflictDoUpdate.cs | 4 +- .../DuckdbAdo/DuckdbAdo.cs | 8 +- .../DuckdbAdo/DuckdbConnectionPool.cs | 6 +- .../DuckdbCodeFirst.cs | 4 +- .../DuckdbExpression.cs | 2 +- .../Curd/FirebirdInsertOrUpdate.cs | 2 +- .../FirebirdAdo/FirebirdAdo.cs | 8 +- .../FirebirdAdo/FirebirdConnectionPool.cs | 6 +- .../FirebirdCodeFirst.cs | 4 +- .../FirebirdExpression.cs | 2 +- .../Curd/GBaseDelete.cs | 4 +- .../Curd/GBaseInsert.cs | 2 +- .../Curd/GBaseInsertOrUpdate.cs | 2 +- .../Curd/GBaseUpdate.cs | 4 +- .../GBaseAdo/GBaseAdo.cs | 8 +- .../GBaseAdo/GBaseConnectionPool.cs | 10 +- .../FreeSql.Provider.GBase/GBaseCodeFirst.cs | 4 +- .../FreeSql.Provider.GBase/GBaseExpression.cs | 2 +- .../Curd/KingbaseESOnConflictDoUpdate.cs | 4 +- .../KingbaseESAdo/KingbaseESAdo.cs | 8 +- .../KingbaseESAdo/KingbaseESConnectionPool.cs | 10 +- .../KingbaseESCodeFirst.cs | 4 +- .../KingbaseESExpression.cs | 2 +- .../KingbaseESExtensions.cs | 4 +- .../Curd/MsAccessDelete.cs | 4 +- .../Curd/MsAccessInsert.cs | 2 +- .../Curd/MsAccessSelect.cs | 2 +- .../Curd/MsAccessUpdate.cs | 6 +- .../MsAccessAdo/MsAccessAdo.cs | 8 +- .../MsAccessAdo/MsAccessConnectionPool.cs | 6 +- .../MsAccessCodeFirst.cs | 6 +- .../MsAccessExpression.cs | 2 +- .../MsAccessProvider.cs | 2 +- .../Curd/MySqlInsertOrUpdate.cs | 2 +- .../Curd/OnDuplicateKeyUpdate.cs | 2 +- .../MySqlAdo/MySqlAdo.cs | 8 +- .../MySqlAdo/MySqlConnectionPool.cs | 10 +- .../MySqlAdo/MygisTypes.cs | 2 +- .../FreeSql.Provider.MySql/MySqlCodeFirst.cs | 4 +- .../FreeSql.Provider.MySql/MySqlExpression.cs | 2 +- .../FreeSql.Provider.MySql/MySqlExtensions.cs | 2 +- .../FreeSqlMySqlConnectorGlobalExtensions.cs | 8 +- .../Default/Curd/OdbcDelete.cs | 4 +- .../Default/Curd/OdbcInsert.cs | 4 +- .../Default/Curd/OdbcSelect.cs | 2 +- .../Default/Curd/OdbcUpdate.cs | 4 +- .../Default/OdbcAdo/OdbcAdo.cs | 8 +- .../Default/OdbcAdo/OdbcConnectionPool.cs | 10 +- .../Default/OdbcCodeFirst.cs | 2 +- .../Default/OdbcProvider.cs | 2 +- .../MySql/Curd/OdbcMySqlInsertOrUpdate.cs | 2 +- .../Curd/OdbcMySqlOnDuplicateKeyUpdate.cs | 2 +- .../MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs | 8 +- .../OdbcMySqlAdo/OdbcMySqlConnectionPool.cs | 10 +- .../MySql/OdbcMySqlCodeFirst.cs | 4 +- .../MySql/OdbcMySqlExpression.cs | 2 +- .../Oracle/Curd/OdbcOracleDelete.cs | 4 +- .../Oracle/Curd/OdbcOracleInsertOrUpdate.cs | 2 +- .../Oracle/Curd/OdbcOracleUpdate.cs | 4 +- .../Oracle/OdbcOracleAdo/OdbcOracleAdo.cs | 8 +- .../OdbcOracleAdo/OdbcOracleConnectionPool.cs | 10 +- .../Oracle/OdbcOracleCodeFirst.cs | 6 +- .../Oracle/OdbcOracleDbFirst.cs | 2 +- .../Oracle/OdbcOracleExpression.cs | 2 +- .../Curd/OdbcPostgreSQLOnConflictDoUpdate.cs | 4 +- .../OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs | 8 +- .../OdbcPostgreSQLConnectionPool.cs | 10 +- .../PostgreSQL/OdbcPostgreSQLCodeFirst.cs | 4 +- .../PostgreSQL/OdbcPostgreSQLExpression.cs | 2 +- .../SqlServer/Curd/OdbcSqlServerDelete.cs | 4 +- .../SqlServer/Curd/OdbcSqlServerInsert.cs | 8 +- .../Curd/OdbcSqlServerInsertOrUpdate.cs | 2 +- .../SqlServer/Curd/OdbcSqlServerUpdate.cs | 4 +- .../OdbcSqlServerAdo/OdbcSqlServerAdo.cs | 8 +- .../OdbcSqlServerConnectionPool.cs | 10 +- .../SqlServer/OdbcSqlServerCodeFirst.cs | 4 +- .../SqlServer/OdbcSqlServerExpression.cs | 2 +- .../Curd/OracleDelete.cs | 4 +- .../Curd/OracleInsertOrUpdate.cs | 2 +- .../Curd/OracleUpdate.cs | 4 +- .../OracleAdo/OracleAdo.cs | 8 +- .../OracleAdo/OracleConnectionPool.cs | 10 +- .../OracleCodeFirst.cs | 6 +- .../FreeSql.Provider.Oracle/OracleDbFirst.cs | 4 +- .../OracleExpression.cs | 2 +- .../OracleExtensions.cs | 4 +- .../Curd/OnConflictDoUpdate.cs | 4 +- .../PostgreSQLAdo/PostgreSQLAdo.cs | 8 +- .../PostgreSQLAdo/PostgreSQLConnectionPool.cs | 10 +- .../PostgreSQLCodeFirst.cs | 4 +- .../PostgreSQLExpression.cs | 2 +- .../PostgreSQLExtensions.cs | 8 +- .../Curd/OnConflictDoUpdate.cs | 4 +- .../QuestDbAdo/QuestDbAdo.cs | 8 +- .../QuestDbAdo/QuestDbConnectionPool.cs | 10 +- .../QuestDbCodeFirst.cs | 4 +- .../QuestDbExpression.cs | 2 +- .../Curd/ShenTongInsertOrUpdate.cs | 2 +- .../ShenTongAdo/ShenTongAdo.cs | 8 +- .../ShenTongAdo/ShenTongConnectionPool.cs | 10 +- .../ShenTongCodeFirst.cs | 4 +- .../ShenTongExpression.cs | 2 +- .../Curd/SqlServerDelete.cs | 4 +- .../Curd/SqlServerInsert.cs | 8 +- .../Curd/SqlServerInsertOrUpdate.cs | 2 +- .../Curd/SqlServerUpdate.cs | 4 +- .../SqlServerAdo/SqlServerAdo.cs | 8 +- .../SqlServerAdo/SqlServerConnectionPool.cs | 10 +- .../SqlServerCodeFirst.cs | 4 +- .../SqlServerExpression.cs | 2 +- .../SqlServerExtensions.cs | 8 +- .../Curd/SqliteDelete.cs | 4 +- .../Curd/SqliteInsertOrUpdate.cs | 4 +- .../Curd/SqliteUpdate.cs | 4 +- .../SqliteAdo/SqliteAdo.cs | 8 +- .../SqliteAdo/SqliteConnectionPool.cs | 6 +- .../SqliteCodeFirst.cs | 4 +- .../FreeSql.Provider.Sqlite/SqliteDbFirst.cs | 2 +- .../SqliteExpression.cs | 2 +- .../Curd/XuguInsertOrUpdate.cs | 2 +- .../FreeSql.Provider.Xugu/XuguAdo/XuguAdo.cs | 8 +- .../XuguAdo/XuguConnectionPool.cs | 10 +- .../FreeSql.Provider.Xugu/XuguCodeFirst.cs | 4 +- .../FreeSql.Provider.Xugu/XuguExpression.cs | 2 +- 228 files changed, 3538 insertions(+), 4961 deletions(-) create mode 100644 FreeSql.DbContext/DbContext/DbContextErrorStrings.cs delete mode 100644 FreeSql.DbContext/Properties/DbContextStrings.Designer.cs delete mode 100644 FreeSql.DbContext/Properties/DbContextStrings.Designer.tt delete mode 100644 FreeSql.DbContext/Properties/DbContextStrings.resx delete mode 100644 FreeSql.DbContext/Properties/DbContextStrings.zh-Hans.resx create mode 100644 FreeSql/Internal/Exception/CoreErrorStrings.cs delete mode 100644 FreeSql/Properties/CoreStrings.Designer.cs delete mode 100644 FreeSql/Properties/CoreStrings.Designer.tt delete mode 100644 FreeSql/Properties/CoreStrings.resx delete mode 100644 FreeSql/Properties/CoreStrings.zh-Hans.resx delete mode 100644 FreeSql/Properties/Resources.tt diff --git a/Extensions/FreeSql.Extensions.AggregateRoot/AggregateRootRepository/AggregateRootRepository.cs b/Extensions/FreeSql.Extensions.AggregateRoot/AggregateRootRepository/AggregateRootRepository.cs index 207bb3d9c..9ec4a032e 100644 --- a/Extensions/FreeSql.Extensions.AggregateRoot/AggregateRootRepository/AggregateRootRepository.cs +++ b/Extensions/FreeSql.Extensions.AggregateRoot/AggregateRootRepository/AggregateRootRepository.cs @@ -94,9 +94,9 @@ namespace FreeSql { if (newdata == null) return null; var _table = Orm.CodeFirst.GetTableByEntity(EntityType); - if (_table.Primarys.Any() == false) throw new Exception(DbContextStrings.Incomparable_EntityHasNo_PrimaryKey(Orm.GetEntityString(EntityType, newdata))); + if (_table.Primarys.Any() == false) throw new Exception(DbContextErrorStrings.Incomparable_EntityHasNo_PrimaryKey(Orm.GetEntityString(EntityType, newdata))); var key = Orm.GetEntityKeyString(EntityType, newdata, false); - if (string.IsNullOrEmpty(key)) throw new Exception(DbContextStrings.Incomparable_PrimaryKey_NotSet(Orm.GetEntityString(EntityType, newdata))); + if (string.IsNullOrEmpty(key)) throw new Exception(DbContextErrorStrings.Incomparable_PrimaryKey_NotSet(Orm.GetEntityString(EntityType, newdata))); if (_states.TryGetValue(key, out var oldState) == false || oldState == null) throw new Exception($"不可对比,数据未被跟踪:{Orm.GetEntityString(EntityType, newdata)}"); AggregateRootTrackingChangeInfo tracking = new AggregateRootTrackingChangeInfo(); AggregateRootUtils.CompareEntityValue(_boundaryName, Orm, EntityType, oldState, newdata, null, tracking); diff --git a/Extensions/FreeSql.Extensions.AggregateRoot/AggregateRootRepository/AggregateRootRepositoryAsync.cs b/Extensions/FreeSql.Extensions.AggregateRoot/AggregateRootRepository/AggregateRootRepositoryAsync.cs index 06eb16baa..b84d2548f 100644 --- a/Extensions/FreeSql.Extensions.AggregateRoot/AggregateRootRepository/AggregateRootRepositoryAsync.cs +++ b/Extensions/FreeSql.Extensions.AggregateRoot/AggregateRootRepository/AggregateRootRepositoryAsync.cs @@ -154,7 +154,7 @@ namespace FreeSql var stateKey = Orm.GetEntityKeyString(EntityType, entity, false); if (entity == null) throw new ArgumentNullException(nameof(entity)); var table = Orm.CodeFirst.GetTableByEntity(EntityType); - if (table.Primarys.Any() == false) throw new Exception(DbContextStrings.CannotAdd_EntityHasNo_PrimaryKey(Orm.GetEntityString(EntityType, entity))); + if (table.Primarys.Any() == false) throw new Exception(DbContextErrorStrings.CannotAdd_EntityHasNo_PrimaryKey(Orm.GetEntityString(EntityType, entity))); var flagExists = ExistsInStates(entity); if (flagExists == false) diff --git a/Extensions/FreeSql.Extensions.AggregateRoot/AggregateRootRepository/AggregateRootRepositorySync.cs b/Extensions/FreeSql.Extensions.AggregateRoot/AggregateRootRepository/AggregateRootRepositorySync.cs index cc864d1ff..0f3584403 100644 --- a/Extensions/FreeSql.Extensions.AggregateRoot/AggregateRootRepository/AggregateRootRepositorySync.cs +++ b/Extensions/FreeSql.Extensions.AggregateRoot/AggregateRootRepository/AggregateRootRepositorySync.cs @@ -32,7 +32,7 @@ namespace FreeSql { if (data == null) return; var table = Orm.CodeFirst.GetTableByEntity(EntityType); - if (table.Primarys.Any() == false) throw new Exception(DbContextStrings.CannotEdit_EntityHasNo_PrimaryKey(Orm.GetEntityString(EntityType, data.First()))); + if (table.Primarys.Any() == false) throw new Exception(DbContextErrorStrings.CannotEdit_EntityHasNo_PrimaryKey(Orm.GetEntityString(EntityType, data.First()))); _statesEditing.Clear(); _dataEditing = data; foreach (var item in data) @@ -216,7 +216,7 @@ namespace FreeSql var stateKey = Orm.GetEntityKeyString(EntityType, entity, false); if (entity == null) throw new ArgumentNullException(nameof(entity)); var table = Orm.CodeFirst.GetTableByEntity(EntityType); - if (table.Primarys.Any() == false) throw new Exception(DbContextStrings.CannotAdd_EntityHasNo_PrimaryKey(Orm.GetEntityString(EntityType, entity))); + if (table.Primarys.Any() == false) throw new Exception(DbContextErrorStrings.CannotAdd_EntityHasNo_PrimaryKey(Orm.GetEntityString(EntityType, entity))); var flagExists = ExistsInStates(entity); if (flagExists == false) diff --git a/Extensions/FreeSql.Extensions.AggregateRoot/AggregateRootRepository/AggregateRootUtils.cs b/Extensions/FreeSql.Extensions.AggregateRoot/AggregateRootRepository/AggregateRootUtils.cs index a79f9af51..54a35455c 100644 --- a/Extensions/FreeSql.Extensions.AggregateRoot/AggregateRootRepository/AggregateRootUtils.cs +++ b/Extensions/FreeSql.Extensions.AggregateRoot/AggregateRootRepository/AggregateRootUtils.cs @@ -499,7 +499,7 @@ namespace FreeSql void LocalInclude(TableRef tbref, Expression exp) { var incMethod = queryExp.Type.GetMethod("Include"); - if (incMethod == null) throw new Exception(CoreStrings.RunTimeError_Reflection_IncludeMany.Replace("IncludeMany", "Include")); + if (incMethod == null) throw new Exception(CoreErrorStrings.RunTimeError_Reflection_IncludeMany.Replace("IncludeMany", "Include")); queryExp = Expression.Call(queryExp, incMethod.MakeGenericMethod(tbref.RefEntityType), Expression.Lambda(typeof(Func<,>).MakeGenericType(entityType, tbref.RefEntityType), exp, navigateParameterExp)); } @@ -508,7 +508,7 @@ namespace FreeSql var funcType = typeof(Func<,>).MakeGenericType(entityType, typeof(IEnumerable<>).MakeGenericType(tbref.RefEntityType)); var navigateSelector = Expression.Lambda(funcType, exp, navigateParameterExp); var incMethod = queryExp.Type.GetMethod("IncludeMany"); - if (incMethod == null) throw new Exception(CoreStrings.RunTimeError_Reflection_IncludeMany); + if (incMethod == null) throw new Exception(CoreErrorStrings.RunTimeError_Reflection_IncludeMany); LambdaExpression navigateThen = null; var navigateThenType = typeof(Action<>).MakeGenericType(typeof(ISelect<>).MakeGenericType(tbref.RefEntityType)); var thenParameter = Expression.Parameter(typeof(ISelect<>).MakeGenericType(tbref.RefEntityType), "then"); diff --git a/Extensions/FreeSql.Extensions.BaseEntity/BaseEntityReadOnly.cs b/Extensions/FreeSql.Extensions.BaseEntity/BaseEntityReadOnly.cs index d9ac6b96a..f66c1508b 100644 --- a/Extensions/FreeSql.Extensions.BaseEntity/BaseEntityReadOnly.cs +++ b/Extensions/FreeSql.Extensions.BaseEntity/BaseEntityReadOnly.cs @@ -24,7 +24,7 @@ namespace FreeSql static Func _resoleOrm; internal static Func _resolveUow; - public static IFreeSql Orm => _resoleOrm?.Invoke() ?? throw new Exception(CoreStrings.S_BaseEntity_Initialization_Error); + public static IFreeSql Orm => _resoleOrm?.Invoke() ?? throw new Exception(CoreErrorStrings.S_BaseEntity_Initialization_Error); public static void Initialization(IFreeSql fsql, Func resolveUow) => Initialization(() => fsql, resolveUow); public static void Initialization(Func resoleOrm, Func resolveUow) diff --git a/Extensions/FreeSql.Extensions.Linq/FreeSqlExtensionsLinq.cs b/Extensions/FreeSql.Extensions.Linq/FreeSqlExtensionsLinq.cs index b45a05381..1f3e499ad 100644 --- a/Extensions/FreeSql.Extensions.Linq/FreeSqlExtensionsLinq.cs +++ b/Extensions/FreeSql.Extensions.Linq/FreeSqlExtensionsLinq.cs @@ -33,7 +33,7 @@ public static class FreeSqlExtensionsLinqSql /// public static ISelect RestoreToSelect(this IQueryable that) where T1 : class { - var queryable = that as QueryableProvider ?? throw new Exception(CoreStrings.S_CannotBeConverted_To_ISelect(typeof(T1).Name)); + var queryable = that as QueryableProvider ?? throw new Exception(CoreErrorStrings.S_CannotBeConverted_To_ISelect(typeof(T1).Name)); return queryable._select; } diff --git a/Extensions/FreeSql.Extensions.Linq/QueryableProvider.cs b/Extensions/FreeSql.Extensions.Linq/QueryableProvider.cs index 12e0131ce..11b2226f9 100644 --- a/Extensions/FreeSql.Extensions.Linq/QueryableProvider.cs +++ b/Extensions/FreeSql.Extensions.Linq/QueryableProvider.cs @@ -121,7 +121,7 @@ namespace FreeSql.Extensions.Linq case "Average": return tplMaxMinAvgSum("Avg"); case "Concat": - return throwCallExp(CoreStrings.Not_Support); + return throwCallExp(CoreErrorStrings.Not_Support); case "Contains": if (callExp.Arguments.Count == 2) { @@ -141,7 +141,7 @@ namespace FreeSql.Extensions.Linq _select.Distinct(); break; } - return throwCallExp(CoreStrings.Not_Support); + return throwCallExp(CoreErrorStrings.Not_Support); case "ElementAt": case "ElementAtOrDefault": @@ -178,7 +178,7 @@ namespace FreeSql.Extensions.Linq _select.InternalWhere(whereParam); break; } - return throwCallExp(CoreStrings.Not_Support); + return throwCallExp(CoreErrorStrings.Not_Support); case "Skip": _select.Offset((int)callExp.Arguments[1].GetConstExprValue()); @@ -190,7 +190,7 @@ namespace FreeSql.Extensions.Linq case "ToList": if (callExp.Arguments.Count == 1) return _select.ToList(); - return throwCallExp(CoreStrings.Not_Support); + return throwCallExp(CoreErrorStrings.Not_Support); case "Select": var selectParam = (callExp.Arguments[1] as UnaryExpression)?.Operand as LambdaExpression; @@ -199,7 +199,7 @@ namespace FreeSql.Extensions.Linq _select._selectExpression = selectParam; break; } - return throwCallExp(CoreStrings.Not_Support); + return throwCallExp(CoreErrorStrings.Not_Support); case "Join": if (callExp.Arguments.Count == 5) @@ -241,13 +241,13 @@ namespace FreeSql.Extensions.Linq case "Last": case "LastOrDefault": - return throwCallExp(CoreStrings.Not_Support); + return throwCallExp(CoreErrorStrings.Not_Support); case "GroupBy": - return throwCallExp(CoreStrings.Not_Support); + return throwCallExp(CoreErrorStrings.Not_Support); default: - return throwCallExp(CoreStrings.Not_Support); + return throwCallExp(CoreErrorStrings.Not_Support); } } if (tresult == null) return null; diff --git a/Extensions/FreeSql.Extensions.ZeroEntity/ZeroDbContext.SelectImpl.cs b/Extensions/FreeSql.Extensions.ZeroEntity/ZeroDbContext.SelectImpl.cs index aee96eb7a..f1d8cda75 100644 --- a/Extensions/FreeSql.Extensions.ZeroEntity/ZeroDbContext.SelectImpl.cs +++ b/Extensions/FreeSql.Extensions.ZeroEntity/ZeroDbContext.SelectImpl.cs @@ -571,7 +571,7 @@ namespace FreeSql.Extensions.ZeroEntity var ta = _tableAlias.Where(a => string.Join(".", a.NavPath) == navPath).FirstOrDefault(); if (ta?.Table.ColumnsByCs.TryGetValue(field.Last(), out var col) == true) return NativeTuple.Create($"{ta.Alias}.{_common.QuoteSqlName(col.Attribute.Name)}", col); - throw new Exception(CoreStrings.Cannot_Match_Property(property)); + throw new Exception(CoreErrorStrings.Cannot_Match_Property(property)); } /// diff --git a/Extensions/FreeSql.Extensions.ZeroEntity/ZeroDbContext.cs b/Extensions/FreeSql.Extensions.ZeroEntity/ZeroDbContext.cs index 2731ed830..2a1343751 100644 --- a/Extensions/FreeSql.Extensions.ZeroEntity/ZeroDbContext.cs +++ b/Extensions/FreeSql.Extensions.ZeroEntity/ZeroDbContext.cs @@ -295,12 +295,12 @@ ManyToMany 级联删除中间表(注意不删除外部根) _orm.Aop.TraceBeforeHandler?.Invoke(this, transBefore); handler?.Invoke(); _transaction.Commit(); - _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.Commit, null)); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.Commit, null)); } catch (Exception ex) { _transaction.Rollback(); - _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.RollBack, ex)); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.RollBack, ex)); throw; } finally diff --git a/Extensions/FreeSql.Generator/ConsoleApp.cs b/Extensions/FreeSql.Generator/ConsoleApp.cs index 0588094b2..a0590ae18 100644 --- a/Extensions/FreeSql.Generator/ConsoleApp.cs +++ b/Extensions/FreeSql.Generator/ConsoleApp.cs @@ -163,7 +163,7 @@ new Colorful.Formatter("推荐在实体类目录创建 gen.bat,双击它重新 case "-nameoptions": ArgsNameOptions = args[a + 1].Split(',').Select(opt => opt == "1").ToArray(); - if (ArgsNameOptions.Length != 4) throw new ArgumentException(CoreStrings.S_NameOptions_Incorrect); + if (ArgsNameOptions.Length != 4) throw new ArgumentException(CoreErrorStrings.S_NameOptions_Incorrect); a++; break; case "-namespace": @@ -172,7 +172,7 @@ new Colorful.Formatter("推荐在实体类目录创建 gen.bat,双击它重新 break; case "-db": var dbargs = args[a + 1].Split(',', 2); - if (dbargs.Length != 2) throw new ArgumentException(CoreStrings.S_DB_ParameterError); + if (dbargs.Length != 2) throw new ArgumentException(CoreErrorStrings.S_DB_ParameterError); switch (dbargs[0].Trim().ToLower()) { @@ -186,7 +186,7 @@ new Colorful.Formatter("推荐在实体类目录创建 gen.bat,双击它重新 case "kingbasees": ArgsDbType = DataType.KingbaseES; break; case "shentong": ArgsDbType = DataType.ShenTong; break; case "clickhouse": ArgsDbType = DataType.ClickHouse; break; - default: throw new ArgumentException(CoreStrings.S_DB_ParameterError_UnsupportedType(dbargs[0])); + default: throw new ArgumentException(CoreErrorStrings.S_DB_ParameterError_UnsupportedType(dbargs[0])); } ArgsConnectionString = dbargs[1].Trim(); a++; @@ -225,11 +225,11 @@ new Colorful.Formatter("推荐在实体类目录创建 gen.bat,双击它重新 a++; break; default: - throw new ArgumentException(CoreStrings.S_WrongParameter(args[a])); + throw new ArgumentException(CoreErrorStrings.S_WrongParameter(args[a])); } } - if (string.IsNullOrEmpty(ArgsConnectionString)) throw new ArgumentException(CoreStrings.S_DB_Parameter_Error_NoConnectionString); + if (string.IsNullOrEmpty(ArgsConnectionString)) throw new ArgumentException(CoreErrorStrings.S_DB_Parameter_Error_NoConnectionString); RazorEngine.Engine.Razor = RazorEngineService.Create(new RazorEngine.Configuration.TemplateServiceConfiguration { diff --git a/FreeSql.DbContext/DbContext/DbContext.cs b/FreeSql.DbContext/DbContext/DbContext.cs index adeccc301..19b39bd38 100644 --- a/FreeSql.DbContext/DbContext/DbContext.cs +++ b/FreeSql.DbContext/DbContext/DbContext.cs @@ -12,12 +12,12 @@ namespace FreeSql public abstract partial class DbContext : IDisposable { internal DbContextScopedFreeSql _ormScoped; - internal IFreeSql OrmOriginal => _ormScoped?._originalFsql ?? throw new ArgumentNullException(DbContextStrings.ConfigureUseFreeSql); + internal IFreeSql OrmOriginal => _ormScoped?._originalFsql ?? throw new ArgumentNullException(DbContextErrorStrings.ConfigureUseFreeSql); /// /// 该对象 Select/Delete/Insert/Update/InsertOrUpdate 与 DbContext 事务保持一致,可省略传递 WithTransaction /// - public IFreeSql Orm => _ormScoped ?? throw new ArgumentNullException(DbContextStrings.ConfigureUseFreeSql); + public IFreeSql Orm => _ormScoped ?? throw new ArgumentNullException(DbContextErrorStrings.ConfigureUseFreeSql); #region Property UnitOfWork internal bool _isUseUnitOfWork = true; //是否创建工作单元事务 @@ -135,7 +135,7 @@ namespace FreeSql void CheckEntityTypeOrThrow(Type entityType) { if (OrmOriginal.CodeFirst.GetTableByEntity(entityType) == null) - throw new ArgumentException(DbContextStrings.ParameterDataTypeError(entityType.FullName)); + throw new ArgumentException(DbContextErrorStrings.ParameterDataTypeError(entityType.FullName)); } /// /// 添加 diff --git a/FreeSql.DbContext/DbContext/DbContextErrorStrings.cs b/FreeSql.DbContext/DbContext/DbContextErrorStrings.cs new file mode 100644 index 000000000..e989c07c6 --- /dev/null +++ b/FreeSql.DbContext/DbContext/DbContextErrorStrings.cs @@ -0,0 +1,266 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FreeSql +{ + public static class DbContextErrorStrings + { + public static string Language = "en"; + /// + /// AddFreeDbContext 发生错误,请检查 {dbContextTypeName} 的构造参数都已正确注入 + /// + public static string AddFreeDbContextError_CheckConstruction(object dbContextTypeName) => string.Format(Language == "cn" ? + @"AddFreeDbContext 发生错误,请检查 {0} 的构造参数都已正确注入" : + @"FreeSql: An error occurred in AddFreeDbContext, check that the construction parameters of {0} have been injected correctly", dbContextTypeName); + /// + /// 不可添加,已存在于状态管理:{entityString} + /// + public static string CannotAdd_AlreadyExistsInStateManagement(object entityString) => string.Format(Language == "cn" ? + @"不可添加,已存在于状态管理:{0}" : + @"FreeSql: Not addable, already exists in state management: {0}", entityString); + /// + /// 不可添加,实体没有主键:{entityString} + /// + public static string CannotAdd_EntityHasNo_PrimaryKey(object entityString) => string.Format(Language == "cn" ? + @"不可添加,实体没有主键:{0}" : + @"FreeSql: Not addable, entity has no primary key: {0}", entityString); + /// + /// 不可添加,未设置主键的值:{entityString} + /// + public static string CannotAdd_PrimaryKey_NotSet(object entityString) => string.Format(Language == "cn" ? + @"不可添加,未设置主键的值:{0}" : + @"FreeSql: Not addable, no value for primary key set: {0}", entityString); + /// + /// 不可添加,自增属性有值:{entityString} + /// + public static string CannotAdd_SelfIncreasingHasValue(object entityString) => string.Format(Language == "cn" ? + @"不可添加,自增属性有值:{0}" : + @"FreeSql: Not addable, self-increasing attribute has value: {0}", entityString); + /// + /// 不可附加,实体没有主键:{entityString} + /// + public static string CannotAttach_EntityHasNo_PrimaryKey(object entityString) => string.Format(Language == "cn" ? + @"不可附加,实体没有主键:{0}" : + @"FreeSql: Not attachable, entity has no primary key: {0}", entityString); + /// + /// 不可附加,未设置主键的值:{entityString} + /// + public static string CannotAttach_PrimaryKey_NotSet(object entityString) => string.Format(Language == "cn" ? + @"不可附加,未设置主键的值:{0}" : + @"FreeSql: Not attachable, no value for primary key set: {0}", entityString); + /// + /// 不可删除,数据未被跟踪,应该先查询:{entityString} + /// + public static string CannotDelete_DataNotTracked_ShouldQuery(object entityString) => string.Format(Language == "cn" ? + @"不可删除,数据未被跟踪,应该先查询:{0}" : + @"FreeSql: Not deletable, data not tracked, should query first: {0}", entityString); + /// + /// 不可删除,实体没有主键:{entityString} + /// + public static string CannotDelete_EntityHasNo_PrimaryKey(object entityString) => string.Format(Language == "cn" ? + @"不可删除,实体没有主键:{0}" : + @"FreeSql: Not deletable, entity has no primary key: {0}", entityString); + /// + /// 不可删除,未设置主键的值:{entityString} + /// + public static string CannotDelete_PrimaryKey_NotSet(object entityString) => string.Format(Language == "cn" ? + @"不可删除,未设置主键的值:{0}" : + @"FreeSql: Not deletable, no value for primary key set: {0}", entityString); + /// + /// 不可进行编辑,实体没有主键:{entityString} + /// + public static string CannotEdit_EntityHasNo_PrimaryKey(object entityString) => string.Format(Language == "cn" ? + @"不可进行编辑,实体没有主键:{0}" : + @"FreeSql: Not editable, entity has no primary key: {0}", entityString); + /// + /// 不可更新,数据未被跟踪,应该先查询 或者 Attach:{entityString} + /// + public static string CannotUpdate_DataShouldQueryOrAttach(object entityString) => string.Format(Language == "cn" ? + @"不可更新,数据未被跟踪,应该先查询 或者 Attach:{0}" : + @"FreeSql: Not updatable, data not tracked, should be queried first or Attach:{0}", entityString); + /// + /// 不可更新,实体没有主键:{entityString} + /// + public static string CannotUpdate_EntityHasNo_PrimaryKey(object entityString) => string.Format(Language == "cn" ? + @"不可更新,实体没有主键:{0}" : + @"FreeSql: Not updatable, entity has no primary key: {0}", entityString); + /// + /// 不可更新,未设置主键的值:{entityString} + /// + public static string CannotUpdate_PrimaryKey_NotSet(object entityString) => string.Format(Language == "cn" ? + @"不可更新,未设置主键的值:{0}" : + @"FreeSql: Not updatable, no value for primary key set: {0}", entityString); + /// + /// 不可更新,数据库不存在该记录:{entityString} + /// + public static string CannotUpdate_RecordDoesNotExist(object entityString) => string.Format(Language == "cn" ? + @"不可更新,数据库不存在该记录:{0}" : + @"FreeSql: Not updatable, the record does not exist in the database: {0}", entityString); + /// + /// 请在 OnConfiguring 或 AddFreeDbContext 中配置 UseFreeSql + /// + public static string ConfigureUseFreeSql => Language == "cn" ? + @"请在 OnConfiguring 或 AddFreeDbContext 中配置 UseFreeSql" : + @"FreeSql: Please configure UseFreeSql in OnConfiguring or AddFreeDbContext"; + /// + /// DbSet.AsType 参数错误,请传入正确的实体类型 + /// + public static string DbSetAsType_NotSupport_Object => Language == "cn" ? + @"DbSet.AsType 参数错误,请传入正确的实体类型" : + @"FreeSql: DbSet. AsType parameter error, please pass in the correct entity type"; + /// + /// 实体类型 {EntityTypeName} 无法转换为 {name},无法使用该方法 + /// + public static string EntityType_CannotConvert(object EntityTypeName, object name) => string.Format(Language == "cn" ? + @"实体类型 {0} 无法转换为 {1},无法使用该方法" : + @"FreeSql: Entity type {0} cannot be converted to {1} and cannot use this method", EntityTypeName, name); + /// + /// 实体类型 {EntityTypeName} 主键类型不为 {fullName},无法使用该方法 + /// + public static string EntityType_PrimaryKeyError(object EntityTypeName, object fullName) => string.Format(Language == "cn" ? + @"实体类型 {0} 主键类型不为 {1},无法使用该方法" : + @"FreeSql: Entity type {0} Primary key type is not {1} and cannot be used with this method", EntityTypeName, fullName); + /// + /// 实体类型 {EntityTypeName} 主键数量不为 1,无法使用该方法 + /// + public static string EntityType_PrimaryKeyIsNotOne(object EntityTypeName) => string.Format(Language == "cn" ? + @"实体类型 {0} 主键数量不为 1,无法使用该方法" : + @"FreeSql: Entity type {0} Primary key number is not 1 and cannot be used with this method", EntityTypeName); + /// + /// FreeSql.Repository 设置过滤器失败,原因是对象不属于 IRepository + /// + public static string FailedSetFilter_NotBelongIRpository => Language == "cn" ? + @"FreeSql.Repository 设置过滤器失败,原因是对象不属于 IRepository" : + @"FreeSql: FreeSql. Repository failed to set filter because object does not belong to IRepository"; + /// + /// 不可比较,实体没有主键:{entityString} + /// + public static string Incomparable_EntityHasNo_PrimaryKey(object entityString) => string.Format(Language == "cn" ? + @"不可比较,实体没有主键:{0}" : + @"FreeSql: Not comparable, entity has no primary key: {0}", entityString); + /// + /// 不可比较,未设置主键的值:{entityString} + /// + public static string Incomparable_PrimaryKey_NotSet(object entityString) => string.Format(Language == "cn" ? + @"不可比较,未设置主键的值:{0}" : + @"FreeSql: Non-comparable, no value for primary key set: {0}", entityString); + /// + /// FreeSql.Repository Insert 失败,因为设置了过滤器 {filterKey}: {filterValueExpression},插入的数据不符合 {entityString} + /// + public static string InsertError_Filter(object filterKey, object filterValueExpression, object entityString) => string.Format(Language == "cn" ? + @"FreeSql.Repository Insert 失败,因为设置了过滤器 {0}: {1},插入的数据不符合 {2}" : + @"FreeSql: FreeSql.Repository Insert failed because the filter {0}: {1} was set and the inserted data does not conform to {2}", filterKey, filterValueExpression, entityString); + /// + /// ISelect.AsType 参数不支持指定为 object + /// + public static string ISelectAsType_ParameterError => Language == "cn" ? + @"ISelect.AsType 参数不支持指定为 object" : + @"FreeSql: ISelect. AsType parameter does not support specifying as object"; + /// + /// {tableTypeFullName} 不存在属性 {propertyName} + /// + public static string NotFound_Property(object propertyName, object tableTypeFullName) => string.Format(Language == "cn" ? + @"{1} 不存在属性 {0}" : + @"FreeSql: Property {0} does not exist for {1}", propertyName, tableTypeFullName); + /// + /// 找不到方法 DbSet&lt;&gt;.StatesRemoveByObjects + /// + public static string NotFoundMethod_StatesRemoveByObjects => Language == "cn" ? + @"找不到方法 DbSet<>.StatesRemoveByObjects" : + @"FreeSql: Method DbSet<> not found. StatesRemoveByObjects"; + /// + /// 参数 data 类型错误 {entityTypeFullName} + /// + public static string ParameterDataTypeError(object entityTypeFullName) => string.Format(Language == "cn" ? + @"参数 data 类型错误 {0} " : + @"FreeSql: Parameter data type error {0}", entityTypeFullName); + /// + /// 参数错误 {param} + /// + public static string ParameterError(object param) => string.Format(Language == "cn" ? + @"参数错误 {0}" : + @"FreeSql: Parameter error {0}", param); + /// + /// 参数错误 {param} 不能为 null + /// + public static string ParameterError_CannotBeNull(object param) => string.Format(Language == "cn" ? + @"参数错误 {0} 不能为 null" : + @"FreeSql: Parameter error {0} cannot be null", param); + /// + /// 参数错误 {many} 不是集合属性 + /// + public static string ParameterError_IsNot_CollectionProperties(object many) => string.Format(Language == "cn" ? + @"参数错误 {0} 不是集合属性" : + @"FreeSql: Parameter error {0} is not a collection property", many); + /// + /// 参数错误 {many} 集合属性不存在 + /// + public static string ParameterError_NotFound_CollectionProperties(object many) => string.Format(Language == "cn" ? + @"参数错误 {0} 集合属性不存在" : + @"FreeSql: Parameter error {0} Collection property does not exist", many); + /// + /// 参数错误 {one} 属性不存在 + /// + public static string ParameterError_NotFound_Property(object one) => string.Format(Language == "cn" ? + @"参数错误 {0} 属性不存在" : + @"FreeSql: Parameter error {0} attribute does not exist", one); + /// + /// Propagation_Mandatory: 使用当前事务,如果没有当前事务,就抛出异常 + /// + public static string Propagation_Mandatory => Language == "cn" ? + @"Propagation_Mandatory: 使用当前事务,如果没有当前事务,就抛出异常" : + @"FreeSql: Propagation_ Mandatory: With the current transaction, throw an exception if there is no current transaction"; + /// + /// Propagation_Never: 以非事务方式执行操作,如果当前事务存在则抛出异常 + /// + public static string Propagation_Never => Language == "cn" ? + @"Propagation_Never: 以非事务方式执行操作,如果当前事务存在则抛出异常" : + @"FreeSql: Propagation_ Never: Perform the operation non-transactionally and throw an exception if the current transaction exists"; + /// + /// {tableTypeFullName} 类型的属性 {propertyName} 不是 OneToMany 或 ManyToMany 特性 + /// + public static string PropertyOfType_IsNot_OneToManyOrManyToMany(object propertyName, object tableTypeFullName) => string.Format(Language == "cn" ? + @"{1} 类型的属性 {0} 不是 OneToMany 或 ManyToMany 特性" : + @"FreeSql: Property {0} of type {1} is not OneToMany or ManyToMany attribute", propertyName, tableTypeFullName); + /// + /// 特别错误:批量添加失败,{dataType} 的返回数据,与添加的数目不匹配 + /// + public static string SpecialError_BatchAdditionFailed(object dataType) => string.Format(Language == "cn" ? + @"特别错误:批量添加失败,{0} 的返回数据,与添加的数目不匹配" : + @"FreeSql: Special error: Bulk add failed, {0} returned data, does not match the number added", dataType); + /// + /// 特别错误:更新失败,数据未被跟踪:{entityString} + /// + public static string SpecialError_UpdateFailedDataNotTracked(object entityString) => string.Format(Language == "cn" ? + @"特别错误:更新失败,数据未被跟踪:{0}" : + @"FreeSql: Special error: Update failed, data not tracked: {0}", entityString); + /// + /// 已开启事务,不能禁用工作单元 + /// + public static string TransactionHasBeenStarted => Language == "cn" ? + @"已开启事务,不能禁用工作单元" : + @"FreeSql: Transaction opened, unit of work cannot be disabled"; + /// + /// {tableTypeFullName} 类型已设置属性 {propertyName} 忽略特性 + /// + public static string TypeHasSetProperty_IgnoreAttribute(object tableTypeFullName, object propertyName) => string.Format(Language == "cn" ? + @"{0} 类型已设置属性 {1} 忽略特性" : + @"FreeSql: The {0} type has set the property {1} Ignore the attribute", tableTypeFullName, propertyName); + /// + /// {unitOfWorkManager} 构造参数 {fsql} 不能为 null + /// + public static string UnitOfWorkManager_Construction_CannotBeNull(object unitOfWorkManager, object fsql) => string.Format(Language == "cn" ? + @"{0} 构造参数 {1} 不能为 null" : + @"FreeSql: The {0} constructor parameter {1} cannot be null", unitOfWorkManager, fsql); + /// + /// FreeSql.Repository Update 失败,因为设置了过滤器 {filterKey}: {filterValueExpression},更新的数据不符合{entityString} + /// + public static string UpdateError_Filter(object filterKey, object filterValueExpression, object entityString) => string.Format(Language == "cn" ? + @"FreeSql.Repository Update 失败,因为设置了过滤器 {0}: {1},更新的数据不符合{2}" : + @"FreeSql: FreeSql.Repository Update failed because the filter {0}: {1} is set and the updated data does not conform to {2}", filterKey, filterValueExpression, entityString); + } + +} diff --git a/FreeSql.DbContext/DbSet/DbSet.cs b/FreeSql.DbContext/DbSet/DbSet.cs index ade54e245..b66df0505 100644 --- a/FreeSql.DbContext/DbSet/DbSet.cs +++ b/FreeSql.DbContext/DbSet/DbSet.cs @@ -162,10 +162,10 @@ namespace FreeSql /// public DbSet AsType(Type entityType) { - if (entityType == typeof(object)) throw new Exception(CoreStrings.TypeAsType_NotSupport_Object("DbSet")); + if (entityType == typeof(object)) throw new Exception(CoreErrorStrings.TypeAsType_NotSupport_Object("DbSet")); if (entityType == _entityType) return this; var newtb = _db.OrmOriginal.CodeFirst.GetTableByEntity(entityType); - _tablePriv = newtb ?? throw new Exception(CoreStrings.Type_AsType_Parameter_Error("DbSet")); + _tablePriv = newtb ?? throw new Exception(CoreErrorStrings.Type_AsType_Parameter_Error("DbSet")); _tableIdentitysPriv = null; _tableReturnColumnsPriv = null; _entityType = entityType; @@ -220,7 +220,7 @@ namespace FreeSql void AttachPriv(IEnumerable data, bool isAuditValue) { if (data == null || data.Any() == false) return; - if (_table.Primarys.Any() == false) throw new Exception(DbContextStrings.CannotAttach_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data.First()))); + if (_table.Primarys.Any() == false) throw new Exception(DbContextErrorStrings.CannotAttach_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data.First()))); foreach (var item in data) { if (isAuditValue) @@ -229,7 +229,7 @@ namespace FreeSql _db.Options.AuditValue?.Invoke(new DbContextAuditValueEventArgs(Aop.AuditValueType.Update, _table.Type, item)); } var key = _db.OrmOriginal.GetEntityKeyString(_entityType, item, false); - if (string.IsNullOrEmpty(key)) throw new Exception(DbContextStrings.CannotAttach_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, item))); + if (string.IsNullOrEmpty(key)) throw new Exception(DbContextErrorStrings.CannotAttach_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, item))); _states.AddOrUpdate(key, k => CreateEntityState(item), (k, ov) => { @@ -264,9 +264,9 @@ namespace FreeSql public Dictionary CompareState(TEntity newdata) { if (newdata == null) return null; - if (_table.Primarys.Any() == false) throw new Exception(DbContextStrings.Incomparable_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, newdata))); + if (_table.Primarys.Any() == false) throw new Exception(DbContextErrorStrings.Incomparable_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, newdata))); var key = _db.OrmOriginal.GetEntityKeyString(_entityType, newdata, false); - if (string.IsNullOrEmpty(key)) throw new Exception(DbContextStrings.Incomparable_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, newdata))); + if (string.IsNullOrEmpty(key)) throw new Exception(DbContextErrorStrings.Incomparable_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, newdata))); if (_states.TryGetValue(key, out var oldState) == false || oldState == null) return _table.ColumnsByCs.ToDictionary(a => a.Key, a => new object[] { @@ -326,7 +326,7 @@ namespace FreeSql } if (_table.Primarys.Any() == false) { - if (isThrow) throw new Exception(DbContextStrings.CannotAdd_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data))); + if (isThrow) throw new Exception(DbContextErrorStrings.CannotAdd_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data))); return false; } FreeSql.Internal.CommonProvider.InsertProvider.AuditDataValue(this, data, _db.OrmOriginal, _table, null); @@ -350,7 +350,7 @@ namespace FreeSql default: if (_tableIdentitys.Length == 1 && _table.Primarys.Length == 1) return true; - if (isThrow) throw new Exception(DbContextStrings.CannotAdd_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, data))); + if (isThrow) throw new Exception(DbContextErrorStrings.CannotAdd_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, data))); return false; } } @@ -359,14 +359,14 @@ namespace FreeSql //不可添加,已存在于状态管理 //if (_states.ContainsKey(key)) //{ - // if (isThrow) throw new Exception(DbContextStrings.CannotAdd_AlreadyExistsInStateManagement(_db.OrmOriginal.GetEntityString(_entityType, data))); + // if (isThrow) throw new Exception(DbContextErrorStrings.CannotAdd_AlreadyExistsInStateManagement(_db.OrmOriginal.GetEntityString(_entityType, data))); // return false; //} if (_db.OrmOriginal.Ado.DataType == DataType.ClickHouse) return true; var idval = _db.OrmOriginal.GetEntityIdentityValueWithPrimary(_entityType, data); if (idval > 0) { - if (isThrow) throw new Exception(DbContextStrings.CannotAdd_SelfIncreasingHasValue(_db.OrmOriginal.GetEntityString(_entityType, data))); + if (isThrow) throw new Exception(DbContextErrorStrings.CannotAdd_SelfIncreasingHasValue(_db.OrmOriginal.GetEntityString(_entityType, data))); return false; } } @@ -393,7 +393,7 @@ namespace FreeSql } if (_table.Primarys.Any() == false) { - if (isThrow) throw new Exception(DbContextStrings.CannotUpdate_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data))); + if (isThrow) throw new Exception(DbContextErrorStrings.CannotUpdate_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data))); return false; } FreeSql.Internal.CommonProvider.UpdateProvider.AuditDataValue(this, data, _db.OrmOriginal, _table, null); @@ -401,12 +401,12 @@ namespace FreeSql var key = _db.OrmOriginal.GetEntityKeyString(_entityType, data, false); if (string.IsNullOrEmpty(key)) { - if (isThrow) throw new Exception(DbContextStrings.CannotUpdate_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, data))); + if (isThrow) throw new Exception(DbContextErrorStrings.CannotUpdate_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, data))); return false; } if (_states.TryGetValue(key, out var tryval) == false) { - if (isThrow) throw new Exception(DbContextStrings.CannotUpdate_DataShouldQueryOrAttach(_db.OrmOriginal.GetEntityString(_entityType, data))); + if (isThrow) throw new Exception(DbContextErrorStrings.CannotUpdate_DataShouldQueryOrAttach(_db.OrmOriginal.GetEntityString(_entityType, data))); return false; } return true; @@ -432,13 +432,13 @@ namespace FreeSql } if (_table.Primarys.Any() == false) { - if (isThrow) throw new Exception(DbContextStrings.CannotDelete_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data))); + if (isThrow) throw new Exception(DbContextErrorStrings.CannotDelete_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data))); return false; } var key = _db.OrmOriginal.GetEntityKeyString(_entityType, data, false); if (string.IsNullOrEmpty(key)) { - if (isThrow) throw new Exception(DbContextStrings.CannotDelete_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, data))); + if (isThrow) throw new Exception(DbContextErrorStrings.CannotDelete_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, data))); return false; } //if (_states.TryGetValue(key, out var tryval) == false) { diff --git a/FreeSql.DbContext/DbSet/DbSetAsync.cs b/FreeSql.DbContext/DbSet/DbSetAsync.cs index 31231e5b1..361bd4473 100644 --- a/FreeSql.DbContext/DbSet/DbSetAsync.cs +++ b/FreeSql.DbContext/DbSet/DbSetAsync.cs @@ -119,7 +119,7 @@ namespace FreeSql case DataType.DuckDB: await DbContextFlushCommandAsync(cancellationToken); var rets = await this.OrmInsert(data).ExecuteInsertedAsync(cancellationToken); - if (rets.Count != data.Count()) throw new Exception(DbContextStrings.SpecialError_BatchAdditionFailed(_db.OrmOriginal.Ado.DataType)); + if (rets.Count != data.Count()) throw new Exception(DbContextErrorStrings.SpecialError_BatchAdditionFailed(_db.OrmOriginal.Ado.DataType)); _db._entityChangeReport.AddRange(rets.Select(a => new DbContext.EntityChangeReport.ChangeInfo { EntityType = _entityType, Object = a, Type = DbContext.EntityChangeType.Insert })); var idx = 0; foreach (var s in data) @@ -321,7 +321,7 @@ namespace FreeSql if (_states.TryGetValue(uplst1.Key, out var lstval1) == false) return -999; var lstval2 = default(EntityState); - if (uplst2 != null && _states.TryGetValue(uplst2.Key, out lstval2) == false) throw new Exception(DbContextStrings.SpecialError_UpdateFailedDataNotTracked(_db.OrmOriginal.GetEntityString(_entityType, uplst2.Value))); + if (uplst2 != null && _states.TryGetValue(uplst2.Key, out lstval2) == false) throw new Exception(DbContextErrorStrings.SpecialError_UpdateFailedDataNotTracked(_db.OrmOriginal.GetEntityString(_entityType, uplst2.Value))); var cuig1 = _db.OrmOriginal.CompareEntityValueReturnColumns(_entityType, uplst1.Value, lstval1.Value, true); var cuig2 = uplst2 != null ? _db.OrmOriginal.CompareEntityValueReturnColumns(_entityType, uplst2.Value, lstval2.Value, true) : null; @@ -373,11 +373,11 @@ namespace FreeSql async public Task UpdateAsync(TEntity data, CancellationToken cancellationToken = default) { var exists = ExistsInStates(data); - if (exists == null) throw new Exception(DbContextStrings.CannotUpdate_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, data))); + if (exists == null) throw new Exception(DbContextErrorStrings.CannotUpdate_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, data))); if (exists == false) { var olddata = await OrmSelect(data).FirstAsync(cancellationToken); - if (olddata == null) throw new Exception(DbContextStrings.CannotUpdate_RecordDoesNotExist(_db.OrmOriginal.GetEntityString(_entityType, data))); + if (olddata == null) throw new Exception(DbContextErrorStrings.CannotUpdate_RecordDoesNotExist(_db.OrmOriginal.GetEntityString(_entityType, data))); } await UpdateRangePrivAsync(new[] { data }, true, cancellationToken); @@ -442,7 +442,7 @@ namespace FreeSql async public Task AddOrUpdateAsync(TEntity data, CancellationToken cancellationToken = default) { if (data == null) throw new ArgumentNullException(nameof(data)); - if (_table.Primarys.Any() == false) throw new Exception(DbContextStrings.CannotAdd_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data))); + if (_table.Primarys.Any() == false) throw new Exception(DbContextErrorStrings.CannotAdd_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data))); var flagExists = ExistsInStates(data); if (flagExists == false) diff --git a/FreeSql.DbContext/DbSet/DbSetSync.cs b/FreeSql.DbContext/DbSet/DbSetSync.cs index 3cf7b2190..5d639539f 100644 --- a/FreeSql.DbContext/DbSet/DbSetSync.cs +++ b/FreeSql.DbContext/DbSet/DbSetSync.cs @@ -122,7 +122,7 @@ namespace FreeSql case DataType.DuckDB: DbContextFlushCommand(); var rets = this.OrmInsert(data).ExecuteInserted(); - if (rets.Count != data.Count()) throw new Exception(DbContextStrings.SpecialError_BatchAdditionFailed(_db.OrmOriginal.Ado.DataType)); + if (rets.Count != data.Count()) throw new Exception(DbContextErrorStrings.SpecialError_BatchAdditionFailed(_db.OrmOriginal.Ado.DataType)); _db._entityChangeReport.AddRange(rets.Select(a => new DbContext.EntityChangeReport.ChangeInfo { EntityType = _entityType, Object = a, Type = DbContext.EntityChangeType.Insert })); var idx = 0; foreach (var s in data) @@ -347,7 +347,7 @@ namespace FreeSql if (_states.TryGetValue(uplst1.Key, out var lstval1) == false) return -999; var lstval2 = default(EntityState); - if (uplst2 != null && _states.TryGetValue(uplst2.Key, out lstval2) == false) throw new Exception(DbContextStrings.SpecialError_UpdateFailedDataNotTracked(_db.OrmOriginal.GetEntityString(_entityType, uplst2.Value))); + if (uplst2 != null && _states.TryGetValue(uplst2.Key, out lstval2) == false) throw new Exception(DbContextErrorStrings.SpecialError_UpdateFailedDataNotTracked(_db.OrmOriginal.GetEntityString(_entityType, uplst2.Value))); var cuig1 = _db.OrmOriginal.CompareEntityValueReturnColumns(_entityType, uplst1.Value, lstval1.Value, true); var cuig2 = uplst2 != null ? _db.OrmOriginal.CompareEntityValueReturnColumns(_entityType, uplst2.Value, lstval2.Value, true) : null; @@ -405,11 +405,11 @@ namespace FreeSql public void Update(TEntity data) { var exists = ExistsInStates(data); - if (exists == null) throw new Exception(DbContextStrings.CannotUpdate_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, data))); + if (exists == null) throw new Exception(DbContextErrorStrings.CannotUpdate_PrimaryKey_NotSet(_db.OrmOriginal.GetEntityString(_entityType, data))); if (exists == false) { var olddata = OrmSelect(data).First(); - if (olddata == null) throw new Exception(DbContextStrings.CannotUpdate_RecordDoesNotExist(_db.OrmOriginal.GetEntityString(_entityType, data))); + if (olddata == null) throw new Exception(DbContextErrorStrings.CannotUpdate_RecordDoesNotExist(_db.OrmOriginal.GetEntityString(_entityType, data))); } UpdateRangePriv(new[] { data }, true); @@ -506,7 +506,7 @@ namespace FreeSql public void AddOrUpdate(TEntity data) { if (data == null) throw new ArgumentNullException(nameof(data)); - if (_table.Primarys.Any() == false) throw new Exception(DbContextStrings.CannotAdd_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data))); + if (_table.Primarys.Any() == false) throw new Exception(DbContextErrorStrings.CannotAdd_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data))); var flagExists = ExistsInStates(data); if (flagExists == false) @@ -546,7 +546,7 @@ namespace FreeSql public void BeginEdit(List data) { if (data == null) return; - if (_table.Primarys.Any() == false) throw new Exception(DbContextStrings.CannotEdit_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data.First()))); + if (_table.Primarys.Any() == false) throw new Exception(DbContextErrorStrings.CannotEdit_EntityHasNo_PrimaryKey(_db.OrmOriginal.GetEntityString(_entityType, data.First()))); _statesEditing.Clear(); _dataEditing = data; foreach (var item in data) @@ -845,7 +845,7 @@ namespace FreeSql var rawset = _db.Set(dbset.EntityType); var statesRemove = typeof(DbSet<>).MakeGenericType(dbset.EntityType).GetMethod("StatesRemoveByObjects", BindingFlags.NonPublic | BindingFlags.Instance, null, new[] { typeof(IEnumerable) }, null); - if (statesRemove == null) throw new Exception(DbContextStrings.NotFoundMethod_StatesRemoveByObjects); + if (statesRemove == null) throw new Exception(DbContextErrorStrings.NotFoundMethod_StatesRemoveByObjects); statesRemove.Invoke(rawset, new object[] { items }); } returnDeleted?.AddRange(items); @@ -866,8 +866,8 @@ namespace FreeSql { if (item == null) return; if (string.IsNullOrEmpty(propertyName)) return; - if (_table.Properties.TryGetValue(propertyName, out var prop) == false) throw new KeyNotFoundException(DbContextStrings.NotFound_Property(_table.Type.FullName, propertyName)); - if (_table.ColumnsByCsIgnore.ContainsKey(propertyName)) throw new ArgumentException(DbContextStrings.TypeHasSetProperty_IgnoreAttribute(_table.Type.FullName, propertyName)); + if (_table.Properties.TryGetValue(propertyName, out var prop) == false) throw new KeyNotFoundException(DbContextErrorStrings.NotFound_Property(_table.Type.FullName, propertyName)); + if (_table.ColumnsByCsIgnore.ContainsKey(propertyName)) throw new ArgumentException(DbContextErrorStrings.TypeHasSetProperty_IgnoreAttribute(_table.Type.FullName, propertyName)); var tref = _table.GetTableRef(propertyName, true, false); if (tref == null) return; @@ -876,7 +876,7 @@ namespace FreeSql case TableRefType.OneToOne: case TableRefType.ManyToOne: case TableRefType.PgArrayToMany: - throw new ArgumentException(DbContextStrings.PropertyOfType_IsNot_OneToManyOrManyToMany(_table.Type.FullName, propertyName)); + throw new ArgumentException(DbContextErrorStrings.PropertyOfType_IsNot_OneToManyOrManyToMany(_table.Type.FullName, propertyName)); } DbContextFlushCommand(); diff --git a/FreeSql.DbContext/EfCoreFluentApi/EfCoreTableFluent.cs b/FreeSql.DbContext/EfCoreFluentApi/EfCoreTableFluent.cs index 27ffbe880..c0072718a 100644 --- a/FreeSql.DbContext/EfCoreFluentApi/EfCoreTableFluent.cs +++ b/FreeSql.DbContext/EfCoreFluentApi/EfCoreTableFluent.cs @@ -42,7 +42,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi #region HasKey public EfCoreTableFluent HasKey(string key) { - if (key == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("key")); + if (key == null) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("key")); foreach (string name in key.Split(',')) { if (string.IsNullOrEmpty(name.Trim())) continue; @@ -55,7 +55,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi #region HasIndex public HasIndexFluent HasIndex(string index) { - if (index == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("index")); + if (index == null) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("index")); var indexName = $"idx_{Guid.NewGuid().ToString("N").Substring(0, 8)}"; var columns = new List(); foreach (string name in index.Split(',')) @@ -98,8 +98,8 @@ namespace FreeSql.Extensions.EfCoreFluentApi #region HasOne public HasOneFluent HasOne(string one) { - if (string.IsNullOrEmpty(one)) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("one")); - if (_entityType.GetPropertiesDictIgnoreCase().TryGetValue(one, out var oneProperty) == false) throw new ArgumentException(DbContextStrings.ParameterError_NotFound_Property(one)); + if (string.IsNullOrEmpty(one)) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("one")); + if (_entityType.GetPropertiesDictIgnoreCase().TryGetValue(one, out var oneProperty) == false) throw new ArgumentException(DbContextErrorStrings.ParameterError_NotFound_Property(one)); return new HasOneFluent(_fsql, _tf, _entityType, oneProperty.PropertyType, one); } public class HasOneFluent @@ -124,8 +124,8 @@ namespace FreeSql.Extensions.EfCoreFluentApi } public HasOneFluent WithMany(string many) { - if (many == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("many")); - if (_entityType2.GetPropertiesDictIgnoreCase().TryGetValue(many, out var manyProperty) == false) throw new ArgumentException(DbContextStrings.ParameterError_NotFound_Property(many)); + if (many == null) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("many")); + if (_entityType2.GetPropertiesDictIgnoreCase().TryGetValue(many, out var manyProperty) == false) throw new ArgumentException(DbContextErrorStrings.ParameterError_NotFound_Property(many)); _withManyProperty = manyProperty.Name; if (string.IsNullOrEmpty(_selfBind) == false) _fsql.CodeFirst.ConfigEntity(_entityType2, eb2 => eb2.Navigate(many, _selfBind)); @@ -133,18 +133,18 @@ namespace FreeSql.Extensions.EfCoreFluentApi } public HasOneFluent WithOne(string one, string foreignKey) { - if (string.IsNullOrEmpty(one)) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("one")); - if (_entityType1.GetPropertiesDictIgnoreCase().TryGetValue(one, out var oneProperty) == false) throw new ArgumentException(DbContextStrings.ParameterError_NotFound_Property(one)); - if (oneProperty != _entityType1) throw new ArgumentException(DbContextStrings.ParameterError_NotFound_Property(one)); + if (string.IsNullOrEmpty(one)) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("one")); + if (_entityType1.GetPropertiesDictIgnoreCase().TryGetValue(one, out var oneProperty) == false) throw new ArgumentException(DbContextErrorStrings.ParameterError_NotFound_Property(one)); + if (oneProperty != _entityType1) throw new ArgumentException(DbContextErrorStrings.ParameterError_NotFound_Property(one)); _withOneProperty = oneProperty.Name; - if (foreignKey == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("foreignKey")); + if (foreignKey == null) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("foreignKey")); foreach (string name in foreignKey.Split(',')) { if (string.IsNullOrEmpty(name.Trim())) continue; _withOneBind += ", " + name.Trim(); } - if (string.IsNullOrEmpty(_withOneBind)) throw new ArgumentException(DbContextStrings.ParameterError("foreignKey")); + if (string.IsNullOrEmpty(_withOneBind)) throw new ArgumentException(DbContextErrorStrings.ParameterError("foreignKey")); _withOneBind = _withOneBind.TrimStart(',', ' '); if (string.IsNullOrEmpty(_selfBind) == false) _fsql.CodeFirst.ConfigEntity(_entityType2, eb2 => eb2.Navigate(_withOneProperty, _withOneBind)); @@ -152,13 +152,13 @@ namespace FreeSql.Extensions.EfCoreFluentApi } public HasOneFluent HasForeignKey(string foreignKey) { - if (foreignKey == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("foreignKey")); + if (foreignKey == null) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("foreignKey")); foreach (string name in foreignKey.Split(',')) { if (string.IsNullOrEmpty(name.Trim())) continue; _selfBind += ", " + name.Trim(); } - if (string.IsNullOrEmpty(_selfBind)) throw new ArgumentException(DbContextStrings.ParameterError("foreignKey")); + if (string.IsNullOrEmpty(_selfBind)) throw new ArgumentException(DbContextErrorStrings.ParameterError("foreignKey")); _selfBind = _selfBind.TrimStart(',', ' '); _tf.Navigate(_selfProperty, _selfBind); if (string.IsNullOrEmpty(_withManyProperty) == false) @@ -173,9 +173,9 @@ namespace FreeSql.Extensions.EfCoreFluentApi #region HasMany public HasManyFluent HasMany(string many) { - if (string.IsNullOrEmpty(many)) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("many")); - if (_entityType.GetPropertiesDictIgnoreCase().TryGetValue(many, out var manyProperty) == false) throw new ArgumentException(DbContextStrings.ParameterError_NotFound_CollectionProperties(many)); - if (typeof(IEnumerable).IsAssignableFrom(manyProperty.PropertyType) == false || manyProperty.PropertyType.IsGenericType == false) throw new ArgumentException(DbContextStrings.ParameterError_IsNot_CollectionProperties(many)); + if (string.IsNullOrEmpty(many)) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("many")); + if (_entityType.GetPropertiesDictIgnoreCase().TryGetValue(many, out var manyProperty) == false) throw new ArgumentException(DbContextErrorStrings.ParameterError_NotFound_CollectionProperties(many)); + if (typeof(IEnumerable).IsAssignableFrom(manyProperty.PropertyType) == false || manyProperty.PropertyType.IsGenericType == false) throw new ArgumentException(DbContextErrorStrings.ParameterError_IsNot_CollectionProperties(many)); return new HasManyFluent(_fsql, _tf, _entityType, manyProperty.PropertyType.GetGenericArguments()[0], manyProperty.Name); } public class HasManyFluent @@ -200,18 +200,18 @@ namespace FreeSql.Extensions.EfCoreFluentApi public void WithMany(string many, Type middleType) { - if (string.IsNullOrEmpty(many)) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("many")); - if (_entityType2.GetPropertiesDictIgnoreCase().TryGetValue(many, out var manyProperty) == false) throw new ArgumentException(DbContextStrings.ParameterError_NotFound_CollectionProperties(many)); - if (typeof(IEnumerable).IsAssignableFrom(manyProperty.PropertyType) == false || manyProperty.PropertyType.IsGenericType == false) throw new ArgumentException(DbContextStrings.ParameterError_IsNot_CollectionProperties(many)); + if (string.IsNullOrEmpty(many)) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("many")); + if (_entityType2.GetPropertiesDictIgnoreCase().TryGetValue(many, out var manyProperty) == false) throw new ArgumentException(DbContextErrorStrings.ParameterError_NotFound_CollectionProperties(many)); + if (typeof(IEnumerable).IsAssignableFrom(manyProperty.PropertyType) == false || manyProperty.PropertyType.IsGenericType == false) throw new ArgumentException(DbContextErrorStrings.ParameterError_IsNot_CollectionProperties(many)); _withManyProperty = manyProperty.Name; _tf.Navigate(_selfProperty, null, middleType); _fsql.CodeFirst.ConfigEntity(_entityType2, eb2 => eb2.Navigate(_withManyProperty, null, middleType)); } public HasManyFluent WithOne(string one) { - if (string.IsNullOrEmpty(one)) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("one")); - if (_entityType2.GetPropertiesDictIgnoreCase().TryGetValue(one, out var oneProperty) == false) throw new ArgumentException(DbContextStrings.ParameterError_NotFound_Property(one)); - if (oneProperty.PropertyType != _entityType1) throw new ArgumentException(DbContextStrings.ParameterError_NotFound_Property(one)); + if (string.IsNullOrEmpty(one)) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("one")); + if (_entityType2.GetPropertiesDictIgnoreCase().TryGetValue(one, out var oneProperty) == false) throw new ArgumentException(DbContextErrorStrings.ParameterError_NotFound_Property(one)); + if (oneProperty.PropertyType != _entityType1) throw new ArgumentException(DbContextErrorStrings.ParameterError_NotFound_Property(one)); _withOneProperty = oneProperty.Name; if (string.IsNullOrEmpty(_selfBind) == false) _fsql.CodeFirst.ConfigEntity(_entityType2, eb2 => eb2.Navigate(oneProperty.Name, _selfBind)); @@ -219,13 +219,13 @@ namespace FreeSql.Extensions.EfCoreFluentApi } public HasManyFluent HasForeignKey(string foreignKey) { - if (foreignKey == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("foreignKey")); + if (foreignKey == null) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("foreignKey")); foreach (string name in foreignKey.Split(',')) { if (string.IsNullOrEmpty(name.Trim())) continue; _selfBind += ", " + name.Trim(); } - if (string.IsNullOrEmpty(_selfBind)) throw new ArgumentException(DbContextStrings.ParameterError("foreignKey")); + if (string.IsNullOrEmpty(_selfBind)) throw new ArgumentException(DbContextErrorStrings.ParameterError("foreignKey")); _selfBind = _selfBind.TrimStart(',', ' '); _tf.Navigate(_selfProperty, _selfBind); if (string.IsNullOrEmpty(_withOneProperty) == false) diff --git a/FreeSql.DbContext/EfCoreFluentApi/EfCoreTableFluent`1.cs b/FreeSql.DbContext/EfCoreFluentApi/EfCoreTableFluent`1.cs index e142bd75a..1d8c97d10 100644 --- a/FreeSql.DbContext/EfCoreFluentApi/EfCoreTableFluent`1.cs +++ b/FreeSql.DbContext/EfCoreFluentApi/EfCoreTableFluent`1.cs @@ -42,7 +42,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi { var exp = key?.Body; if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand; - if (exp == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("key")); + if (exp == null) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("key")); switch (exp.NodeType) { @@ -63,7 +63,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi { var exp = index?.Body; if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand; - if (exp == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("index")); + if (exp == null) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("index")); var indexName = $"idx_{Guid.NewGuid().ToString("N").Substring(0, 8)}"; var columns = new List(); @@ -114,7 +114,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi { var exp = one?.Body; if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand; - if (exp == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("one")); + if (exp == null) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("one")); var oneProperty = ""; switch (exp.NodeType) @@ -123,7 +123,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi oneProperty = (exp as MemberExpression).Member.Name; break; } - if (string.IsNullOrEmpty(oneProperty)) throw new ArgumentException(DbContextStrings.ParameterError("one")); + if (string.IsNullOrEmpty(oneProperty)) throw new ArgumentException(DbContextErrorStrings.ParameterError("one")); return new HasOneFluent(_fsql, _tf, oneProperty); } public class HasOneFluent @@ -146,7 +146,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi { var exp = many?.Body; if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand; - if (exp == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("many")); + if (exp == null) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("many")); switch (exp.NodeType) { @@ -154,7 +154,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi _withManyProperty = (exp as MemberExpression).Member.Name; break; } - if (string.IsNullOrEmpty(_withManyProperty)) throw new ArgumentException(DbContextStrings.ParameterError("many")); + if (string.IsNullOrEmpty(_withManyProperty)) throw new ArgumentException(DbContextErrorStrings.ParameterError("many")); if (string.IsNullOrEmpty(_selfBind) == false) _fsql.CodeFirst.ConfigEntity(eb2 => eb2.Navigate(_withManyProperty, _selfBind)); return this; @@ -163,7 +163,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi { var exp = one?.Body; if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand; - if (exp == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("one")); + if (exp == null) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("one")); switch (exp.NodeType) { @@ -171,11 +171,11 @@ namespace FreeSql.Extensions.EfCoreFluentApi _withOneProperty = (exp as MemberExpression).Member.Name; break; } - if (string.IsNullOrEmpty(_withOneProperty)) throw new ArgumentException(DbContextStrings.ParameterError("one")); + if (string.IsNullOrEmpty(_withOneProperty)) throw new ArgumentException(DbContextErrorStrings.ParameterError("one")); exp = foreignKey?.Body; if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand; - if (exp == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("foreignKey")); + if (exp == null) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("foreignKey")); switch (exp.NodeType) { @@ -190,7 +190,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi _withOneBind = _withOneBind.TrimStart(',', ' '); break; } - if (string.IsNullOrEmpty(_withOneBind)) throw new ArgumentException(DbContextStrings.ParameterError("foreignKey")); + if (string.IsNullOrEmpty(_withOneBind)) throw new ArgumentException(DbContextErrorStrings.ParameterError("foreignKey")); if (string.IsNullOrEmpty(_selfBind) == false) _fsql.CodeFirst.ConfigEntity(eb2 => eb2.Navigate(_withOneProperty, _withOneBind)); return this; @@ -199,7 +199,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi { var exp = foreignKey?.Body; if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand; - if (exp == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("foreignKey")); + if (exp == null) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("foreignKey")); switch (exp.NodeType) { @@ -214,7 +214,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi _selfBind = _selfBind.TrimStart(',', ' '); break; } - if (string.IsNullOrEmpty(_selfBind)) throw new ArgumentException(DbContextStrings.ParameterError("foreignKey")); + if (string.IsNullOrEmpty(_selfBind)) throw new ArgumentException(DbContextErrorStrings.ParameterError("foreignKey")); _tf.Navigate(_selfProperty, _selfBind); if (string.IsNullOrEmpty(_withManyProperty) == false) _fsql.CodeFirst.ConfigEntity(eb2 => eb2.Navigate(_withManyProperty, _selfBind)); @@ -230,7 +230,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi { var exp = many?.Body; if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand; - if (exp == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("many")); + if (exp == null) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("many")); var manyProperty = ""; switch (exp.NodeType) @@ -239,7 +239,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi manyProperty = (exp as MemberExpression).Member.Name; break; } - if (string.IsNullOrEmpty(manyProperty)) throw new ArgumentException(DbContextStrings.ParameterError("many")); + if (string.IsNullOrEmpty(manyProperty)) throw new ArgumentException(DbContextErrorStrings.ParameterError("many")); return new HasManyFluent(_fsql, _tf, manyProperty); } public class HasManyFluent @@ -262,7 +262,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi { var exp = many?.Body; if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand; - if (exp == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("many")); + if (exp == null) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("many")); switch (exp.NodeType) { @@ -270,7 +270,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi _withManyProperty = (exp as MemberExpression).Member.Name; break; } - if (string.IsNullOrEmpty(_withManyProperty)) throw new ArgumentException(DbContextStrings.ParameterError("many")); + if (string.IsNullOrEmpty(_withManyProperty)) throw new ArgumentException(DbContextErrorStrings.ParameterError("many")); _tf.Navigate(_selfProperty, null, middleType); _fsql.CodeFirst.ConfigEntity(eb2 => eb2.Navigate(_withManyProperty, null, middleType)); @@ -279,7 +279,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi { var exp = one?.Body; if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand; - if (exp == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("one")); + if (exp == null) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("one")); switch (exp.NodeType) { @@ -287,7 +287,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi _withOneProperty = (exp as MemberExpression).Member.Name; break; } - if (string.IsNullOrEmpty(_withOneProperty)) throw new ArgumentException(DbContextStrings.ParameterError("one")); + if (string.IsNullOrEmpty(_withOneProperty)) throw new ArgumentException(DbContextErrorStrings.ParameterError("one")); if (string.IsNullOrEmpty(_selfBind) == false) _fsql.CodeFirst.ConfigEntity(eb2 => eb2.Navigate(_withOneProperty, _selfBind)); @@ -297,7 +297,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi { var exp = foreignKey?.Body; if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand; - if (exp == null) throw new ArgumentException(DbContextStrings.ParameterError_CannotBeNull("foreignKey")); + if (exp == null) throw new ArgumentException(DbContextErrorStrings.ParameterError_CannotBeNull("foreignKey")); switch (exp.NodeType) { @@ -312,7 +312,7 @@ namespace FreeSql.Extensions.EfCoreFluentApi _selfBind = _selfBind.TrimStart(',', ' '); break; } - if (string.IsNullOrEmpty(_selfBind)) throw new ArgumentException(DbContextStrings.ParameterError("foreignKey")); + if (string.IsNullOrEmpty(_selfBind)) throw new ArgumentException(DbContextErrorStrings.ParameterError("foreignKey")); _tf.Navigate(_selfProperty, _selfBind); if (string.IsNullOrEmpty(_withOneProperty) == false) _fsql.CodeFirst.ConfigEntity(eb2 => eb2.Navigate(_withOneProperty, _selfBind)); diff --git a/FreeSql.DbContext/Extensions/DependencyInjection.cs b/FreeSql.DbContext/Extensions/DependencyInjection.cs index 78664f09f..3d5cd5a3d 100644 --- a/FreeSql.DbContext/Extensions/DependencyInjection.cs +++ b/FreeSql.DbContext/Extensions/DependencyInjection.cs @@ -21,7 +21,7 @@ namespace Microsoft.Extensions.DependencyInjection } catch(Exception ex) { - throw new Exception(DbContextStrings.AddFreeDbContextError_CheckConstruction(dbContextType.Name), ex); + throw new Exception(DbContextErrorStrings.AddFreeDbContextError_CheckConstruction(dbContextType.Name), ex); } if (ctx != null && ctx._ormScoped == null) { @@ -31,7 +31,7 @@ namespace Microsoft.Extensions.DependencyInjection ctx._optionsPriv = builder._options; if (ctx._ormScoped == null) - throw new Exception(DbContextStrings.ConfigureUseFreeSql); + throw new Exception(DbContextErrorStrings.ConfigureUseFreeSql); ctx.InitPropSets(); } diff --git a/FreeSql.DbContext/FreeSql.DbContext.csproj b/FreeSql.DbContext/FreeSql.DbContext.csproj index 650678f3b..a9e910513 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.csproj +++ b/FreeSql.DbContext/FreeSql.DbContext.csproj @@ -63,26 +63,4 @@ - - - True - True - DbContextStrings.Designer.tt - - - - - - TextTemplatingFileGenerator - DbContextStrings.Designer.cs - - - Designer - FreeSql - - - FreeSql - - - diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index 7bd2291ce..c941a15d9 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -83,6 +83,216 @@ 刷新队列中的命令 + + + AddFreeDbContext 发生错误,请检查 {dbContextTypeName} 的构造参数都已正确注入 + + + + + 不可添加,已存在于状态管理:{entityString} + + + + + 不可添加,实体没有主键:{entityString} + + + + + 不可添加,未设置主键的值:{entityString} + + + + + 不可添加,自增属性有值:{entityString} + + + + + 不可附加,实体没有主键:{entityString} + + + + + 不可附加,未设置主键的值:{entityString} + + + + + 不可删除,数据未被跟踪,应该先查询:{entityString} + + + + + 不可删除,实体没有主键:{entityString} + + + + + 不可删除,未设置主键的值:{entityString} + + + + + 不可进行编辑,实体没有主键:{entityString} + + + + + 不可更新,数据未被跟踪,应该先查询 或者 Attach:{entityString} + + + + + 不可更新,实体没有主键:{entityString} + + + + + 不可更新,未设置主键的值:{entityString} + + + + + 不可更新,数据库不存在该记录:{entityString} + + + + + 请在 OnConfiguring 或 AddFreeDbContext 中配置 UseFreeSql + + + + + DbSet.AsType 参数错误,请传入正确的实体类型 + + + + + 实体类型 {EntityTypeName} 无法转换为 {name},无法使用该方法 + + + + + 实体类型 {EntityTypeName} 主键类型不为 {fullName},无法使用该方法 + + + + + 实体类型 {EntityTypeName} 主键数量不为 1,无法使用该方法 + + + + + FreeSql.Repository 设置过滤器失败,原因是对象不属于 IRepository + + + + + 不可比较,实体没有主键:{entityString} + + + + + 不可比较,未设置主键的值:{entityString} + + + + + FreeSql.Repository Insert 失败,因为设置了过滤器 {filterKey}: {filterValueExpression},插入的数据不符合 {entityString} + + + + + ISelect.AsType 参数不支持指定为 object + + + + + {tableTypeFullName} 不存在属性 {propertyName} + + + + + 找不到方法 DbSet&lt;&gt;.StatesRemoveByObjects + + + + + 参数 data 类型错误 {entityTypeFullName} + + + + + 参数错误 {param} + + + + + 参数错误 {param} 不能为 null + + + + + 参数错误 {many} 不是集合属性 + + + + + 参数错误 {many} 集合属性不存在 + + + + + 参数错误 {one} 属性不存在 + + + + + Propagation_Mandatory: 使用当前事务,如果没有当前事务,就抛出异常 + + + + + Propagation_Never: 以非事务方式执行操作,如果当前事务存在则抛出异常 + + + + + {tableTypeFullName} 类型的属性 {propertyName} 不是 OneToMany 或 ManyToMany 特性 + + + + + 特别错误:批量添加失败,{dataType} 的返回数据,与添加的数目不匹配 + + + + + 特别错误:更新失败,数据未被跟踪:{entityString} + + + + + 已开启事务,不能禁用工作单元 + + + + + {tableTypeFullName} 类型已设置属性 {propertyName} 忽略特性 + + + + + {unitOfWorkManager} 构造参数 {fsql} 不能为 null + + + + + FreeSql.Repository Update 失败,因为设置了过滤器 {filterKey}: {filterValueExpression},更新的数据不符合{entityString} + + 是否开启 一对一(OneToOne)、一对多(OneToMany)、多对多(ManyToMany) 级联保存功能 @@ -264,233 +474,6 @@ - - - - String resources used in FreeSql exceptions, etc. - - - These strings are exposed publicly for use by database providers and extensions. - It is unusual for application code to need these strings. - - - - - - 重写当前线程的 CurrentUICulture 属性,对 - 使用此强类型资源类的所有资源查找执行重写。 - - - - - AddFreeDbContext 发生错误,请检查 {dbContextTypeName} 的构造参数都已正确注入 - - - - - 不可添加,已存在于状态管理:{entityString} - - - - - 不可添加,实体没有主键:{entityString} - - - - - 不可添加,未设置主键的值:{entityString} - - - - - 不可添加,自增属性有值:{entityString} - - - - - 不可附加,实体没有主键:{entityString} - - - - - 不可附加,未设置主键的值:{entityString} - - - - - 不可删除,数据未被跟踪,应该先查询:{entityString} - - - - - 不可删除,实体没有主键:{entityString} - - - - - 不可删除,未设置主键的值:{entityString} - - - - - 不可进行编辑,实体没有主键:{entityString} - - - - - 不可更新,数据未被跟踪,应该先查询 或者 Attach:{entityString} - - - - - 不可更新,实体没有主键:{entityString} - - - - - 不可更新,未设置主键的值:{entityString} - - - - - 不可更新,数据库不存在该记录:{entityString} - - - - - 请在 OnConfiguring 或 AddFreeDbContext 中配置 UseFreeSql - - - - - DbSet.AsType 参数错误,请传入正确的实体类型 - - - - - 实体类型 {EntityTypeName} 无法转换为 {name},无法使用该方法 - - - - - 实体类型 {EntityTypeName} 主键类型不为 {fullName},无法使用该方法 - - - - - 实体类型 {EntityTypeName} 主键数量不为 1,无法使用该方法 - - - - - FreeSql.Repository 设置过滤器失败,原因是对象不属于 IRepository - - - - - 不可比较,实体没有主键:{entityString} - - - - - 不可比较,未设置主键的值:{entityString} - - - - - FreeSql.Repository Insert 失败,因为设置了过滤器 {filterKey}: {filterValueExpression},插入的数据不符合 {entityString} - - - - - ISelect.AsType 参数不支持指定为 object - - - - - {tableTypeFullName} 不存在属性 {propertyName} - - - - - 找不到方法 DbSet<>.StatesRemoveByObjects - - - - - 参数 data 类型错误 {entityTypeFullName} - - - - - 参数错误 {param} - - - - - 参数错误 {param} 不能为 null - - - - - 参数错误 {many} 不是集合属性 - - - - - 参数错误 {many} 集合属性不存在 - - - - - 参数错误 {one} 属性不存在 - - - - - Propagation_Mandatory: 使用当前事务,如果没有当前事务,就抛出异常 - - - - - Propagation_Never: 以非事务方式执行操作,如果当前事务存在则抛出异常 - - - - - {tableTypeFullName} 类型的属性 {propertyName} 不是 OneToMany 或 ManyToMany 特性 - - - - - 特别错误:批量添加失败,{dataType} 的返回数据,与添加的数目不匹配 - - - - - 特别错误:更新失败,数据未被跟踪:{entityString} - - - - - 已开启事务,不能禁用工作单元 - - - - - {tableTypeFullName} 类型已设置属性 {propertyName} 忽略特性 - - - - - {unitOfWorkManager} 构造参数 {fsql} 不能为 null - - - - - FreeSql.Repository Update 失败,因为设置了过滤器 {filterKey}: {filterValueExpression},更新的数据不符合{entityString} - - 在工作单元内创建联合主键的仓储类,工作单元下的仓储操作具有事务特点 diff --git a/FreeSql.DbContext/Properties/DbContextStrings.Designer.cs b/FreeSql.DbContext/Properties/DbContextStrings.Designer.cs deleted file mode 100644 index ff2b54c48..000000000 --- a/FreeSql.DbContext/Properties/DbContextStrings.Designer.cs +++ /dev/null @@ -1,375 +0,0 @@ - -// - -using System; -using System.Reflection; -using System.Resources; -using System.Globalization; -using System.Threading; - -namespace FreeSql -{ - /// - /// - /// String resources used in FreeSql exceptions, etc. - /// - /// - /// These strings are exposed publicly for use by database providers and extensions. - /// It is unusual for application code to need these strings. - /// - /// - public static class DbContextStrings - { - private static readonly ResourceManager _resourceManager = new ResourceManager("FreeSql.DbContext.Properties.DbContextStrings", typeof(DbContextStrings).Assembly); - - private static CultureInfo _resourceCulture; - - /// - /// 重写当前线程的 CurrentUICulture 属性,对 - /// 使用此强类型资源类的所有资源查找执行重写。 - /// - public static CultureInfo Culture - { - get - { - return _resourceCulture; - } - set - { - _resourceCulture = value; - } - } - - /// - /// AddFreeDbContext 发生错误,请检查 {dbContextTypeName} 的构造参数都已正确注入 - /// - public static string AddFreeDbContextError_CheckConstruction(object dbContextTypeName) - => string.Format( - GetString("AddFreeDbContextError_CheckConstruction", nameof(dbContextTypeName)), - dbContextTypeName); - - /// - /// 不可添加,已存在于状态管理:{entityString} - /// - public static string CannotAdd_AlreadyExistsInStateManagement(object entityString) - => string.Format( - GetString("CannotAdd_AlreadyExistsInStateManagement", nameof(entityString)), - entityString); - - /// - /// 不可添加,实体没有主键:{entityString} - /// - public static string CannotAdd_EntityHasNo_PrimaryKey(object entityString) - => string.Format( - GetString("CannotAdd_EntityHasNo_PrimaryKey", nameof(entityString)), - entityString); - - /// - /// 不可添加,未设置主键的值:{entityString} - /// - public static string CannotAdd_PrimaryKey_NotSet(object entityString) - => string.Format( - GetString("CannotAdd_PrimaryKey_NotSet", nameof(entityString)), - entityString); - - /// - /// 不可添加,自增属性有值:{entityString} - /// - public static string CannotAdd_SelfIncreasingHasValue(object entityString) - => string.Format( - GetString("CannotAdd_SelfIncreasingHasValue", nameof(entityString)), - entityString); - - /// - /// 不可附加,实体没有主键:{entityString} - /// - public static string CannotAttach_EntityHasNo_PrimaryKey(object entityString) - => string.Format( - GetString("CannotAttach_EntityHasNo_PrimaryKey", nameof(entityString)), - entityString); - - /// - /// 不可附加,未设置主键的值:{entityString} - /// - public static string CannotAttach_PrimaryKey_NotSet(object entityString) - => string.Format( - GetString("CannotAttach_PrimaryKey_NotSet", nameof(entityString)), - entityString); - - /// - /// 不可删除,数据未被跟踪,应该先查询:{entityString} - /// - public static string CannotDelete_DataNotTracked_ShouldQuery(object entityString) - => string.Format( - GetString("CannotDelete_DataNotTracked_ShouldQuery", nameof(entityString)), - entityString); - - /// - /// 不可删除,实体没有主键:{entityString} - /// - public static string CannotDelete_EntityHasNo_PrimaryKey(object entityString) - => string.Format( - GetString("CannotDelete_EntityHasNo_PrimaryKey", nameof(entityString)), - entityString); - - /// - /// 不可删除,未设置主键的值:{entityString} - /// - public static string CannotDelete_PrimaryKey_NotSet(object entityString) - => string.Format( - GetString("CannotDelete_PrimaryKey_NotSet", nameof(entityString)), - entityString); - - /// - /// 不可进行编辑,实体没有主键:{entityString} - /// - public static string CannotEdit_EntityHasNo_PrimaryKey(object entityString) - => string.Format( - GetString("CannotEdit_EntityHasNo_PrimaryKey", nameof(entityString)), - entityString); - - /// - /// 不可更新,数据未被跟踪,应该先查询 或者 Attach:{entityString} - /// - public static string CannotUpdate_DataShouldQueryOrAttach(object entityString) - => string.Format( - GetString("CannotUpdate_DataShouldQueryOrAttach", nameof(entityString)), - entityString); - - /// - /// 不可更新,实体没有主键:{entityString} - /// - public static string CannotUpdate_EntityHasNo_PrimaryKey(object entityString) - => string.Format( - GetString("CannotUpdate_EntityHasNo_PrimaryKey", nameof(entityString)), - entityString); - - /// - /// 不可更新,未设置主键的值:{entityString} - /// - public static string CannotUpdate_PrimaryKey_NotSet(object entityString) - => string.Format( - GetString("CannotUpdate_PrimaryKey_NotSet", nameof(entityString)), - entityString); - - /// - /// 不可更新,数据库不存在该记录:{entityString} - /// - public static string CannotUpdate_RecordDoesNotExist(object entityString) - => string.Format( - GetString("CannotUpdate_RecordDoesNotExist", nameof(entityString)), - entityString); - - /// - /// 请在 OnConfiguring 或 AddFreeDbContext 中配置 UseFreeSql - /// - public static string ConfigureUseFreeSql - => GetString("ConfigureUseFreeSql"); - - /// - /// DbSet.AsType 参数错误,请传入正确的实体类型 - /// - public static string DbSetAsType_NotSupport_Object - => GetString("DbSetAsType_NotSupport_Object"); - - /// - /// 实体类型 {EntityTypeName} 无法转换为 {name},无法使用该方法 - /// - public static string EntityType_CannotConvert(object EntityTypeName, object name) - => string.Format( - GetString("EntityType_CannotConvert", nameof(EntityTypeName), nameof(name)), - EntityTypeName, name); - - /// - /// 实体类型 {EntityTypeName} 主键类型不为 {fullName},无法使用该方法 - /// - public static string EntityType_PrimaryKeyError(object EntityTypeName, object fullName) - => string.Format( - GetString("EntityType_PrimaryKeyError", nameof(EntityTypeName), nameof(fullName)), - EntityTypeName, fullName); - - /// - /// 实体类型 {EntityTypeName} 主键数量不为 1,无法使用该方法 - /// - public static string EntityType_PrimaryKeyIsNotOne(object EntityTypeName) - => string.Format( - GetString("EntityType_PrimaryKeyIsNotOne", nameof(EntityTypeName)), - EntityTypeName); - - /// - /// FreeSql.Repository 设置过滤器失败,原因是对象不属于 IRepository - /// - public static string FailedSetFilter_NotBelongIRpository - => GetString("FailedSetFilter_NotBelongIRpository"); - - /// - /// 不可比较,实体没有主键:{entityString} - /// - public static string Incomparable_EntityHasNo_PrimaryKey(object entityString) - => string.Format( - GetString("Incomparable_EntityHasNo_PrimaryKey", nameof(entityString)), - entityString); - - /// - /// 不可比较,未设置主键的值:{entityString} - /// - public static string Incomparable_PrimaryKey_NotSet(object entityString) - => string.Format( - GetString("Incomparable_PrimaryKey_NotSet", nameof(entityString)), - entityString); - - /// - /// FreeSql.Repository Insert 失败,因为设置了过滤器 {filterKey}: {filterValueExpression},插入的数据不符合 {entityString} - /// - public static string InsertError_Filter(object filterKey, object filterValueExpression, object entityString) - => string.Format( - GetString("InsertError_Filter", nameof(filterKey), nameof(filterValueExpression), nameof(entityString)), - filterKey, filterValueExpression, entityString); - - /// - /// ISelect.AsType 参数不支持指定为 object - /// - public static string ISelectAsType_ParameterError - => GetString("ISelectAsType_ParameterError"); - - /// - /// {tableTypeFullName} 不存在属性 {propertyName} - /// - public static string NotFound_Property(object tableTypeFullName, object propertyName) - => string.Format( - GetString("NotFound_Property", nameof(tableTypeFullName), nameof(propertyName)), - tableTypeFullName, propertyName); - - /// - /// 找不到方法 DbSet<>.StatesRemoveByObjects - /// - public static string NotFoundMethod_StatesRemoveByObjects - => GetString("NotFoundMethod_StatesRemoveByObjects"); - - /// - /// 参数 data 类型错误 {entityTypeFullName} - /// - public static string ParameterDataTypeError(object entityTypeFullName) - => string.Format( - GetString("ParameterDataTypeError", nameof(entityTypeFullName)), - entityTypeFullName); - - /// - /// 参数错误 {param} - /// - public static string ParameterError(object param) - => string.Format( - GetString("ParameterError", nameof(param)), - param); - - /// - /// 参数错误 {param} 不能为 null - /// - public static string ParameterError_CannotBeNull(object param) - => string.Format( - GetString("ParameterError_CannotBeNull", nameof(param)), - param); - - /// - /// 参数错误 {many} 不是集合属性 - /// - public static string ParameterError_IsNot_CollectionProperties(object many) - => string.Format( - GetString("ParameterError_IsNot_CollectionProperties", nameof(many)), - many); - - /// - /// 参数错误 {many} 集合属性不存在 - /// - public static string ParameterError_NotFound_CollectionProperties(object many) - => string.Format( - GetString("ParameterError_NotFound_CollectionProperties", nameof(many)), - many); - - /// - /// 参数错误 {one} 属性不存在 - /// - public static string ParameterError_NotFound_Property(object one) - => string.Format( - GetString("ParameterError_NotFound_Property", nameof(one)), - one); - - /// - /// Propagation_Mandatory: 使用当前事务,如果没有当前事务,就抛出异常 - /// - public static string Propagation_Mandatory - => GetString("Propagation_Mandatory"); - - /// - /// Propagation_Never: 以非事务方式执行操作,如果当前事务存在则抛出异常 - /// - public static string Propagation_Never - => GetString("Propagation_Never"); - - /// - /// {tableTypeFullName} 类型的属性 {propertyName} 不是 OneToMany 或 ManyToMany 特性 - /// - public static string PropertyOfType_IsNot_OneToManyOrManyToMany(object tableTypeFullName, object propertyName) - => string.Format( - GetString("PropertyOfType_IsNot_OneToManyOrManyToMany", nameof(tableTypeFullName), nameof(propertyName)), - tableTypeFullName, propertyName); - - /// - /// 特别错误:批量添加失败,{dataType} 的返回数据,与添加的数目不匹配 - /// - public static string SpecialError_BatchAdditionFailed(object dataType) - => string.Format( - GetString("SpecialError_BatchAdditionFailed", nameof(dataType)), - dataType); - - /// - /// 特别错误:更新失败,数据未被跟踪:{entityString} - /// - public static string SpecialError_UpdateFailedDataNotTracked(object entityString) - => string.Format( - GetString("SpecialError_UpdateFailedDataNotTracked", nameof(entityString)), - entityString); - - /// - /// 已开启事务,不能禁用工作单元 - /// - public static string TransactionHasBeenStarted - => GetString("TransactionHasBeenStarted"); - - /// - /// {tableTypeFullName} 类型已设置属性 {propertyName} 忽略特性 - /// - public static string TypeHasSetProperty_IgnoreAttribute(object tableTypeFullName, object propertyName) - => string.Format( - GetString("TypeHasSetProperty_IgnoreAttribute", nameof(tableTypeFullName), nameof(propertyName)), - tableTypeFullName, propertyName); - - /// - /// {unitOfWorkManager} 构造参数 {fsql} 不能为 null - /// - public static string UnitOfWorkManager_Construction_CannotBeNull(object unitOfWorkManager, object fsql) - => string.Format( - GetString("UnitOfWorkManager_Construction_CannotBeNull", nameof(unitOfWorkManager), nameof(fsql)), - unitOfWorkManager, fsql); - - /// - /// FreeSql.Repository Update 失败,因为设置了过滤器 {filterKey}: {filterValueExpression},更新的数据不符合{entityString} - /// - public static string UpdateError_Filter(object filterKey, object filterValueExpression, object entityString) - => string.Format( - GetString("UpdateError_Filter", nameof(filterKey), nameof(filterValueExpression), nameof(entityString)), - filterKey, filterValueExpression, entityString); - - private static string GetString(string name, params string[] formatterNames) - { - var value = _resourceManager.GetString(name,_resourceCulture); - for (var i = 0; i < formatterNames.Length; i++) - { - value = value.Replace("{" + formatterNames[i] + "}", "{" + i + "}"); - } - - return value; - } - } -} - diff --git a/FreeSql.DbContext/Properties/DbContextStrings.Designer.tt b/FreeSql.DbContext/Properties/DbContextStrings.Designer.tt deleted file mode 100644 index b8b9d8ad8..000000000 --- a/FreeSql.DbContext/Properties/DbContextStrings.Designer.tt +++ /dev/null @@ -1,5 +0,0 @@ -<# - Session["ResourceFile"] = "DbContextStrings.resx"; - Session["AccessModifier"] = "public"; -#> -<#@ include file="../../FreeSql/Properties/Resources.tt" #> \ No newline at end of file diff --git a/FreeSql.DbContext/Properties/DbContextStrings.resx b/FreeSql.DbContext/Properties/DbContextStrings.resx deleted file mode 100644 index 031a63af4..000000000 --- a/FreeSql.DbContext/Properties/DbContextStrings.resx +++ /dev/null @@ -1,246 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - FreeSql: An error occurred in AddFreeDbContext, check that the construction parameters of {dbContextTypeName} have been injected correctly - - - FreeSql: Not addable, already exists in state management: {entityString} - - - FreeSql: Not addable, entity has no primary key: {entityString} - - - FreeSql: Not addable, no value for primary key set: {entityString} - - - FreeSql: Not addable, self-increasing attribute has value: {entityString} - - - FreeSql: Not attachable, entity has no primary key: {entityString} - - - FreeSql: Not attachable, no value for primary key set: {entityString} - - - FreeSql: Not deletable, data not tracked, should query first: {entityString} - - - FreeSql: Not deletable, entity has no primary key: {entityString} - - - FreeSql: Not deletable, no value for primary key set: {entityString} - - - FreeSql: Not editable, entity has no primary key: {entityString} - - - FreeSql: Not updatable, data not tracked, should be queried first or Attach:{entityString} - - - FreeSql: Not updatable, entity has no primary key: {entityString} - - - FreeSql: Not updatable, no value for primary key set: {entityString} - - - FreeSql: Not updatable, the record does not exist in the database: {entityString} - - - FreeSql: Please configure UseFreeSql in OnConfiguring or AddFreeDbContext - - - FreeSql: DbSet. AsType parameter error, please pass in the correct entity type - - - FreeSql: Entity type {EntityTypeName} cannot be converted to {name} and cannot use this method - - - FreeSql: Entity type {EntityTypeName} Primary key type is not {fullName} and cannot be used with this method - - - FreeSql: Entity type {EntityTypeName} Primary key number is not 1 and cannot be used with this method - - - FreeSql: FreeSql. Repository failed to set filter because object does not belong to IRepository - - - FreeSql: Not comparable, entity has no primary key: {entityString} - - - FreeSql: Non-comparable, no value for primary key set: {entityString} - - - FreeSql: FreeSql.Repository Insert failed because the filter {filterKey}: {filterValueExpression} was set and the inserted data does not conform to {entityString} - - - FreeSql: ISelect. AsType parameter does not support specifying as object - - - FreeSql: Property {propertyName} does not exist for {tableTypeFullName} - - - FreeSql: Method DbSet<> not found. StatesRemoveByObjects - - - FreeSql: Parameter data type error {entityTypeFullName} - - - FreeSql: Parameter error {param} - - - FreeSql: Parameter error {param} cannot be null - - - FreeSql: Parameter error {many} is not a collection property - - - FreeSql: Parameter error {many} Collection property does not exist - - - FreeSql: Parameter error {one} attribute does not exist - - - FreeSql: Propagation_ Mandatory: With the current transaction, throw an exception if there is no current transaction - - - FreeSql: Propagation_ Never: Perform the operation non-transactionally and throw an exception if the current transaction exists - - - FreeSql: Property {propertyName} of type {tableTypeFullName} is not OneToMany or ManyToMany attribute - - - FreeSql: Special error: Bulk add failed, {dataType} returned data, does not match the number added - - - FreeSql: Special error: Update failed, data not tracked: {entityString} - - - FreeSql: Transaction opened, unit of work cannot be disabled - - - FreeSql: The {tableTypeFullName} type has set the property {propertyName} Ignore the attribute - - - FreeSql: The {unitOfWorkManager} constructor parameter {fsql} cannot be null - - - FreeSql: FreeSql.Repository Update failed because the filter {filterKey}: {filterValueExpression} is set and the updated data does not conform to {entityString} - - \ No newline at end of file diff --git a/FreeSql.DbContext/Properties/DbContextStrings.zh-Hans.resx b/FreeSql.DbContext/Properties/DbContextStrings.zh-Hans.resx deleted file mode 100644 index ce01210d9..000000000 --- a/FreeSql.DbContext/Properties/DbContextStrings.zh-Hans.resx +++ /dev/null @@ -1,246 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - AddFreeDbContext 发生错误,请检查 {dbContextTypeName} 的构造参数都已正确注入 - - - 不可添加,已存在于状态管理:{entityString} - - - 不可添加,实体没有主键:{entityString} - - - 不可添加,未设置主键的值:{entityString} - - - 不可添加,自增属性有值:{entityString} - - - 不可附加,实体没有主键:{entityString} - - - 不可附加,未设置主键的值:{entityString} - - - 不可删除,数据未被跟踪,应该先查询:{entityString} - - - 不可删除,实体没有主键:{entityString} - - - 不可删除,未设置主键的值:{entityString} - - - 不可进行编辑,实体没有主键:{entityString} - - - 不可更新,数据未被跟踪,应该先查询 或者 Attach:{entityString} - - - 不可更新,实体没有主键:{entityString} - - - 不可更新,未设置主键的值:{entityString} - - - 不可更新,数据库不存在该记录:{entityString} - - - 请在 OnConfiguring 或 AddFreeDbContext 中配置 UseFreeSql - - - DbSet.AsType 参数错误,请传入正确的实体类型 - - - 实体类型 {EntityTypeName} 无法转换为 {name},无法使用该方法 - - - 实体类型 {EntityTypeName} 主键类型不为 {fullName},无法使用该方法 - - - 实体类型 {EntityTypeName} 主键数量不为 1,无法使用该方法 - - - FreeSql.Repository 设置过滤器失败,原因是对象不属于 IRepository - - - 不可比较,实体没有主键:{entityString} - - - 不可比较,未设置主键的值:{entityString} - - - FreeSql.Repository Insert 失败,因为设置了过滤器 {filterKey}: {filterValueExpression},插入的数据不符合 {entityString} - - - ISelect.AsType 参数不支持指定为 object - - - {tableTypeFullName} 不存在属性 {propertyName} - - - 找不到方法 DbSet<>.StatesRemoveByObjects - - - 参数 data 类型错误 {entityTypeFullName} - - - 参数错误 {param} - - - 参数错误 {param} 不能为 null - - - 参数错误 {many} 不是集合属性 - - - 参数错误 {many} 集合属性不存在 - - - 参数错误 {one} 属性不存在 - - - Propagation_Mandatory: 使用当前事务,如果没有当前事务,就抛出异常 - - - Propagation_Never: 以非事务方式执行操作,如果当前事务存在则抛出异常 - - - {tableTypeFullName} 类型的属性 {propertyName} 不是 OneToMany 或 ManyToMany 特性 - - - 特别错误:批量添加失败,{dataType} 的返回数据,与添加的数目不匹配 - - - 特别错误:更新失败,数据未被跟踪:{entityString} - - - 已开启事务,不能禁用工作单元 - - - {tableTypeFullName} 类型已设置属性 {propertyName} 忽略特性 - - - {unitOfWorkManager} 构造参数 {fsql} 不能为 null - - - FreeSql.Repository Update 失败,因为设置了过滤器 {filterKey}: {filterValueExpression},更新的数据不符合{entityString} - - \ No newline at end of file diff --git a/FreeSql.DbContext/Repository/Repository/BaseRepository.cs b/FreeSql.DbContext/Repository/Repository/BaseRepository.cs index c22418f93..6a9e81f56 100644 --- a/FreeSql.DbContext/Repository/Repository/BaseRepository.cs +++ b/FreeSql.DbContext/Repository/Repository/BaseRepository.cs @@ -197,12 +197,12 @@ namespace FreeSql TEntity CheckTKeyAndReturnIdEntity(TKey id) { var tb = _db.OrmOriginal.CodeFirst.GetTableByEntity(EntityType); - if (tb.Primarys.Length != 1) throw new Exception(DbContextStrings.EntityType_PrimaryKeyIsNotOne(EntityType.Name)); - if (tb.Primarys[0].CsType.NullableTypeOrThis() != typeof(TKey).NullableTypeOrThis()) throw new Exception(DbContextStrings.EntityType_PrimaryKeyError(EntityType.Name, typeof(TKey).FullName)); + if (tb.Primarys.Length != 1) throw new Exception(DbContextErrorStrings.EntityType_PrimaryKeyIsNotOne(EntityType.Name)); + if (tb.Primarys[0].CsType.NullableTypeOrThis() != typeof(TKey).NullableTypeOrThis()) throw new Exception(DbContextErrorStrings.EntityType_PrimaryKeyError(EntityType.Name, typeof(TKey).FullName)); var obj = tb.Type.CreateInstanceGetDefaultValue(); _db.OrmOriginal.SetEntityValueWithPropertyName(tb.Type, obj, tb.Primarys[0].CsName, id); var ret = obj as TEntity; - if (ret == null) throw new Exception(DbContextStrings.EntityType_CannotConvert(EntityType.Name, typeof(TEntity).Name)); + if (ret == null) throw new Exception(DbContextErrorStrings.EntityType_CannotConvert(EntityType.Name, typeof(TEntity).Name)); return ret; } diff --git a/FreeSql.DbContext/UnitOfWork/UnitOfWork.cs b/FreeSql.DbContext/UnitOfWork/UnitOfWork.cs index 88057afe0..d75c8d04e 100644 --- a/FreeSql.DbContext/UnitOfWork/UnitOfWork.cs +++ b/FreeSql.DbContext/UnitOfWork/UnitOfWork.cs @@ -55,7 +55,7 @@ namespace FreeSql public void Close() { if (_tran != null) - throw new Exception(DbContextStrings.TransactionHasBeenStarted); + throw new Exception(DbContextErrorStrings.TransactionHasBeenStarted); Enable = false; } diff --git a/FreeSql.DbContext/UnitOfWork/UnitOfWorkManager.cs b/FreeSql.DbContext/UnitOfWork/UnitOfWorkManager.cs index dd5a16aa9..258b537f3 100644 --- a/FreeSql.DbContext/UnitOfWork/UnitOfWorkManager.cs +++ b/FreeSql.DbContext/UnitOfWork/UnitOfWorkManager.cs @@ -22,7 +22,7 @@ namespace FreeSql public UnitOfWorkManager(IFreeSql fsql) { - if (fsql == null) throw new ArgumentNullException(DbContextStrings.UnitOfWorkManager_Construction_CannotBeNull(nameof(UnitOfWorkManager), nameof(fsql))); + if (fsql == null) throw new ArgumentNullException(DbContextErrorStrings.UnitOfWorkManager_Construction_CannotBeNull(nameof(UnitOfWorkManager), nameof(fsql))); _ormScoped = DbContextScopedFreeSql.Create(fsql, null, () => this.Current); } @@ -93,7 +93,7 @@ namespace FreeSql { case Propagation.Required: return FindedUowCreateVirtual() ?? CreateUow(isolationLevel); case Propagation.Supports: return FindedUowCreateVirtual() ?? CreateUowNothing(_allUows.LastOrDefault()?.IsNotSupported ?? false); - case Propagation.Mandatory: return FindedUowCreateVirtual() ?? throw new Exception(DbContextStrings.Propagation_Mandatory); + case Propagation.Mandatory: return FindedUowCreateVirtual() ?? throw new Exception(DbContextErrorStrings.Propagation_Mandatory); case Propagation.NotSupported: return CreateUowNothing(true); case Propagation.Never: var isNotSupported = _allUows.LastOrDefault()?.IsNotSupported ?? false; @@ -101,7 +101,7 @@ namespace FreeSql { for (var a = _rawUows.Count - 1; a >= 0; a--) if (_rawUows[a].Uow.GetOrBeginTransaction(false) != null) - throw new Exception(DbContextStrings.Propagation_Never); + throw new Exception(DbContextErrorStrings.Propagation_Never); } return CreateUowNothing(isNotSupported); case Propagation.Nested: return CreateUow(isolationLevel); diff --git a/FreeSql/DataAnnotations/TableAttribute.cs b/FreeSql/DataAnnotations/TableAttribute.cs index 683e48dcd..ab7882f55 100644 --- a/FreeSql/DataAnnotations/TableAttribute.cs +++ b/FreeSql/DataAnnotations/TableAttribute.cs @@ -47,14 +47,14 @@ namespace FreeSql.DataAnnotations { var atm = Regex.Match(AsTable, @"([\w_\d]+)\s*=\s*(\d\d\d\d)\s*\-\s*(\d\d?)\s*\-\s*(\d\d?)\s*( [\d:]+)?\(([\d,]+)\s*(year|month|day|hour)\)", RegexOptions.IgnoreCase); if (atm.Success == false) - throw new Exception(CoreStrings.AsTable_PropertyName_FormatError(AsTable)); + throw new Exception(CoreErrorStrings.AsTable_PropertyName_FormatError(AsTable)); tb.AsTableColumn = tb.Columns.TryGetValue(atm.Groups[1].Value, out var trycol) ? trycol : - tb.ColumnsByCs.TryGetValue(atm.Groups[1].Value, out trycol) ? trycol : throw new Exception(CoreStrings.NotFound_Table_Property_AsTable(atm.Groups[1].Value)); + tb.ColumnsByCs.TryGetValue(atm.Groups[1].Value, out trycol) ? trycol : throw new Exception(CoreErrorStrings.NotFound_Table_Property_AsTable(atm.Groups[1].Value)); if (tb.AsTableColumn.Attribute.MapType.NullableTypeOrThis() != typeof(DateTime)) { tb.AsTableColumn = null; - throw new Exception(CoreStrings.AsTable_PropertyName_NotDateTime(atm.Groups[1].Value)); + throw new Exception(CoreErrorStrings.AsTable_PropertyName_NotDateTime(atm.Groups[1].Value)); } var beginTime = $"{atm.Groups[2].Value}-{atm.Groups[3].Value}-{atm.Groups[4].Value}"; var atm5 = atm.Groups[5].Value; @@ -77,7 +77,7 @@ namespace FreeSql.DataAnnotations case "day": return dt.AddDays(atm6); case "hour": return dt.AddHours(atm6); } - throw new NotImplementedException(CoreStrings.Functions_AsTable_NotImplemented(AsTable)); + throw new NotImplementedException(CoreErrorStrings.Functions_AsTable_NotImplemented(AsTable)); }); } } @@ -118,13 +118,13 @@ namespace FreeSql.DataAnnotations public DateTimeAsTableImpl(string tableName, DateTime beginTime, Func nextTimeFunc) { - if (nextTimeFunc == null) throw new ArgumentException(CoreStrings.Cannot_Be_NULL_Name("nextTimeFunc")); + if (nextTimeFunc == null) throw new ArgumentException(CoreErrorStrings.Cannot_Be_NULL_Name("nextTimeFunc")); //beginTime = beginTime.Date; //日期部分作为开始 _beginTime = beginTime; _nextTimeFunc = nextTimeFunc; _tableName = tableName; _tableNameFormat = _regTableNameFormat.Match(tableName); - if (string.IsNullOrEmpty(_tableNameFormat.Groups[1].Value)) throw new ArgumentException(CoreStrings.TableName_Format_Error("yyyyMMdd")); + if (string.IsNullOrEmpty(_tableNameFormat.Groups[1].Value)) throw new ArgumentException(CoreErrorStrings.TableName_Format_Error("yyyyMMdd")); ExpandTable(beginTime, DateTime.Now); } @@ -139,7 +139,7 @@ namespace FreeSql.DataAnnotations { var dtstr = beginTime.ToString(_tableNameFormat.Groups[1].Value); var name = _tableName.Replace(_tableNameFormat.Groups[0].Value, dtstr); - if (_allTables.Contains(name)) throw new ArgumentException(CoreStrings.Generated_Same_SubTable(_tableName)); + if (_allTables.Contains(name)) throw new ArgumentException(CoreErrorStrings.Generated_Same_SubTable(_tableName)); _allTables.Insert(0, name); _allTablesTime.Insert(0, beginTime); _lastTime = _nextTimeFunc(beginTime, index++); @@ -160,26 +160,26 @@ namespace FreeSql.DataAnnotations } DateTime ParseColumnValue(object columnValue) { - if (columnValue == null) throw new Exception(CoreStrings.SubTableFieldValue_IsNotNull); + if (columnValue == null) throw new Exception(CoreErrorStrings.SubTableFieldValue_IsNotNull); DateTime dt; if (columnValue is DateTime || columnValue is DateTime?) dt = (DateTime)columnValue; else if (columnValue is string) { - if (DateTime.TryParse(string.Concat(columnValue), out dt) == false) throw new Exception(CoreStrings.SubTableFieldValue_NotConvertDateTime(columnValue)); + if (DateTime.TryParse(string.Concat(columnValue), out dt) == false) throw new Exception(CoreErrorStrings.SubTableFieldValue_NotConvertDateTime(columnValue)); } else if (columnValue is int || columnValue is long) { dt = new DateTime(1970, 1, 1).AddSeconds((double)columnValue); } - else throw new Exception(CoreStrings.SubTableFieldValue_NotConvertDateTime(columnValue)); + else throw new Exception(CoreErrorStrings.SubTableFieldValue_NotConvertDateTime(columnValue)); return dt; } public string GetTableNameByColumnValue(object columnValue, bool autoExpand = false) { var dt = ParseColumnValue(columnValue); - if (dt < _beginTime) throw new Exception(CoreStrings.SubTableFieldValue_CannotLessThen(dt.ToString("yyyy-MM-dd HH:mm:ss"), _beginTime.ToString("yyyy-MM-dd HH:mm:ss"))); + if (dt < _beginTime) throw new Exception(CoreErrorStrings.SubTableFieldValue_CannotLessThen(dt.ToString("yyyy-MM-dd HH:mm:ss"), _beginTime.ToString("yyyy-MM-dd HH:mm:ss"))); if (dt >= _lastTime && autoExpand) { // 扩容分表 @@ -192,7 +192,7 @@ namespace FreeSql.DataAnnotations if (dt >= _allTablesTime[a]) return _allTables[a]; } - throw new Exception(CoreStrings.SubTableFieldValue_NotMatchTable(dt.ToString("yyyy-MM-dd HH:mm:ss"))); + throw new Exception(CoreErrorStrings.SubTableFieldValue_NotMatchTable(dt.ToString("yyyy-MM-dd HH:mm:ss"))); } public string[] GetTableNamesByColumnValueRange(object columnValue1, object columnValue2) { @@ -312,7 +312,7 @@ namespace FreeSql.DataAnnotations { var val1 = LocalGetParamValue(m.Groups[1].Value); var val2 = LocalGetParamValue(m.Groups[2].Value); - if (val1 == null || val2 == null) throw new Exception(CoreStrings.Failed_SubTable_FieldValue(sqlWhere)); + if (val1 == null || val2 == null) throw new Exception(CoreErrorStrings.Failed_SubTable_FieldValue(sqlWhere)); return new IAsTableTableNameRangeResult(GetTableNamesByColumnValueRange(val1, val2), ParseColumnValue(val1), ParseColumnValue(val2)); } m = regs[8].Match(newSqlWhere); @@ -320,14 +320,14 @@ namespace FreeSql.DataAnnotations { var val1 = LocalGetParamValue(m.Groups[2].Value); var val2 = LocalGetParamValue(m.Groups[4].Value); - if (val1 == null || val2 == null) throw new Exception(CoreStrings.Failed_SubTable_FieldValue(sqlWhere)); + if (val1 == null || val2 == null) throw new Exception(CoreErrorStrings.Failed_SubTable_FieldValue(sqlWhere)); return LocalGetTables(m.Groups[1].Value, m.Groups[3].Value, ParseColumnValue(val1), ParseColumnValue(val2)); } m = regs[10].Match(newSqlWhere); if (m.Success) { var val1 = LocalGetParamValue(m.Groups[2].Value); - if (val1 == null) throw new Exception(CoreStrings.Failed_SubTable_FieldValue(sqlWhere)); + if (val1 == null) throw new Exception(CoreErrorStrings.Failed_SubTable_FieldValue(sqlWhere)); return LocalGetTables2(m.Groups[1].Value, ParseColumnValue(val1)); } return new IAsTableTableNameRangeResult(_GetDefaultAllTables?.Invoke(AllTables) ?? AllTables, _beginTime, _lastTime); diff --git a/FreeSql/DataAnnotations/TableFluent.cs b/FreeSql/DataAnnotations/TableFluent.cs index 063e82afc..aff9f944b 100644 --- a/FreeSql/DataAnnotations/TableFluent.cs +++ b/FreeSql/DataAnnotations/TableFluent.cs @@ -60,7 +60,7 @@ namespace FreeSql.DataAnnotations public ColumnFluent Property(string proto) { - if (_properties.TryGetValue(proto, out var tryProto) == false) throw new KeyNotFoundException(CoreStrings.NotFound_PropertyName(proto)); + if (_properties.TryGetValue(proto, out var tryProto) == false) throw new KeyNotFoundException(CoreErrorStrings.NotFound_PropertyName(proto)); var col = _table._columns.GetOrAdd(tryProto.Name, name => new ColumnAttribute { }); return new ColumnFluent(col, tryProto, _entityType); } @@ -76,7 +76,7 @@ namespace FreeSql.DataAnnotations public TableFluent Navigate(string proto, string bind, string tempPrimary) => NavigateInternal(proto, bind, tempPrimary, null); TableFluent NavigateInternal(string proto, string bind, string tempPrimary, Type manyToMany) { - if (_properties.TryGetValue(proto, out var tryProto) == false) throw new KeyNotFoundException(CoreStrings.NotFound_Property(proto)); + if (_properties.TryGetValue(proto, out var tryProto) == false) throw new KeyNotFoundException(CoreErrorStrings.NotFound_Property(proto)); var nav = new NavigateAttribute { Bind = bind, TempPrimary = tempPrimary, ManyToMany = manyToMany }; _table._navigates.AddOrUpdate(tryProto.Name, nav, (name, old) => nav); return this; @@ -156,12 +156,12 @@ namespace FreeSql.DataAnnotations var exp = column?.Body; if (exp?.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand; var proto = (exp as MemberExpression)?.Member; - if (proto == null) throw new FormatException(CoreStrings.Bad_Expression_Format(column)); + if (proto == null) throw new FormatException(CoreErrorStrings.Bad_Expression_Format(column)); return Property(proto.Name); } public ColumnFluent Property(string proto) { - if (_properties.TryGetValue(proto, out var tryProto) == false) throw new KeyNotFoundException(CoreStrings.NotFound_PropertyName(proto)); + if (_properties.TryGetValue(proto, out var tryProto) == false) throw new KeyNotFoundException(CoreErrorStrings.NotFound_PropertyName(proto)); var col = _table._columns.GetOrAdd(tryProto.Name, name => new ColumnAttribute { }); return new ColumnFluent(col, tryProto, typeof(T)); } @@ -181,14 +181,14 @@ namespace FreeSql.DataAnnotations var exp = proto?.Body; if (exp.NodeType == ExpressionType.Convert) exp = (exp as UnaryExpression)?.Operand; var member = (exp as MemberExpression)?.Member; - if (member == null) throw new FormatException(CoreStrings.Bad_Expression_Format(proto)); + if (member == null) throw new FormatException(CoreErrorStrings.Bad_Expression_Format(proto)); return NavigateInternal(member.Name, bind, tempPrimary, manyToMany); } public TableFluent Navigate(string proto, string bind, Type manyToMany = null) => NavigateInternal(proto, bind, null, manyToMany); public TableFluent Navigate(string proto, string bind, string tempPrimary) => NavigateInternal(proto, bind, tempPrimary, null); TableFluent NavigateInternal(string proto, string bind, string tempPrimary, Type manyToMany) { - if (_properties.TryGetValue(proto, out var tryProto) == false) throw new KeyNotFoundException(CoreStrings.NotFound_PropertyName(proto)); + if (_properties.TryGetValue(proto, out var tryProto) == false) throw new KeyNotFoundException(CoreErrorStrings.NotFound_PropertyName(proto)); var nav = new NavigateAttribute { Bind = bind, TempPrimary = tempPrimary, ManyToMany = manyToMany }; _table._navigates.AddOrUpdate(tryProto.Name, nav, (name, old) => nav); return this; diff --git a/FreeSql/Extensions/AdoNetExtensions.cs b/FreeSql/Extensions/AdoNetExtensions.cs index d38f3522c..28908754d 100644 --- a/FreeSql/Extensions/AdoNetExtensions.cs +++ b/FreeSql/Extensions/AdoNetExtensions.cs @@ -13,8 +13,8 @@ namespace FreeSql static object _dicCurdLock = new object(); static IFreeSql GetCrud(IDbConnection dbconn) { - if (dbconn == null) throw new ArgumentNullException($"{nameof(dbconn)} {CoreStrings.Cannot_Be_NULL}"); - if (dbconn.ConnectionString == null) throw new ArgumentNullException($"{nameof(dbconn)}.ConnectionString {CoreStrings.Cannot_Be_NULL}"); + if (dbconn == null) throw new ArgumentNullException($"{nameof(dbconn)} {CoreErrorStrings.Cannot_Be_NULL}"); + if (dbconn.ConnectionString == null) throw new ArgumentNullException($"{nameof(dbconn)}.ConnectionString {CoreErrorStrings.Cannot_Be_NULL}"); Type dbconType = dbconn.GetType(); var connType = dbconType.UnderlyingSystemType; if (_dicCurd.TryGetValue(dbconn.ConnectionString, out var fsql)) return fsql; @@ -25,49 +25,49 @@ namespace FreeSql case "MySqlConnection": providerType = Type.GetType("FreeSql.MySql.MySqlProvider`1,FreeSql.Provider.MySql")?.MakeGenericType(connType); if (providerType == null) providerType = Type.GetType("FreeSql.MySql.MySqlProvider`1,FreeSql.Provider.MySqlConnector")?.MakeGenericType(connType); - if (providerType == null) throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package("MySql")); + if (providerType == null) throw new Exception(CoreErrorStrings.Missing_FreeSqlProvider_Package("MySql")); break; case "SqlConnection": providerType = Type.GetType("FreeSql.SqlServer.SqlServerProvider`1,FreeSql.Provider.SqlServer")?.MakeGenericType(connType); if (providerType == null) providerType = Type.GetType("FreeSql.SqlServer.SqlServerProvider`1,FreeSql.Provider.SqlServerForSystem")?.MakeGenericType(connType); - if (providerType == null) throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package("SqlServer/SqlServerForSystem")); + if (providerType == null) throw new Exception(CoreErrorStrings.Missing_FreeSqlProvider_Package("SqlServer/SqlServerForSystem")); break; case "NpgsqlConnection": providerType = Type.GetType("FreeSql.PostgreSQL.PostgreSQLProvider`1,FreeSql.Provider.PostgreSQL")?.MakeGenericType(connType); - if (providerType == null) throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package("PostgreSQL")); + if (providerType == null) throw new Exception(CoreErrorStrings.Missing_FreeSqlProvider_Package("PostgreSQL")); break; case "OracleConnection": providerType = Type.GetType("FreeSql.Oracle.OracleProvider`1,FreeSql.Provider.Oracle")?.MakeGenericType(connType); - if (providerType == null) throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package("Oracle")); + if (providerType == null) throw new Exception(CoreErrorStrings.Missing_FreeSqlProvider_Package("Oracle")); break; case "SQLiteConnection": case "SqliteConnection": providerType = Type.GetType("FreeSql.Sqlite.SqliteProvider`1,FreeSql.Provider.Sqlite")?.MakeGenericType(connType); if (providerType == null) providerType = Type.GetType("FreeSql.Sqlite.SqliteProvider`1,FreeSql.Provider.SqliteCore")?.MakeGenericType(connType); //Microsoft.Data.Sqlite.Core.dll - if (providerType == null) throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package("Sqlite/SqliteCore")); + if (providerType == null) throw new Exception(CoreErrorStrings.Missing_FreeSqlProvider_Package("Sqlite/SqliteCore")); break; case "DmConnection": providerType = Type.GetType("FreeSql.Dameng.DamengProvider`1,FreeSql.Provider.Dameng")?.MakeGenericType(connType); - if (providerType == null) throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package("Dameng")); + if (providerType == null) throw new Exception(CoreErrorStrings.Missing_FreeSqlProvider_Package("Dameng")); break; case "OscarConnection": providerType = Type.GetType("FreeSql.ShenTong.ShenTongProvider`1,FreeSql.Provider.ShenTong")?.MakeGenericType(connType); - if (providerType == null) throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package("ShenTong")); + if (providerType == null) throw new Exception(CoreErrorStrings.Missing_FreeSqlProvider_Package("ShenTong")); break; case "KdbndpConnection": providerType = Type.GetType("FreeSql.KingbaseES.KingbaseESProvider`1,FreeSql.Provider.KingbaseES")?.MakeGenericType(connType); - if (providerType == null) throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package("KingbaseES")); + if (providerType == null) throw new Exception(CoreErrorStrings.Missing_FreeSqlProvider_Package("KingbaseES")); break; case "FbConnection": providerType = Type.GetType("FreeSql.Firebird.FirebirdProvider`1,FreeSql.Provider.Firebird")?.MakeGenericType(connType); - if (providerType == null) throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package("Firebird")); + if (providerType == null) throw new Exception(CoreErrorStrings.Missing_FreeSqlProvider_Package("Firebird")); break; case "ClickHouseConnection": providerType = Type.GetType("FreeSql.ClickHouse.ClickHouseProvider`1,FreeSql.Provider.ClickHouse")?.MakeGenericType(connType); - if (providerType == null) throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package("ClickHouse")); + if (providerType == null) throw new Exception(CoreErrorStrings.Missing_FreeSqlProvider_Package("ClickHouse")); break; default: - throw new Exception(CoreStrings.Not_Implemented); + throw new Exception(CoreErrorStrings.Not_Implemented); } lock (_dicCurdLock) { @@ -79,7 +79,7 @@ namespace FreeSql } static IFreeSql GetCrud(IDbTransaction dbtran) { - if (dbtran == null) throw new ArgumentNullException($"{nameof(dbtran)} {CoreStrings.Cannot_Be_NULL}"); + if (dbtran == null) throw new ArgumentNullException($"{nameof(dbtran)} {CoreErrorStrings.Cannot_Be_NULL}"); return GetCrud(dbtran.Connection); } diff --git a/FreeSql/Extensions/FreeSqlGlobalExpressionCallExtensions.cs b/FreeSql/Extensions/FreeSqlGlobalExpressionCallExtensions.cs index 6ce95002e..e9ac61184 100644 --- a/FreeSql/Extensions/FreeSqlGlobalExpressionCallExtensions.cs +++ b/FreeSql/Extensions/FreeSqlGlobalExpressionCallExtensions.cs @@ -573,7 +573,7 @@ namespace FreeSql if (expContext.ParsedContent["delimiter"] == "','") expContext.Result = $"wm_concat_text({expContext.ParsedContent["column"]})"; else - throw new NotImplementedException(CoreStrings.GBase_NotSupport_OtherThanCommas); + throw new NotImplementedException(CoreErrorStrings.GBase_NotSupport_OtherThanCommas); //expContext.Result = $"replace(wm_concat_text({expContext.ParsedContent["column"]}), ',', {expContext.ParsedContent["delimiter"]})"; return null; } diff --git a/FreeSql/Extensions/FreeSqlGlobalExtensions.cs b/FreeSql/Extensions/FreeSqlGlobalExtensions.cs index 22c0973ab..77421e705 100644 --- a/FreeSql/Extensions/FreeSqlGlobalExtensions.cs +++ b/FreeSql/Extensions/FreeSqlGlobalExtensions.cs @@ -193,7 +193,7 @@ public static partial class FreeSqlGlobalExtensions .OrderBy(a => a.IsPublic ? 0 : 1) .FirstOrDefault(); })); - if (ret.Value == null && isThrow) throw new ArgumentException(CoreStrings.Type_Cannot_Access_Constructor(that.FullName)); + if (ret.Value == null && isThrow) throw new ArgumentException(CoreErrorStrings.Type_Cannot_Access_Constructor(that.FullName)); return ret.Value; } @@ -416,7 +416,7 @@ public static partial class FreeSqlGlobalExtensions var t1sel = orm.Select().AsType(entityType) as Select1Provider; var t1expFul = t1sel.ConvertStringPropertyToExpression(property, true); var t1exp = props.Length == 1 ? t1expFul : t1sel.ConvertStringPropertyToExpression(props[0], true); - if (t1expFul == null) throw new ArgumentException(CoreStrings.Cannot_Resolve_ExpressionTree(nameof(property))); + if (t1expFul == null) throw new ArgumentException(CoreErrorStrings.Cannot_Resolve_ExpressionTree(nameof(property))); var propElementType = t1expFul.Type.GetGenericArguments().FirstOrDefault() ?? t1expFul.Type.GetElementType(); if (propElementType != null) //IncludeMany { @@ -432,7 +432,7 @@ public static partial class FreeSqlGlobalExtensions return list; } var tbtr = t1tb.GetTableRef(props[0], true, true); - if (tbtr == null) throw new ArgumentException(CoreStrings.ParameterError_NotValid_Navigation(nameof(property))); + if (tbtr == null) throw new ArgumentException(CoreErrorStrings.ParameterError_NotValid_Navigation(nameof(property))); var reftb = orm.CodeFirst.GetTableByEntity(t1exp.Type); var refsel = orm.Select().AsType(t1exp.Type) as Select1Provider; if (props.Length > 1) @@ -479,14 +479,14 @@ public static partial class FreeSqlGlobalExtensions } var sel = orm.Select().AsType(entityType) as Select1Provider; var exp = sel.ConvertStringPropertyToExpression(property, true); - if (exp == null) throw new ArgumentException(CoreStrings.Cannot_Resolve_ExpressionTree(nameof(property))); + if (exp == null) throw new ArgumentException(CoreErrorStrings.Cannot_Resolve_ExpressionTree(nameof(property))); var memExp = exp as MemberExpression; - if (memExp == null) throw new ArgumentException($"{CoreStrings.Cannot_Resolve_ExpressionTree(nameof(property))}2"); + if (memExp == null) throw new ArgumentException($"{CoreErrorStrings.Cannot_Resolve_ExpressionTree(nameof(property))}2"); var parTb = orm.CodeFirst.GetTableByEntity(memExp.Expression.Type); - if (parTb == null) throw new ArgumentException($"{CoreStrings.Cannot_Resolve_ExpressionTree(nameof(property))}3"); + if (parTb == null) throw new ArgumentException($"{CoreErrorStrings.Cannot_Resolve_ExpressionTree(nameof(property))}3"); var propElementType = exp.Type.GetGenericArguments().FirstOrDefault() ?? exp.Type.GetElementType(); var reftb = orm.CodeFirst.GetTableByEntity(propElementType); - if (reftb == null) throw new ArgumentException(CoreStrings.ParameterError_NotValid_Collection(nameof(property))); + if (reftb == null) throw new ArgumentException(CoreErrorStrings.ParameterError_NotValid_Collection(nameof(property))); if (string.IsNullOrWhiteSpace(where) == false) { @@ -499,12 +499,12 @@ public static partial class FreeSqlGlobalExtensions for (var a = 0; a < whereSplit.Length; a++) { var keyval = whereSplit[a].Split('=').Select(x => x.Trim()).Where(x => string.IsNullOrWhiteSpace(x) == false).ToArray(); - if (keyval.Length != 2) throw new ArgumentException(CoreStrings.ParameterError_NotValid_UseCommas(nameof(where))); + if (keyval.Length != 2) throw new ArgumentException(CoreErrorStrings.ParameterError_NotValid_UseCommas(nameof(where))); if (reftb.ColumnsByCs.TryGetValue(keyval[0], out var keycol) == false) - throw new ArgumentException(CoreStrings.ParameterError_NotValid_PropertyName(nameof(where), keyval[0], reftb.Type.DisplayCsharp())); + throw new ArgumentException(CoreErrorStrings.ParameterError_NotValid_PropertyName(nameof(where), keyval[0], reftb.Type.DisplayCsharp())); if (parTb.ColumnsByCs.TryGetValue(keyval[1], out var valcol) == false) - throw new ArgumentException(CoreStrings.ParameterError_NotValid_PropertyName(nameof(where), keyval[1], parTb.Type.DisplayCsharp())); + throw new ArgumentException(CoreErrorStrings.ParameterError_NotValid_PropertyName(nameof(where), keyval[1], parTb.Type.DisplayCsharp())); var tmpExp = Expression.Equal( Expression.Convert(Expression.MakeMemberAccess(refparamExp, reftb.Properties[keyval[0]]), valcol.CsType), @@ -530,7 +530,7 @@ public static partial class FreeSqlGlobalExtensions select.Split(',').Select(x => x.Trim()).Where(x => string.IsNullOrWhiteSpace(x) == false).Select(a => { if (reftb.ColumnsByCs.TryGetValue(a, out var col) == false) - throw new ArgumentException(CoreStrings.ParameterError_NotValid_PropertyName(nameof(select), a, reftb.Type.DisplayCsharp())); + throw new ArgumentException(CoreErrorStrings.ParameterError_NotValid_PropertyName(nameof(select), a, reftb.Type.DisplayCsharp())); return Expression.Bind(reftb.Properties[col.CsName], Expression.MakeMemberAccess(refparamExp, reftb.Properties[col.CsName])); }).ToArray()); @@ -555,7 +555,7 @@ public static partial class FreeSqlGlobalExtensions } var navigateSelector = Expression.Lambda(funcType, exp, sel._tables[0].Parameter); var incMethod = sel.GetType().GetMethod("IncludeMany"); - if (incMethod == null) throw new Exception(CoreStrings.RunTimeError_Reflection_IncludeMany); + if (incMethod == null) throw new Exception(CoreErrorStrings.RunTimeError_Reflection_IncludeMany); incMethod.MakeGenericMethod(reftb.Type).Invoke(sel, new object[] { navigateSelector, newthen }); return sel; } @@ -639,7 +639,7 @@ public static partial class FreeSqlGlobalExtensions var navs = tb.GetAllTableRef().Where(a => a.Value.Exception == null).Select(a => a.Value) .Where(a => a.RefType == FreeSql.Internal.Model.TableRefType.OneToMany && a.RefEntityType == tb.Type).ToArray(); - if (navs.Length != 1) throw new ArgumentException(CoreStrings.Entity_NotParentChild_Relationship(tb.Type.FullName)); + if (navs.Length != 1) throw new ArgumentException(CoreErrorStrings.Entity_NotParentChild_Relationship(tb.Type.FullName)); var tbref = navs[0]; var cteName = "as_tree_cte"; @@ -693,7 +693,7 @@ public static partial class FreeSqlGlobalExtensions } if (int.TryParse((mysqlVersion ?? "").Split('.')[0], out var mysqlVersionFirst) && mysqlVersionFirst < 8) { - if (tbref.Columns.Count > 1) throw new ArgumentException(CoreStrings.Entity_MySQL_VersionsBelow8_NotSupport_Multiple_PrimaryKeys(tb.Type.FullName)); + if (tbref.Columns.Count > 1) throw new ArgumentException(CoreErrorStrings.Entity_MySQL_VersionsBelow8_NotSupport_Multiple_PrimaryKeys(tb.Type.FullName)); var mysql56Sql = ""; if (up == false) { @@ -913,7 +913,7 @@ SELECT "); case DataType.Firebird: return that.OrderBy("rand()"); } - throw new NotSupportedException($"{CoreStrings.Not_Support_OrderByRandom(s0p._orm.Ado.DataType)}"); + throw new NotSupportedException($"{CoreErrorStrings.Not_Support_OrderByRandom(s0p._orm.Ado.DataType)}"); } #endregion @@ -1083,9 +1083,9 @@ SELECT "); public long ExecuteIdentity(string identityColumn) { if (string.IsNullOrEmpty(identityColumn)) - throw new Exception(CoreStrings.Cannot_Be_NULL_Name(nameof(identityColumn))); + throw new Exception(CoreErrorStrings.Cannot_Be_NULL_Name(nameof(identityColumn))); if (_insertProvider._table.ColumnsByCs.TryGetValue(identityColumn, out var col) == false) - throw new Exception(CoreStrings.GetPrimarys_ParameterError_IsNotDictKey(identityColumn).Replace(nameof(ExecuteIdentity), "")); + throw new Exception(CoreErrorStrings.GetPrimarys_ParameterError_IsNotDictKey(identityColumn).Replace(nameof(ExecuteIdentity), "")); col.Attribute.IsIdentity = true; return _insertProvider.ExecuteIdentity(); } @@ -1098,9 +1098,9 @@ SELECT "); public Task ExecuteIdentityAsync(string identityColumn, CancellationToken cancellationToken = default) { if (string.IsNullOrEmpty(identityColumn)) - throw new Exception(CoreStrings.Cannot_Be_NULL_Name(nameof(identityColumn))); + throw new Exception(CoreErrorStrings.Cannot_Be_NULL_Name(nameof(identityColumn))); if (_insertProvider._table.ColumnsByCs.TryGetValue(identityColumn, out var col) == false) - throw new Exception(CoreStrings.GetPrimarys_ParameterError_IsNotDictKey(identityColumn).Replace(nameof(ExecuteIdentity), "")); + throw new Exception(CoreErrorStrings.GetPrimarys_ParameterError_IsNotDictKey(identityColumn).Replace(nameof(ExecuteIdentity), "")); col.Attribute.IsIdentity = true; return _insertProvider.ExecuteIdentityAsync(cancellationToken); } @@ -1163,7 +1163,7 @@ SELECT "); foreach (var primary in primarys) { if (table.ColumnsByCs.TryGetValue(string.Concat(primary), out var col)) pks.Add(col); - else throw new Exception(CoreStrings.GetPrimarys_ParameterError_IsNotDictKey(primary)); + else throw new Exception(CoreErrorStrings.GetPrimarys_ParameterError_IsNotDictKey(primary)); } return pks.ToArray(); } @@ -1182,17 +1182,17 @@ SELECT "); col.Attribute.IsIdentity = true; } } - else throw new Exception(CoreStrings.GetPrimarys_ParameterError_IsNotDictKey(primary)); + else throw new Exception(CoreErrorStrings.GetPrimarys_ParameterError_IsNotDictKey(primary)); } table.Primarys = table.Columns.Where(a => a.Value.Attribute.IsPrimary).Select(a => a.Value).ToArray(); } public UpdateDictImpl IsVersion(string version) { if (_updateProvider._table.ColumnsByCs.TryGetValue(version, out var col) == false) - throw new Exception(CoreStrings.GetPrimarys_ParameterError_IsNotDictKey(version).Replace(nameof(GetPrimarys), "")); + throw new Exception(CoreErrorStrings.GetPrimarys_ParameterError_IsNotDictKey(version).Replace(nameof(GetPrimarys), "")); //if (col.Attribute.MapType.IsNullableType() || // col.Attribute.MapType.IsNumberType() == false && !new[] { typeof(byte[]), typeof(string) }.Contains(col.Attribute.MapType)) - // throw new Exception(CoreStrings.Properties_AsRowLock_Must_Numeric_Byte(col.CsName)); + // throw new Exception(CoreErrorStrings.Properties_AsRowLock_Must_Numeric_Byte(col.CsName)); col.Attribute.IsVersion = true; _updateProvider._table.VersionColumn = col; _updateProvider._versionColumn = col; diff --git a/FreeSql/FreeSql.csproj b/FreeSql/FreeSql.csproj index bc6b6a176..152ebeec5 100644 --- a/FreeSql/FreeSql.csproj +++ b/FreeSql/FreeSql.csproj @@ -25,12 +25,6 @@ - - - - - - @@ -42,11 +36,6 @@ True True - - True - True - CoreStrings.Designer.tt - @@ -58,13 +47,6 @@ TextTemplatingFileGenerator Select1Provider2`16.cs - - TextTemplatingFileGenerator - CoreStrings.Designer.cs - - - FreeSql - diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index c2fac3dd8..949513256 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -5092,828 +5092,811 @@ 用于解决多实例情况下的静态集合缓存问题 - - - - String resources used in FreeSql exceptions, etc. - - - These strings are exposed publicly for use by database providers and extensions. - It is unusual for application code to need these strings. - - - - - - 重写当前线程的 CurrentUICulture 属性,对 - 使用此强类型资源类的所有资源查找执行重写。 - - - + [Table(AsTable = "{asTable}")] 特性值格式错误 - + [Table(AsTable = xx)] 设置的属性名 {atmGroupsValue} 不是 DateTime 类型 - + {name}: Failed to get resource {statistics} - + {name}: An exception needs to be thrown - + 错误的表达式格式 {column} - + Chunk 功能之前不可使用 Select - + 安全起见,请务必在事务开启之后,再使用 ForUpdate - + 不能为 null - + {name} 不能为 null - + 无法匹配 {property} - + {property} 无法解析为表达式树 - + 参数 masterConnectionString 不可为空,请检查 UseConnectionString - + 提交 - + 连接失败,准备切换其他可用服务器 - + - 自定义表达式解析错误:类型 {exp3MethodDeclaringType} 需要定义 static ThreadLocal<ExpressionCallContext> 字段、字段、字段(重要三次提醒) + 自定义表达式解析错误:类型 {exp3MethodDeclaringType} 需要定义 static ThreadLocal&lt;ExpressionCallContext&gt; 字段、字段、字段(重要三次提醒) - + Custom { 反射信息 }不能为空,格式:{ 静态方法名 }{ 空格 }{ 反射信息 } - + Custom { 静态方法名 }不能为空,格式:{ 静态方法名 }{ 空格 }{ 反射信息 } - + Custom 对应的{{ 静态方法名 }}:{fiValueCustomArray} 未设置 [DynamicFilterCustomAttribute] 特性 - + Custom 要求 Field 应该空格分割,并且长度为 2,格式:{ 静态方法名 }{ 空格 }{ 反射信息 } - + 操作的数据类型({dataDisplayCsharp}) 与 AsType({tableTypeDisplayCsharp}) 不一致,请检查。 - + DateRange 要求 Value 应该逗号分割,并且长度为 2 - + DateRange 要求 Value[1] 格式必须为:yyyy、yyyy-MM、yyyy-MM-dd、yyyy-MM-dd HH、yyyy、yyyy-MM-dd HH:mm - + 记录可能不存在,或者【行级乐观锁】版本过旧,更新数量{sourceCount},影响的行数{affrows}。 - + SlaveConnectionString 数量与 SlaveWeights 不相同 - + ColumnAttribute.Name {colattrName} 重复存在,请检查(注意:不区分大小写) - + 属性名 {pName} 重复存在,请检查(注意:不区分大小写) - + {function} 功能要求实体类 {tableCsName} 必须有主键 - + {tbTypeFullName} 是父子关系,但是 MySql 8.0 以下版本中不支持组合多主键 - + {tbTypeFullName} 不是父子关系,无法使用该功能 - + 这个特别的子查询不能解析 - + 表达式错误,它的顶级对象不是 ParameterExpression:{exp} - + 表达式错误,它不是连续的 MemberAccess 类型:{exp} - + ExpressionTree 转换类型错误,值({value}),类型({valueTypeFullName}),目标类型({typeFullName}),{exMessage} - + 未能解析分表字段值 {sqlWhere} - + AsTable 未实现的功能 {asTable} - + GBase 暂时不支持逗号以外的分割符 - + tableName:{tableName} 生成了相同的分表名 - + GetPrimarys 传递的参数 "{primary}" 不正确,它不属于字典数据的键名 - + 已经指定了 {first},不能再指定 {second} - + {tb2DbName}.{mp2MemberName} 被忽略,请检查 IsIgnore 设置,确认 get/set 为 public - + Include 参数类型错误 - + Include 参数类型错误,集合属性请使用 IncludeMany - + Include 参数类型错误,表达式类型应该为 MemberAccess - + IncludeMany 类型 {tbTypeDisplayCsharp} 的属性 {collMemMemberName} 不是有效的导航属性,提示:IsIgnore = true 不会成为导航属性 - + - IncludeMany {navigateSelector} 参数错误,Select 只可以使用一个参数的方法,正确格式:.Select(t =>new TNavigate {{}}) + IncludeMany {navigateSelector} 参数错误,Select 只可以使用一个参数的方法,正确格式:.Select(t =&gt;new TNavigate {{}}) - + IncludeMany {navigateSelector} 参数错误,Select lambda参数返回值必须和 {collMemElementType} 类型一致 - + IncludeMany 参数1 类型错误,表达式类型应该为 MemberAccess - + - IncludeMany {navigateSelector} 参数类型错误,正确格式: a.collections.Take(1).Where(c =>c.aid == a.id).Select(a=> new TNavigate{{}}) + IncludeMany {navigateSelector} 参数类型错误,正确格式: a.collections.Take(1).Where(c =&gt;c.aid == a.id).Select(a=&gt; new TNavigate{{}}) - + ISelect.InsertInto() 未选择属性: {displayCsharp} - + ISelect.InsertInto() 类型错误: {displayCsharp} - + InsertOrUpdate 功能执行 merge into 要求实体类 {CsName} 必须有主键 - + - InsertOrUpdate<>的泛型参数 不支持 {typeofT1},请传递您的实体类 + InsertOrUpdate&lt;&gt;的泛型参数 不支持 {typeofT1},请传递您的实体类 - + 【延时加载】功能需要安装 FreeSql.Extensions.LazyLoading.dll,可前往 nuget 下载 - + - 【延时加载】{trytbTypeName} 编译错误:{exMessage}\r\n\r\n{cscode} + 【延时加载】{trytbTypeName} 编译错误:{exMessage} - + 【延时加载】实体类型 {trytbTypeName} 必须声明为 public - + ManyToMany 导航属性 .AsSelect() 暂时不可用于 Sum/Avg/Max/Min/First/ToOne/ToList 方法 - + 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 在 {tbmidCsName} 中没有找到对应的字段,如:{midTypePropsTrytbName}{findtrytbPkCsName}、{midTypePropsTrytbName}_{findtrytbPkCsName} - + 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {tbrefTypeName} 缺少主键标识,[Column(IsPrimary = true)] - + 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {tbrefTypeName} 必须存在对应的 [Navigate(ManyToMany = x)] 集合属性 - + 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,{tbmidCsName}.{trycolCsName} 和 {trytbCsName}.{trytbPrimarysCsName} 类型不一致 - + 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,中间类 {tbmidCsName}.{midTypePropsTrytbName} 错误:{exMessage} - + 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,中间类 {tbmidCsName}.{midTypePropsTrytbName} 导航属性不是【ManyToOne】或【OneToOne】 - + 映射异常:{name} 没有一个属性名相同 - + Ado.MasterPool 值为 null,该操作无法自启用事务,请显式传递【事务对象】解决 - + 缺少 FreeSql 数据库实现包:FreeSql.Provider.{Provider}.dll,可前往 nuget 下载 - + 缺少 FreeSql 数据库实现包:{dll},可前往 nuget 下载;如果存在 {dll} 依然报错(原因是环境问题导致反射不到类型),请在 UseConnectionString/UseConnectionFactory 第三个参数手工传入 typeof({providerType}) - + 导航属性 {trytbTypeName}.{pnvName} 特性 [Navigate] Bind 数目({bindColumnsCount}) 与 外部主键数目({tbrefPrimarysLength}) 不相同 - + - {tb2DbName}.{mp2MemberName} 导航属性集合忘了 .AsSelect() 吗?如果在 ToList(a => a.{mp2MemberName}) 中使用,请移步参考 IncludeMany 文档。 + {tb2DbName}.{mp2MemberName} 导航属性集合忘了 .AsSelect() 吗?如果在 ToList(a =&gt; a.{mp2MemberName}) 中使用,请移步参考 IncludeMany 文档。 - + 【导航属性】{trytbTypeDisplayCsharp}.{pName} 缺少 set 属性 - + 导航属性 {trytbTypeName}.{pnvName} 没有找到对应的字段,如:{pnvName}{findtbrefPkCsName}、{pnvName}_{findtbrefPkCsName}。或者使用 [Navigate] 特性指定关系映射。 - + 导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {trytcTypeName} 缺少主键标识,[Column(IsPrimary = true)] - + 导航属性 {trytbTypeName}.{pnvName} 解析错误,{trytbCsName}.{trycolCsName} 和 {tbrefCsName}.{tbrefPrimarysCsName} 类型不一致 - + 导航属性 {trytbTypeName}.{pnvName} 特性 [Navigate] 解析错误,在 {tbrefTypeName} 未找到属性:{bi} - + {tableTypeDisplayCsharp} 没有定义主键,无法使用 SetSource,请尝试 SetDto 或者 SetSource 指定临时主键 - + 没有定义属性 - + 未实现 - + 未实现函数表达式 {exp} 解析 - + 未实现函数表达式 {exp} 解析,参数 {expArguments} 必须为常量 - + 未实现函数表达式 {exp} 解析,如果正在操作导航属性集合,请使用 .AsSelect().{exp3MethodName}({exp3ArgumentsCount}) - + 未实现 MemberAccess 下的 Constant - + 未实现 {name} - + 不支持 - + {dataType} 不支持 OrderByRandom 随机排序 - + {property} 不是有效的导航属性 - + {dbName} 找不到列 {memberName} - + 找不到 {CsName} 对应的列 - + 找不到属性:{memberName} - + 找不到属性名 {proto} - + Custom 找不到对应的{{ 反射信息 }}:{fiValueCustomArray} - + Custom 找不到对应的{{ 静态方法名 }}:{fiValueCustomArray} - + [Table(AsTable = xx)] 设置的属性名 {atmGroupsValue} 不存在 - + 未指定 UseConnectionString 或者 UseConnectionFactory - + 【{policyName}】ObjectPool.{GetName}() timeout {totalSeconds} seconds, see: https://github.com/dotnetcore/FreeSql/discussions/1081 - + 【{policyName}】ObjectPool.GetAsync() The queue is too long. Policy.AsyncGetCapacity = {asyncGetCapacity} - + 【OneToMany】导航属性 {trytbTypeName}.{pnvName} 在 {tbrefCsName} 中没有找到对应的字段,如:{findtrytb}{findtrytbPkCsName}、{findtrytb}_{findtrytbPkCsName} - + 【OneToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,{trytbCsName}.{trytbPrimarysCsName} 和 {tbrefCsName}.{trycolCsName} 类型不一致 - + 、{refpropName}{findtrytbPkCsName}、{refpropName}_{findtrytbPkCsName}。或者使用 [Navigate] 特性指定关系映射。 - + 参数 field 未指定 - + - {property} 参数错误,它不是集合属性,必须为 IList<T> 或者 ICollection<T> + {property} 参数错误,它不是集合属性,必须为 IList&lt;T&gt; 或者 ICollection&lt;T&gt; - + {property} 参数错误,它不是有效的导航属性 - + {where} 参数错误,{keyval} 不是有效的属性名,在实体类 {reftbTypeDisplayCsharp} 无法找到 - + {property} 参数错误,格式 "TopicId=Id,多组使用逗号连接" - + 解析失败 {callExpMethodName} {message} - + 【{policyName}】The ObjectPool has been disposed, see: https://github.com/dotnetcore/FreeSql/discussions/1079 - + 【{policyName}】状态不可用,等待后台检查程序恢复方可使用。{UnavailableExceptionMessage} - + 属性{trytbVersionColumnCsName} 被标注为行锁(乐观锁)(IsVersion),但其必须为数字类型 或者 byte[] 或者 string,并且不可为 Nullable - + properties 参数不能为空 - + {property} 属性名无法找到 - + Range 要求 Value 应该逗号分割,并且长度为 2 - + 回滚 - + 运行时错误,反射获取 IncludeMany 方法失败 - - - 蛋疼的 Access 插入只能一条一条执行,不支持 values(..),(..) 也不支持 select .. UNION ALL select .. - - - - - BaseEntity.Initialization 初始化错误,获取到 IFreeSql 是 null - - - - - 【{thisName}】Block access and wait for recovery: {exMessage} - - - - - 无法将 IQueryable<{typeofName}> 转换为 ISelect<{typeofName}>,因为他的实现不是 FreeSql.Extensions.Linq.QueryableProvider - - - - - 连接字符串错误 - - - - - 【{thisName}】连接字符串错误,请检查。 - - - - - 连接字符串错误,或者检查项目属性 > 生成 > 目标平台:x86 | x64,或者改用 FreeSql.Provider.SqliteCore 访问 arm 平台 - - - - - 【{thisName}】连接字符串错误,请检查。或者检查项目属性 > 生成 > 目标平台:x86 | x64,或者改用 FreeSql.Provider.SqliteCore 访问 arm 平台 - - - - - FreeSql.Provider.CustomAdapter 无法使用 CreateCommand - - - - - FreeSql.Provider.CustomAdapter 仅支持 UseConnectionFactory 方式构建 IFreeSql - - - - - 达梦 CodeFirst 不支持代码创建 tablespace 与 schemas {tbname} - - - - - -DB 参数错误,未提供 ConnectionString - - - - - -DB 参数错误,格式为:MySql,ConnectionString - - - - - -DB 参数错误,不支持的类型:"{dbargs}" - - - - - {method} 是 FreeSql.Provider.{provider} 特有的功能 - - - - - fsql.InsertOrUpdate Sqlite 无法完成 UpdateColumns 操作 - - - - - 主库 - - - - - MygisGeometry.Parse 未实现 "{wkt}" - - - - - -NameOptions 参数错误,格式为:0,0,0,0 - - - - - 未实现该功能 - - - - - 未实现错误,请反馈给作者 - - - - - 找不到 {name} - - - - - FreeSql.Provider.{providerName} 未实现 Skip/Offset 功能,如果需要分页请使用判断上一次 id - - - - - 对象池 - - - - - 旧表(OldName):{tboldname} 存在,数据库已存在 {tbname} 表,无法改名 - - - - - OnConflictDoUpdate 功能要求实体类必须设置 IsPrimary 属性 - - - - - Oracle CodeFirst 不支持代码创建 tablespace 与 schemas {tbname} - - - - - 解析失败 {callExpMethodName} {message},提示:可以使用扩展方法 IQueryable.RestoreToSelect() 还原为 ISelect 再查询 - - - - - fsql.InsertOrUpdate + IfExistsDoNothing + {providerName}要求实体类 {tableCsName} 必须有主键 - - - - - SelectMany 错误的类型:{typeFullName} - - - - - 从库 - - - - - 类型 {objentityTypeFullName} 不可迁移 - - - - - 类型 {objentityTypeFullName} 不可迁移,可迁移属性0个 - - - - - 未实现 {columnDbTypeTextFull} 类型映射 - - - - - 错误的参数设置:{args} - - - + {qoteSql} is NULL,除非设置特性 [Column(IsNullable = false)] - + 分表字段值 "{dt}" 不能小于 "{beginTime} " - + 分表字段值不能为 null - + 分表字段值 "{columnValue}" 不能转化成 DateTime - + 分表字段值 "{dt}" 未匹配到分表名 - + T2 类型错误 - + tableName 格式错误,示例:“log_{yyyyMMdd}” - + {Type}.AsType 参数错误,请传入正确的实体类型 - + {thatFullName} 类型无法访问构造函数 - + {name} 类型错误 - + {Type}.AsType 参数不支持指定为 object - + 类型 {typeofFullName} 错误,不能使用 IncludeMany - + 无法解析表达式:{exp} - + 无法解析表达式方法 {exp3tmpCallMethodName} - + 请使用 fsql.InsertDict(dict) 方法插入字典数据 + + + 找不到 {name} + + + + + 从库 + + + + + 主库 + + + + + 蛋疼的 Access 插入只能一条一条执行,不支持 values(..),(..) 也不支持 select .. UNION ALL select .. + + + + + BaseEntity.Initialization 初始化错误,获取到 IFreeSql 是 null + + + + + 【{thisName}】Block access and wait for recovery: {exMessage} + + + + + 无法将 IQueryable&lt;{typeofName}&gt; 转换为 ISelect&lt;{typeofName}&gt;,因为他的实现不是 FreeSql.Extensions.Linq.QueryableProvider + + + + + 连接字符串错误 + + + + + 【{thisName}】连接字符串错误,请检查。 + + + + + 连接字符串错误,或者检查项目属性 &gt; 生成 &gt; 目标平台:x86 | x64,或者改用 FreeSql.Provider.SqliteCore 访问 arm 平台 + + + + + 【{thisName}】连接字符串错误,请检查。或者检查项目属性 &gt; 生成 &gt; 目标平台:x86 | x64,或者改用 FreeSql.Provider.SqliteCore 访问 arm 平台 + + + + + FreeSql.Provider.CustomAdapter 无法使用 CreateCommand + + + + + FreeSql.Provider.CustomAdapter 仅支持 UseConnectionFactory 方式构建 IFreeSql + + + + + 达梦 CodeFirst 不支持代码创建 tablespace 与 schemas {tbname} + + + + + -DB 参数错误,未提供 ConnectionString + + + + + -DB 参数错误,格式为:MySql,ConnectionString + + + + + -DB 参数错误,不支持的类型:"{dbargs}" + + + + + {method} 是 FreeSql.Provider.{provider} 特有的功能 + + + + + fsql.InsertOrUpdate Sqlite 无法完成 UpdateColumns 操作 + + + + + MygisGeometry.Parse 未实现 "{wkt}" + + + + + -NameOptions 参数错误,格式为:0,0,0,0 + + + + + 未实现该功能 + + + + + 未实现错误,请反馈给作者 + + + + + FreeSql.Provider.{providerName} 未实现 Skip/Offset 功能,如果需要分页请使用判断上一次 id + + + + + 旧表(OldName):{tboldname} 存在,数据库已存在 {tbname} 表,无法改名 + + + + + OnConflictDoUpdate 功能要求实体类必须设置 IsPrimary 属性 + + + + + Oracle CodeFirst 不支持代码创建 tablespace 与 schemas {tbname} + + + + + 解析失败 {callExpMethodName} {message},提示:可以使用扩展方法 IQueryable.RestoreToSelect() 还原为 ISelect 再查询 + + + + + fsql.InsertOrUpdate + IfExistsDoNothing + {providerName}要求实体类 {tableCsName} 必须有主键 + + + + + SelectMany 错误的类型:{typeFullName} + + + + + 类型 {objentityTypeFullName} 不可迁移 + + + + + 类型 {objentityTypeFullName} 不可迁移,可迁移属性0个 + + + + + 未实现 {columnDbTypeTextFull} 类型映射 + + + + + 错误的参数设置:{args} + + + + + 对象池 + + 动态构建Class Type diff --git a/FreeSql/FreeSqlBuilder.cs b/FreeSql/FreeSqlBuilder.cs index 2be1d2e59..6f5afd90a 100644 --- a/FreeSql/FreeSqlBuilder.cs +++ b/FreeSql/FreeSqlBuilder.cs @@ -45,7 +45,7 @@ namespace FreeSql /// public FreeSqlBuilder UseConnectionString(DataType dataType, string connectionString, Type providerType = null) { - if (_connectionFactory != null) throw new Exception(CoreStrings.Has_Specified_Cannot_Specified_Second("UseConnectionFactory", "UseConnectionString")); + if (_connectionFactory != null) throw new Exception(CoreErrorStrings.Has_Specified_Cannot_Specified_Second("UseConnectionFactory", "UseConnectionString")); _dataType = dataType; _masterConnectionString = connectionString; _providerType = providerType; @@ -86,13 +86,13 @@ namespace FreeSql /// public FreeSqlBuilder UseSlave(params string[] slaveConnectionString) { - if (_connectionFactory != null) throw new Exception(CoreStrings.Has_Specified_Cannot_Specified_Second("UseConnectionFactory", "UseSlave")); + if (_connectionFactory != null) throw new Exception(CoreErrorStrings.Has_Specified_Cannot_Specified_Second("UseConnectionFactory", "UseSlave")); _slaveConnectionString = slaveConnectionString; return this; } public FreeSqlBuilder UseSlaveWeight(params int[] slaveWeights) { - if (_slaveConnectionString?.Length != slaveWeights.Length) throw new Exception(CoreStrings.Different_Number_SlaveConnectionString_SlaveWeights); + if (_slaveConnectionString?.Length != slaveWeights.Length) throw new Exception(CoreErrorStrings.Different_Number_SlaveConnectionString_SlaveWeights); _slaveWeights = slaveWeights; return this; } @@ -105,8 +105,8 @@ namespace FreeSql /// public FreeSqlBuilder UseConnectionFactory(DataType dataType, Func connectionFactory, Type providerType = null) { - if (string.IsNullOrEmpty(_masterConnectionString) == false) throw new Exception(CoreStrings.Has_Specified_Cannot_Specified_Second("UseConnectionString", "UseConnectionFactory")); - if (_slaveConnectionString?.Any() == true) throw new Exception(CoreStrings.Has_Specified_Cannot_Specified_Second("UseSlave", "UseConnectionFactory")); + if (string.IsNullOrEmpty(_masterConnectionString) == false) throw new Exception(CoreErrorStrings.Has_Specified_Cannot_Specified_Second("UseConnectionString", "UseConnectionFactory")); + if (_slaveConnectionString?.Any() == true) throw new Exception(CoreErrorStrings.Has_Specified_Cannot_Specified_Second("UseSlave", "UseConnectionFactory")); _dataType = dataType; _connectionFactory = connectionFactory; _providerType = providerType; @@ -244,7 +244,7 @@ namespace FreeSql public IFreeSql Build() => Build(); public IFreeSql Build() { - if (string.IsNullOrEmpty(_masterConnectionString) && _connectionFactory == null) throw new Exception(CoreStrings.Check_UseConnectionString); + if (string.IsNullOrEmpty(_masterConnectionString) && _connectionFactory == null) throw new Exception(CoreErrorStrings.Check_UseConnectionString); IFreeSql ret = null; var type = _providerType; if (type != null) @@ -254,7 +254,7 @@ namespace FreeSql } else { - Action throwNotFind = (dll, providerType) => throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package_Reason(dll, providerType)); + Action throwNotFind = (dll, providerType) => throw new Exception(CoreErrorStrings.Missing_FreeSqlProvider_Package_Reason(dll, providerType)); switch (_dataType) { case DataType.MySql: @@ -385,7 +385,7 @@ namespace FreeSql if (type == null) throwNotFind("FreeSql.Provider.Duckdb.dll", "FreeSql.Duckdb.DuckdbProvider<>"); break; - default: throw new Exception(CoreStrings.NotSpecified_UseConnectionString_UseConnectionFactory); + default: throw new Exception(CoreErrorStrings.NotSpecified_UseConnectionString_UseConnectionFactory); } } ret = Activator.CreateInstance(type, new object[] diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index 8181b067e..33774c440 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -436,7 +436,7 @@ namespace FreeSql.Internal ReadAnonymousField(_tables, _tableRule, field, child, ref index, initAssignExp.Expression, select, diymemexp, whereGlobalFilter, findIncludeMany, findSubSelectMany, false); } } - if (parent.Childs.Any() == false) throw new Exception(CoreStrings.Mapping_Exception_HasNo_SamePropertyName(initExp.NewExpression.Type.Name)); + if (parent.Childs.Any() == false) throw new Exception(CoreErrorStrings.Mapping_Exception_HasNo_SamePropertyName(initExp.NewExpression.Type.Name)); return true; case ExpressionType.New: var newExp = exp as NewExpression; @@ -548,7 +548,7 @@ namespace FreeSql.Internal } } } - if (parent.Childs.Any() == false) throw new Exception(CoreStrings.Mapping_Exception_HasNo_SamePropertyName(newExp.Type.Name)); + if (parent.Childs.Any() == false) throw new Exception(CoreErrorStrings.Mapping_Exception_HasNo_SamePropertyName(newExp.Type.Name)); return true; } parent.DbField = ExpressionLambdaToSql(exp, getTSC()); //解决 new { a = id + 1 } 翻译后 ((id+1)) 问题 @@ -676,7 +676,7 @@ namespace FreeSql.Internal var newArrMembers = new List(); foreach (var newArrExp in newArr.Expressions) newArrMembers.AddRange(ExpressionSelectColumns_MemberAccess_New_NewArrayInit(_tables, _tableRule, newArrExp, isQuoteName, diymemexp)); return newArrMembers.Distinct().Select(a => a.Trim('\'')).ToArray(); - default: throw new ArgumentException(CoreStrings.Unable_Parse_Expression(exp)); + default: throw new ArgumentException(CoreErrorStrings.Unable_Parse_Expression(exp)); } return new string[0]; } @@ -1126,7 +1126,7 @@ namespace FreeSql.Internal var eccFields = _dicTypeExpressionCallClassContextFields.GetOrAdd(exp3.Method.DeclaringType, dttp => dttp.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Static).Where(a => a.FieldType == typeof(ThreadLocal)).ToArray()); if (eccFields.Any() == false) - throw new Exception(CoreStrings.Custom_Expression_ParsingError(exp3.Method.DeclaringType)); + throw new Exception(CoreErrorStrings.Custom_Expression_ParsingError(exp3.Method.DeclaringType)); foreach (var eccField in eccFields) typeof(ThreadLocal).GetProperty("Value").SetValue(eccField.GetValue(null), ecc, null); try @@ -1150,7 +1150,7 @@ namespace FreeSql.Internal case "System.String": other3Exp = ExpressionLambdaToSqlCallString(exp3, tsc); break; case "System.Math": other3Exp = ExpressionLambdaToSqlCallMath(exp3, tsc); break; case "System.DateTime": other3Exp = ExpressionLambdaToSqlCallDateTime(exp3, tsc); break; - case "System.TimeSpan": throw new Exception(CoreStrings.Unable_Parse_ExpressionMethod(callType.FullName)); + case "System.TimeSpan": throw new Exception(CoreErrorStrings.Unable_Parse_ExpressionMethod(callType.FullName)); case "System.Convert": other3Exp = ExpressionLambdaToSqlCallConvert(exp3, tsc); break; } if (string.IsNullOrEmpty(other3Exp) == false) return other3Exp; @@ -1315,7 +1315,7 @@ namespace FreeSql.Internal fsql = Expression.Lambda(exp3tmpTestCall).Compile().DynamicInvoke(); var fsqlFindMethod = fsql.GetType().GetMethod(exp3tmpCall.Method.Name, exp3tmpCall.Arguments.Select(a => a.Type).ToArray()); if (fsqlFindMethod == null) - throw new Exception(CoreStrings.Unable_Parse_ExpressionMethod(exp3tmpCall.Method.Name)); + throw new Exception(CoreErrorStrings.Unable_Parse_ExpressionMethod(exp3tmpCall.Method.Name)); var exp3StackOld = exp3Stack; exp3Stack = new Stack(); exp3Stack.Push(Expression.Call(Expression.Constant(fsql), fsqlFindMethod, exp3tmpCall.Arguments)); @@ -1353,7 +1353,7 @@ namespace FreeSql.Internal //fsqltables[0].Alias = $"{tsc._tables[0].Alias}_{fsqltables[0].Alias}"; if (fsqltables != tsc._tables) { - if (tsc._tables == null && tsc.diymemexp == null) throw new NotSupportedException(CoreStrings.EspeciallySubquery_Cannot_Parsing); //2020-12-11 IUpdate 条件不支持子查询 + if (tsc._tables == null && tsc.diymemexp == null) throw new NotSupportedException(CoreErrorStrings.EspeciallySubquery_Cannot_Parsing); //2020-12-11 IUpdate 条件不支持子查询 if (tsc._tables != null) //groupby is null { fsqltables.AddRange(tsc._tables.Select(a => new SelectTableInfo @@ -1655,7 +1655,7 @@ namespace FreeSql.Internal var exp3Args0 = (exp3.Arguments[0] as UnaryExpression)?.Operand as LambdaExpression; manySubSelectAggMethod = _dicSelectMethodToSql.GetOrAdd(fsqlType, fsqlType2 => fsqlType2.GetMethods().Where(a => a.Name == "ToSql" && a.GetParameters().Length == 2 && a.GetParameters()[1].ParameterType == typeof(FieldAliasOptions) && a.GetGenericArguments().Length == 1).FirstOrDefault()); - if (manySubSelectAggMethod == null || exp3Args0 == null) throw new ArgumentException(CoreStrings.ManyToMany_AsSelect_NotSupport_Sum_Avg_etc); + if (manySubSelectAggMethod == null || exp3Args0 == null) throw new ArgumentException(CoreErrorStrings.ManyToMany_AsSelect_NotSupport_Sum_Avg_etc); manySubSelectAggMethod = manySubSelectAggMethod.MakeGenericMethod(exp3Args0.ReturnType); var fsqls0p = fsql as Select0Provider; var fsqls0pWhere = fsqls0p._where.ToString(); @@ -1821,8 +1821,8 @@ namespace FreeSql.Internal other3Exp = ExpressionLambdaToSqlOther(exp3, tsc); if (string.IsNullOrEmpty(other3Exp) == false) return other3Exp; if (exp3.CanDynamicInvoke()) return formatSql(Expression.Lambda(exp3).Compile().DynamicInvoke(), tsc.mapType, tsc.mapColumnTmp, tsc.dbParams); - if (exp3.Method.DeclaringType == typeof(Enumerable)) throw new Exception(CoreStrings.Not_Implemented_Expression_UseAsSelect(exp3, exp3.Method.Name, (exp3.Arguments.Count > 1 ? "..." : ""))); - throw new Exception(CoreStrings.Not_Implemented_Expression(exp3)); + if (exp3.Method.DeclaringType == typeof(Enumerable)) throw new Exception(CoreErrorStrings.Not_Implemented_Expression_UseAsSelect(exp3, exp3.Method.Name, (exp3.Arguments.Count > 1 ? "..." : ""))); + throw new Exception(CoreErrorStrings.Not_Implemented_Expression(exp3)); case ExpressionType.Parameter: case ExpressionType.MemberAccess: var exp4 = exp as MemberExpression; @@ -1859,7 +1859,7 @@ namespace FreeSql.Internal case "TotalSeconds": return $"({left})"; } } - throw new Exception(CoreStrings.Unable_Parse_Expression(exp4)); + throw new Exception(CoreErrorStrings.Unable_Parse_Expression(exp4)); } if (string.IsNullOrEmpty(extRet) == false) return extRet; var other4Exp = ExpressionLambdaToSqlOther(exp4, tsc); @@ -1935,7 +1935,7 @@ namespace FreeSql.Internal } while (expStack.Any()) { - if (firstValue == null) throw new Exception(CoreStrings.Cannot_Be_NULL_Name(exp)); + if (firstValue == null) throw new Exception(CoreErrorStrings.Cannot_Be_NULL_Name(exp)); var expStackItem = expStack.Pop() as MemberExpression; if (expStackItem.Member.MemberType == MemberTypes.Property) firstValue = ((PropertyInfo)expStackItem.Member).GetValue(firstValue, null); @@ -1982,8 +1982,8 @@ namespace FreeSql.Internal if (tb.ColumnsByCs.ContainsKey(memberExp.Member.Name) == false) { if (tb.ColumnsByCsIgnore.ContainsKey(memberExp.Member.Name)) - throw new ArgumentException(CoreStrings.Ignored_Check_Confirm_PublicGetSet(tb.DbName, memberExp.Member.Name)); - throw new ArgumentException(CoreStrings.NotFound_Column(tb.DbName, memberExp.Member.Name)); + throw new ArgumentException(CoreErrorStrings.Ignored_Check_Confirm_PublicGetSet(tb.DbName, memberExp.Member.Name)); + throw new ArgumentException(CoreErrorStrings.NotFound_Column(tb.DbName, memberExp.Member.Name)); } var curcol = tb.ColumnsByCs[memberExp.Member.Name]; if (tsc._selectColumnMap != null) @@ -2111,7 +2111,7 @@ namespace FreeSql.Internal switch (exp2.NodeType) { case ExpressionType.Constant: - throw new NotImplementedException($"{CoreStrings.Not_Implemented_MemberAcess_Constant}"); + throw new NotImplementedException($"{CoreErrorStrings.Not_Implemented_MemberAcess_Constant}"); case ExpressionType.Parameter: case ExpressionType.MemberAccess: @@ -2130,7 +2130,7 @@ namespace FreeSql.Internal } name2 = col2.Attribute.Name; tsc.SetMapColumnTmp(col2); - if (expStack.Count > 0) throw new Exception(CoreStrings.Unable_Parse_Expression(expStack.Pop())); + if (expStack.Count > 0) throw new Exception(CoreErrorStrings.Unable_Parse_Expression(expStack.Pop())); break; } //判断 [JsonMap] 并非导航对象,所以在上面提前判断 ColumnsByCs @@ -2183,10 +2183,10 @@ namespace FreeSql.Internal } } if (tb2.ColumnsByCsIgnore.ContainsKey(mp2.Member.Name)) - throw new ArgumentException(CoreStrings.Ignored_Check_Confirm_PublicGetSet(tb2.DbName, mp2.Member.Name)); + throw new ArgumentException(CoreErrorStrings.Ignored_Check_Confirm_PublicGetSet(tb2.DbName, mp2.Member.Name)); if (tb2.GetTableRef(mp2.Member.Name, false, true) != null) - throw new ArgumentException(CoreStrings.Navigation_Missing_AsSelect(tb2.DbName, mp2.Member.Name)); - throw new ArgumentException(CoreStrings.NotFound_Column(tb2.DbName, mp2.Member.Name)); + throw new ArgumentException(CoreErrorStrings.Navigation_Missing_AsSelect(tb2.DbName, mp2.Member.Name)); + throw new ArgumentException(CoreErrorStrings.NotFound_Column(tb2.DbName, mp2.Member.Name)); } col2 = tb2.ColumnsByCs[mp2.Member.Name]; if (tsc._selectColumnMap != null && find2 != null) @@ -3010,7 +3010,7 @@ namespace FreeSql.Internal e.Result = $"({select.ToSql().Replace(" \r\n", " \r\n ")})"; return; } - throw throwCallExp(CoreStrings.Not_Support); + throw throwCallExp(CoreErrorStrings.Not_Support); case "ToList": if (callExp.Arguments.Count == 1) { @@ -3019,7 +3019,7 @@ namespace FreeSql.Internal e.Result = $"({select.ToSql().Replace(" \r\n", " \r\n ")})"; return; } - throw throwCallExp(CoreStrings.Not_Support); + throw throwCallExp(CoreErrorStrings.Not_Support); case "Contains": if (callExp.Arguments.Count == 2) { @@ -3037,7 +3037,7 @@ namespace FreeSql.Internal select.Distinct(); break; } - throw throwCallExp(CoreStrings.Not_Support); + throw throwCallExp(CoreErrorStrings.Not_Support); case "OrderBy": select._tables[0].Parameter = (callExp.Arguments[1] as LambdaExpression)?.Parameters.FirstOrDefault(); LocalSetSelectProviderAlias(select._tables[0].Parameter.Name); @@ -3068,7 +3068,7 @@ namespace FreeSql.Internal select.InternalWhere(whereParam); break; } - throw throwCallExp(CoreStrings.Not_Support); + throw throwCallExp(CoreErrorStrings.Not_Support); case "Skip": select.Offset((int)callExp.Arguments[1].GetConstExprValue()); @@ -3086,9 +3086,9 @@ namespace FreeSql.Internal select._selectExpression = selectParam; break; } - throw throwCallExp(CoreStrings.Not_Support); + throw throwCallExp(CoreErrorStrings.Not_Support); } - Exception throwCallExp(string message) => new Exception(CoreStrings.Parsing_Failed(callExp.Method.Name, message)); + Exception throwCallExp(string message) => new Exception(CoreErrorStrings.Parsing_Failed(callExp.Method.Name, message)); } } } diff --git a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs index 4446d93cf..8a0b0d2e6 100644 --- a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs +++ b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs @@ -654,7 +654,7 @@ namespace FreeSql.Internal.CommonProvider ReturnConnection(pool, conn, ex); //pool.Return(conn, ex); if (IsTracePerformance) logtxt.Append("Pool.Return: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms"); } - LoggerException(pool, pc, new Exception(CoreStrings.Connection_Failed_Switch_Servers), dt, logtxt, false); + LoggerException(pool, pc, new Exception(CoreErrorStrings.Connection_Failed_Switch_Servers), dt, logtxt, false); pc.cmd.Parameters.Clear(); if (DataType == DataType.Sqlite) pc.cmd.Dispose(); ExecuteReaderMultiple(multipleResult, connection, transaction, fetchHandler, schemaHandler, cmdType, cmdText, cmdTimeout, cmdParms); diff --git a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderAsync.cs b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderAsync.cs index da8a25489..80c862fda 100644 --- a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderAsync.cs +++ b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderAsync.cs @@ -574,7 +574,7 @@ namespace FreeSql.Internal.CommonProvider ReturnConnection(pool, conn, ex); //pool.Return(conn, ex); if (IsTracePerformance) logtxt.Append("Pool.Return: ").Append(DateTime.Now.Subtract(logtxt_dt).TotalMilliseconds).Append("ms Total: ").Append(DateTime.Now.Subtract(dt).TotalMilliseconds).Append("ms"); } - LoggerException(pool, pc, new Exception(CoreStrings.Connection_Failed_Switch_Servers), dt, logtxt, false); + LoggerException(pool, pc, new Exception(CoreErrorStrings.Connection_Failed_Switch_Servers), dt, logtxt, false); pc.cmd.Parameters.Clear(); if (DataType == DataType.Sqlite) pc.cmd.Dispose(); await ExecuteReaderMultipleAsync(multipleResult, connection, transaction, fetchHandler, schemaHandler, cmdType, cmdText, cmdTimeout, cmdParms, cancellationToken); diff --git a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderTransaction.cs b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderTransaction.cs index e87abc329..86bc8d02d 100644 --- a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderTransaction.cs +++ b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderTransaction.cs @@ -78,7 +78,7 @@ namespace FreeSql.Internal.CommonProvider _trans.TryRemove(tran.Connection.LastGetThreadId, out var oldtran); Exception ex = null; - if (string.IsNullOrEmpty(remark)) remark = isCommit ? CoreStrings.Commit : CoreStrings.RollBack; + if (string.IsNullOrEmpty(remark)) remark = isCommit ? CoreErrorStrings.Commit : CoreErrorStrings.RollBack; try { if (tran.Transaction.Connection != null) //用户自行 Commit、Rollback diff --git a/FreeSql/Internal/CommonProvider/BaseDbProvider.cs b/FreeSql/Internal/CommonProvider/BaseDbProvider.cs index f7e77bc20..22b77a066 100644 --- a/FreeSql/Internal/CommonProvider/BaseDbProvider.cs +++ b/FreeSql/Internal/CommonProvider/BaseDbProvider.cs @@ -18,23 +18,23 @@ namespace FreeSql.Internal.CommonProvider public IInsert Insert() where T1 : class => CreateInsertProvider(); public IInsert Insert(T1 source) where T1 : class { - if (typeof(T1) == typeof(Dictionary)) throw new Exception(CoreStrings.Use_InsertDict_Method); + if (typeof(T1) == typeof(Dictionary)) throw new Exception(CoreErrorStrings.Use_InsertDict_Method); return this.Insert().AppendData(source); } public IInsert Insert(T1[] source) where T1 : class { - if (typeof(T1) == typeof(Dictionary)) throw new Exception(CoreStrings.Use_InsertDict_Method); + if (typeof(T1) == typeof(Dictionary)) throw new Exception(CoreErrorStrings.Use_InsertDict_Method); return this.Insert().AppendData(source); } public IInsert Insert(List source) where T1 : class { - if (typeof(T1) == typeof(Dictionary)) throw new Exception(CoreStrings.Use_InsertDict_Method); + if (typeof(T1) == typeof(Dictionary)) throw new Exception(CoreErrorStrings.Use_InsertDict_Method); return this.Insert().AppendData(source); } public IInsert Insert(IEnumerable source) where T1 : class { - if (typeof(T1) == typeof(Dictionary)) throw new Exception(CoreStrings.Use_InsertDict_Method); + if (typeof(T1) == typeof(Dictionary)) throw new Exception(CoreErrorStrings.Use_InsertDict_Method); return this.Insert().AppendData(source); } public IUpdate Update() where T1 : class => CreateUpdateProvider(null); diff --git a/FreeSql/Internal/CommonProvider/DeleteProvider.cs b/FreeSql/Internal/CommonProvider/DeleteProvider.cs index ad4517e37..063317198 100644 --- a/FreeSql/Internal/CommonProvider/DeleteProvider.cs +++ b/FreeSql/Internal/CommonProvider/DeleteProvider.cs @@ -176,10 +176,10 @@ namespace FreeSql.Internal.CommonProvider } public IDelete AsType(Type entityType) { - if (entityType == typeof(object)) throw new Exception(CoreStrings.TypeAsType_NotSupport_Object("IDelete")); + if (entityType == typeof(object)) throw new Exception(CoreErrorStrings.TypeAsType_NotSupport_Object("IDelete")); if (entityType == _table.Type) return this; var newtb = _commonUtils.GetTableByEntity(entityType); - _table = newtb ?? throw new Exception(CoreStrings.Type_AsType_Parameter_Error("IDelete")); + _table = newtb ?? throw new Exception(CoreErrorStrings.Type_AsType_Parameter_Error("IDelete")); if (_isAutoSyncStructure) _orm.CodeFirst.SyncStructure(entityType); return this; } diff --git a/FreeSql/Internal/CommonProvider/InsertOrUpdateProvider.cs b/FreeSql/Internal/CommonProvider/InsertOrUpdateProvider.cs index c33929429..736eba535 100644 --- a/FreeSql/Internal/CommonProvider/InsertOrUpdateProvider.cs +++ b/FreeSql/Internal/CommonProvider/InsertOrUpdateProvider.cs @@ -51,7 +51,7 @@ namespace FreeSql.Internal.CommonProvider _isAutoSyncStructure = _orm.CodeFirst.IsAutoSyncStructure; _tempPrimarys = _table?.Primarys ?? new ColumnInfo[0]; if (_table == null && typeof(T1) != typeof(Dictionary)) - throw new Exception(CoreStrings.InsertOrUpdate_NotSuport_Generic_UseEntity(typeof(T1))); + throw new Exception(CoreErrorStrings.InsertOrUpdate_NotSuport_Generic_UseEntity(typeof(T1))); if (_isAutoSyncStructure && typeof(T1) != typeof(object)) _orm.CodeFirst.SyncStructure(); IdentityColumn = _table?.Primarys.Where(a => a.Attribute.IsIdentity).FirstOrDefault(); } @@ -157,7 +157,7 @@ namespace FreeSql.Internal.CommonProvider { if (data == null || table == null) return; if (typeof(T1) == typeof(object) && new[] { table.Type, table.TypeLazy }.Contains(data.GetType()) == false) - throw new Exception(CoreStrings.DataType_AsType_Inconsistent(data.GetType().DisplayCsharp(), table.Type.DisplayCsharp())); + throw new Exception(CoreErrorStrings.DataType_AsType_Inconsistent(data.GetType().DisplayCsharp(), table.Type.DisplayCsharp())); if (orm.Aop.AuditValueHandler == null) return; foreach (var col in table.Columns.Values) { @@ -256,10 +256,10 @@ namespace FreeSql.Internal.CommonProvider } public IInsertOrUpdate AsType(Type entityType) { - if (entityType == typeof(object)) throw new Exception(CoreStrings.TypeAsType_NotSupport_Object("IInsertOrUpdate")); + if (entityType == typeof(object)) throw new Exception(CoreErrorStrings.TypeAsType_NotSupport_Object("IInsertOrUpdate")); if (entityType == _table.Type) return this; var newtb = _commonUtils.GetTableByEntity(entityType); - _table = newtb ?? throw new Exception(CoreStrings.Type_AsType_Parameter_Error("IInsertOrUpdate")); + _table = newtb ?? throw new Exception(CoreErrorStrings.Type_AsType_Parameter_Error("IInsertOrUpdate")); if (_isAutoSyncStructure) _orm.CodeFirst.SyncStructure(entityType); _tempPrimarys = _table.Primarys; if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(entityType); @@ -414,12 +414,12 @@ namespace FreeSql.Internal.CommonProvider _SplitSourceByIdentityValueIsNullFlag = 2; ExecuteBatchOptions(ss.Item2); _transaction.Commit(); - _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.Commit, null)); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.Commit, null)); } catch (Exception ex) { _transaction.Rollback(); - _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.RollBack, ex)); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.RollBack, ex)); throw; } _transaction = null; @@ -540,12 +540,12 @@ namespace FreeSql.Internal.CommonProvider _SplitSourceByIdentityValueIsNullFlag = 2; await ExecuteBatchOptions(ss.Item2); _transaction.Commit(); - _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.Commit, null)); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.Commit, null)); } catch (Exception ex) { _transaction.Rollback(); - _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.RollBack, ex)); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.RollBack, ex)); throw; } _transaction = null; diff --git a/FreeSql/Internal/CommonProvider/InsertProvider.cs b/FreeSql/Internal/CommonProvider/InsertProvider.cs index ab166af62..c099faa59 100644 --- a/FreeSql/Internal/CommonProvider/InsertProvider.cs +++ b/FreeSql/Internal/CommonProvider/InsertProvider.cs @@ -164,7 +164,7 @@ namespace FreeSql.Internal.CommonProvider { if (data == null || table == null) return; if (typeof(T1) == typeof(object) && new[] { table.Type, table.TypeLazy }.Contains(data.GetType()) == false) - throw new Exception(CoreStrings.DataType_AsType_Inconsistent(data.GetType().DisplayCsharp(), table.Type.DisplayCsharp())); + throw new Exception(CoreErrorStrings.DataType_AsType_Inconsistent(data.GetType().DisplayCsharp(), table.Type.DisplayCsharp())); foreach (var col in table.Columns.Values) { object val = col.GetValue(data); @@ -297,7 +297,7 @@ namespace FreeSql.Internal.CommonProvider } else { - if (_orm.Ado.MasterPool == null) throw new Exception(CoreStrings.MasterPool_IsNull_UseTransaction); + if (_orm.Ado.MasterPool == null) throw new Exception(CoreErrorStrings.MasterPool_IsNull_UseTransaction); using (var conn = _orm.Ado.MasterPool.Get()) { _transaction = conn.Value.BeginTransaction(); @@ -312,12 +312,12 @@ namespace FreeSql.Internal.CommonProvider ret += this.RawExecuteAffrows(); } _transaction.Commit(); - _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.Commit, null)); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.Commit, null)); } catch (Exception ex) { _transaction.Rollback(); - _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.RollBack, ex)); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.RollBack, ex)); throw; } _transaction = null; @@ -377,7 +377,7 @@ namespace FreeSql.Internal.CommonProvider } else { - if (_orm.Ado.MasterPool == null) throw new Exception(CoreStrings.MasterPool_IsNull_UseTransaction); + if (_orm.Ado.MasterPool == null) throw new Exception(CoreErrorStrings.MasterPool_IsNull_UseTransaction); using (var conn = _orm.Ado.MasterPool.Get()) { _transaction = conn.Value.BeginTransaction(); @@ -393,12 +393,12 @@ namespace FreeSql.Internal.CommonProvider else ret = this.RawExecuteIdentity(); } _transaction.Commit(); - _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.Commit, null)); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.Commit, null)); } catch (Exception ex) { _transaction.Rollback(); - _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.RollBack, ex)); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.RollBack, ex)); throw; } _transaction = null; @@ -457,7 +457,7 @@ namespace FreeSql.Internal.CommonProvider } else { - if (_orm.Ado.MasterPool == null) throw new Exception(CoreStrings.MasterPool_IsNull_UseTransaction); + if (_orm.Ado.MasterPool == null) throw new Exception(CoreErrorStrings.MasterPool_IsNull_UseTransaction); using (var conn = _orm.Ado.MasterPool.Get()) { _transaction = conn.Value.BeginTransaction(); @@ -472,12 +472,12 @@ namespace FreeSql.Internal.CommonProvider ret.AddRange(this.RawExecuteInserted()); } _transaction.Commit(); - _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.Commit, null)); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.Commit, null)); } catch (Exception ex) { _transaction.Rollback(); - _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.RollBack, ex)); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.RollBack, ex)); throw; } _transaction = null; @@ -597,11 +597,11 @@ namespace FreeSql.Internal.CommonProvider } public IInsert AsType(Type entityType) { - if (entityType == typeof(object)) throw new Exception(CoreStrings.TypeAsType_NotSupport_Object("IInsert")); + if (entityType == typeof(object)) throw new Exception(CoreErrorStrings.TypeAsType_NotSupport_Object("IInsert")); if (entityType == typeof(T1)) return this; if (entityType == _table.Type) return this; var newtb = _commonUtils.GetTableByEntity(entityType); - _table = newtb ?? throw new Exception(CoreStrings.Type_AsType_Parameter_Error("IInsert")); + _table = newtb ?? throw new Exception(CoreErrorStrings.Type_AsType_Parameter_Error("IInsert")); if (_isAutoSyncStructure) _orm.CodeFirst.SyncStructure(entityType); IgnoreCanInsert(); return this; diff --git a/FreeSql/Internal/CommonProvider/InsertProviderAsync.cs b/FreeSql/Internal/CommonProvider/InsertProviderAsync.cs index 54b94b275..d997d3676 100644 --- a/FreeSql/Internal/CommonProvider/InsertProviderAsync.cs +++ b/FreeSql/Internal/CommonProvider/InsertProviderAsync.cs @@ -55,7 +55,7 @@ namespace FreeSql.Internal.CommonProvider } else { - if (_orm.Ado.MasterPool == null) throw new Exception(CoreStrings.MasterPool_IsNull_UseTransaction); + if (_orm.Ado.MasterPool == null) throw new Exception(CoreErrorStrings.MasterPool_IsNull_UseTransaction); using (var conn = await _orm.Ado.MasterPool.GetAsync()) { _transaction = conn.Value.BeginTransaction(); @@ -70,12 +70,12 @@ namespace FreeSql.Internal.CommonProvider ret += await this.RawExecuteAffrowsAsync(cancellationToken); } _transaction.Commit(); - _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.Commit, null)); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.Commit, null)); } catch (Exception ex) { _transaction.Rollback(); - _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.RollBack, ex)); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.RollBack, ex)); throw; } _transaction = null; @@ -135,7 +135,7 @@ namespace FreeSql.Internal.CommonProvider } else { - if (_orm.Ado.MasterPool == null) throw new Exception(CoreStrings.MasterPool_IsNull_UseTransaction); + if (_orm.Ado.MasterPool == null) throw new Exception(CoreErrorStrings.MasterPool_IsNull_UseTransaction); using (var conn = await _orm.Ado.MasterPool.GetAsync()) { _transaction = conn.Value.BeginTransaction(); @@ -151,12 +151,12 @@ namespace FreeSql.Internal.CommonProvider else ret = await this.RawExecuteIdentityAsync(cancellationToken); } _transaction.Commit(); - _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.Commit, null)); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.Commit, null)); } catch (Exception ex) { _transaction.Rollback(); - _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.RollBack, ex)); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.RollBack, ex)); throw; } _transaction = null; @@ -215,7 +215,7 @@ namespace FreeSql.Internal.CommonProvider } else { - if (_orm.Ado.MasterPool == null) throw new Exception(CoreStrings.MasterPool_IsNull_UseTransaction); + if (_orm.Ado.MasterPool == null) throw new Exception(CoreErrorStrings.MasterPool_IsNull_UseTransaction); using (var conn = await _orm.Ado.MasterPool.GetAsync()) { _transaction = conn.Value.BeginTransaction(); @@ -230,12 +230,12 @@ namespace FreeSql.Internal.CommonProvider ret.AddRange(await this.RawExecuteInsertedAsync(cancellationToken)); } _transaction.Commit(); - _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.Commit, null)); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.Commit, null)); } catch (Exception ex) { _transaction.Rollback(); - _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.RollBack, ex)); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.RollBack, ex)); throw; } _transaction = null; diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs index 33ce90c41..1d65a44ca 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs @@ -312,7 +312,7 @@ namespace FreeSql.Internal.CommonProvider break; } } - if (exp == null) throw new Exception(CoreStrings.Cannot_Match_Property(property)); + if (exp == null) throw new Exception(CoreErrorStrings.Cannot_Match_Property(property)); } else { @@ -333,7 +333,7 @@ namespace FreeSql.Internal.CommonProvider { var tmp1 = field[x]; if (_commonUtils.GetTableByEntity(currentType).Properties.TryGetValue(tmp1, out var prop) == false) - throw new ArgumentException($"{currentType.DisplayCsharp()} {CoreStrings.NotFound_PropertyName(tmp1)}"); + throw new ArgumentException($"{currentType.DisplayCsharp()} {CoreErrorStrings.NotFound_PropertyName(tmp1)}"); currentType = prop.PropertyType; currentExp = Expression.MakeMemberAccess(currentExp, prop); } @@ -796,7 +796,7 @@ namespace FreeSql.Internal.CommonProvider } public IDelete ToDelete() { - if (_tables[0].Table.Primarys.Any() == false) throw new Exception(CoreStrings.Entity_Must_Primary_Key("ToDelete", _tables[0].Table.CsName)); + if (_tables[0].Table.Primarys.Any() == false) throw new Exception(CoreErrorStrings.Entity_Must_Primary_Key("ToDelete", _tables[0].Table.CsName)); var del = (_orm as BaseDbProvider).CreateDeleteProvider(null) as DeleteProvider; if (_tables[0].Table.Type != typeof(T1)) del.AsType(_tables[0].Table.Type); if (_params.Any()) del._params = new List(_params.ToArray()); @@ -830,7 +830,7 @@ namespace FreeSql.Internal.CommonProvider } public IUpdate ToUpdate() { - if (_tables[0].Table.Primarys.Any() == false) throw new Exception(CoreStrings.Entity_Must_Primary_Key("ToUpdate", _tables[0].Table.CsName)); + if (_tables[0].Table.Primarys.Any() == false) throw new Exception(CoreErrorStrings.Entity_Must_Primary_Key("ToUpdate", _tables[0].Table.CsName)); var upd = (_orm as BaseDbProvider).CreateUpdateProvider(null) as UpdateProvider; if (_tables[0].Table.Type != typeof(T1)) upd.AsType(_tables[0].Table.Type); if (_params.Any()) upd._params = new List(_params.ToArray()); @@ -1018,10 +1018,10 @@ namespace FreeSql.Internal.CommonProvider } public TSelect AsType(Type entityType) { - if (entityType == typeof(object)) throw new Exception(CoreStrings.TypeAsType_NotSupport_Object("ISelect")); + if (entityType == typeof(object)) throw new Exception(CoreErrorStrings.TypeAsType_NotSupport_Object("ISelect")); if (entityType == _tables[0].Table.Type) return this as TSelect; var newtb = _commonUtils.GetTableByEntity(entityType); - _tables[0].Table = newtb ?? throw new Exception(CoreStrings.Type_AsType_Parameter_Error("ISelect")); + _tables[0].Table = newtb ?? throw new Exception(CoreErrorStrings.Type_AsType_Parameter_Error("ISelect")); if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(entityType); return this as TSelect; } @@ -1067,15 +1067,15 @@ namespace FreeSql.Internal.CommonProvider { case DynamicFilterOperator.Custom: var fiValueCustomArray = fi.Field?.ToString().Split(new[] { ' ' }, 2); - if (fiValueCustomArray.Length != 2) throw new ArgumentException(CoreStrings.CustomFieldSeparatedBySpaces); - if (string.IsNullOrWhiteSpace(fiValueCustomArray[0])) throw new ArgumentException(CoreStrings.Custom_StaticMethodName_IsNotNull); - if (string.IsNullOrWhiteSpace(fiValueCustomArray[1])) throw new ArgumentException(CoreStrings.Custom_Reflection_IsNotNull); + if (fiValueCustomArray.Length != 2) throw new ArgumentException(CoreErrorStrings.CustomFieldSeparatedBySpaces); + if (string.IsNullOrWhiteSpace(fiValueCustomArray[0])) throw new ArgumentException(CoreErrorStrings.Custom_StaticMethodName_IsNotNull); + if (string.IsNullOrWhiteSpace(fiValueCustomArray[1])) throw new ArgumentException(CoreErrorStrings.Custom_Reflection_IsNotNull); var fiValue1Type = Type.GetType(fiValueCustomArray[1]); - if (fiValue1Type == null) throw new ArgumentException(CoreStrings.NotFound_Reflection(fiValueCustomArray[1])); + if (fiValue1Type == null) throw new ArgumentException(CoreErrorStrings.NotFound_Reflection(fiValueCustomArray[1])); var fiValue0Method = fiValue1Type.GetMethod(fiValueCustomArray[0], new Type[] { typeof(string) }); if (fiValue0Method == null) fiValue0Method = fiValue1Type.GetMethod(fiValueCustomArray[0], new Type[] { typeof(object), typeof(string) }); - if (fiValue0Method == null) throw new ArgumentException(CoreStrings.NotFound_Static_MethodName(fiValueCustomArray[0])); - if (MethodIsDynamicFilterCustomAttribute(fiValue0Method) == false) throw new ArgumentException(CoreStrings.Custom_StaticMethodName_NotSet_DynamicFilterCustom(fiValueCustomArray[0])); + if (fiValue0Method == null) throw new ArgumentException(CoreErrorStrings.NotFound_Static_MethodName(fiValueCustomArray[0])); + if (MethodIsDynamicFilterCustomAttribute(fiValue0Method) == false) throw new ArgumentException(CoreErrorStrings.Custom_StaticMethodName_NotSet_DynamicFilterCustom(fiValueCustomArray[0])); var fiValue0MethodReturn = fiValue0Method?.Invoke(null, fiValue0Method.GetParameters() .Select(a => a.ParameterType == typeof(object) ? (object)this : (a.ParameterType == typeof(string) ? (object)(fi.Value?.ToString()) : (object)null)) @@ -1126,20 +1126,20 @@ namespace FreeSql.Internal.CommonProvider case DynamicFilterOperator.LessThanOrEqual: exp = Expression.Call(typeof(SqlExt).GetMethod("LessThanOrEqual").MakeGenericMethod(exp.Type), exp, Expression.Constant(Utils.GetDataReaderValue(exp.Type, fi.Value?.ToString()), exp.Type)); break; case DynamicFilterOperator.Range: var fiValueRangeArray = getFiListValue(); - if (fiValueRangeArray.Length != 2) throw new ArgumentException(CoreStrings.Range_Comma_Separateda_By2Char); + if (fiValueRangeArray.Length != 2) throw new ArgumentException(CoreErrorStrings.Range_Comma_Separateda_By2Char); exp = Expression.AndAlso( Expression.GreaterThanOrEqual(exp, Expression.Constant(Utils.GetDataReaderValue(exp.Type, fiValueRangeArray[0]), exp.Type)), Expression.LessThan(exp, Expression.Constant(Utils.GetDataReaderValue(exp.Type, fiValueRangeArray[1]), exp.Type))); break; case DynamicFilterOperator.DateRange: var fiValueDateRangeArray = getFiListValue(); - if (fiValueDateRangeArray?.Length != 2) throw new ArgumentException(CoreStrings.DateRange_Comma_Separateda_By2Char); + if (fiValueDateRangeArray?.Length != 2) throw new ArgumentException(CoreErrorStrings.DateRange_Comma_Separateda_By2Char); if (Regex.IsMatch(fiValueDateRangeArray[1], @"^\d\d\d\d[\-/]\d\d?[\-/]\d\d?$")) fiValueDateRangeArray[1] = DateTime.Parse(fiValueDateRangeArray[1]).AddDays(1).ToString("yyyy-MM-dd HH:mm:ss"); else if (Regex.IsMatch(fiValueDateRangeArray[1], @"^\d\d\d\d[\-/]\d\d?$")) fiValueDateRangeArray[1] = DateTime.Parse($"{fiValueDateRangeArray[1]}-01").AddMonths(1).ToString("yyyy-MM-dd HH:mm:ss"); else if (Regex.IsMatch(fiValueDateRangeArray[1], @"^\d\d\d\d$")) fiValueDateRangeArray[1] = DateTime.Parse($"{fiValueDateRangeArray[1]}-01-01").AddYears(1).ToString("yyyy-MM-dd HH:mm:ss"); else if (Regex.IsMatch(fiValueDateRangeArray[1], @"^\d\d\d\d[\-/]\d\d?[\-/]\d\d? \d\d?$")) fiValueDateRangeArray[1] = DateTime.Parse($"{fiValueDateRangeArray[1]}:00:00").AddHours(1).ToString("yyyy-MM-dd HH:mm:ss"); else if (Regex.IsMatch(fiValueDateRangeArray[1], @"^\d\d\d\d[\-/]\d\d?[\-/]\d\d? \d\d?:\d\d?$")) fiValueDateRangeArray[1] = DateTime.Parse($"{fiValueDateRangeArray[1]}:00").AddMinutes(1).ToString("yyyy-MM-dd HH:mm:ss"); - else if (!Regex.IsMatch(fiValueDateRangeArray[1], @"^\d\d\d\d[\-/]\d\d?[\-/]\d\d? \d\d?:\d\d?:\d\d?$")) throw new ArgumentException(CoreStrings.DateRange_DateFormat_yyyy); + else if (!Regex.IsMatch(fiValueDateRangeArray[1], @"^\d\d\d\d[\-/]\d\d?[\-/]\d\d? \d\d?:\d\d?:\d\d?$")) throw new ArgumentException(CoreErrorStrings.DateRange_DateFormat_yyyy); if (Regex.IsMatch(fiValueDateRangeArray[0], @"^\d\d\d\d[\-/]\d\d?$")) fiValueDateRangeArray[0] = DateTime.Parse($"{fiValueDateRangeArray[0]}-01").ToString("yyyy-MM-dd HH:mm:ss"); else if (Regex.IsMatch(fiValueDateRangeArray[0], @"^\d\d\d\d$")) fiValueDateRangeArray[0] = DateTime.Parse($"{fiValueDateRangeArray[0]}-01-01").ToString("yyyy-MM-dd HH:mm:ss"); @@ -1274,7 +1274,7 @@ namespace FreeSql.Internal.CommonProvider { if (_transaction == null && _orm.Ado.TransactionCurrentThread != null) this.WithTransaction(_orm.Ado.TransactionCurrentThread); if (_transaction == null && _resolveHookTransaction != null) this.WithTransaction(_resolveHookTransaction()); - if (_transaction == null) throw new Exception($"{CoreStrings.Begin_Transaction_Then_ForUpdate}"); + if (_transaction == null) throw new Exception($"{CoreErrorStrings.Begin_Transaction_Then_ForUpdate}"); switch (_orm.Ado.DataType) { case DataType.MySql: diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select0ProviderReader.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select0ProviderReader.cs index be40ee340..6216a73b5 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select0ProviderReader.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select0ProviderReader.cs @@ -21,13 +21,13 @@ namespace FreeSql.Internal.CommonProvider { public DataTable ToDataTableByPropertyName(string[] properties) { - if (properties?.Any() != true) throw new ArgumentException($"{CoreStrings.Properties_Cannot_Null}"); + if (properties?.Any() != true) throw new ArgumentException($"{CoreErrorStrings.Properties_Cannot_Null}"); var sbfield = new StringBuilder(); for (var propIdx = 0; propIdx < properties.Length; propIdx++) { var property = properties[propIdx]; var exp = ConvertStringPropertyToExpression(property); - if (exp == null) throw new Exception(CoreStrings.Property_Cannot_Find(property)); + if (exp == null) throw new Exception(CoreErrorStrings.Property_Cannot_Find(property)); var field = _commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, exp, true, _diymemexpWithTempQuery); if (propIdx > 0) sbfield.Append(", "); sbfield.Append(field); @@ -236,7 +236,7 @@ namespace FreeSql.Internal.CommonProvider } public void ToChunk(int size, Action>> done, bool includeNestedMembers = false) { - if (_selectExpression != null) throw new ArgumentException(CoreStrings.Before_Chunk_Cannot_Use_Select); + if (_selectExpression != null) throw new ArgumentException(CoreErrorStrings.Before_Chunk_Cannot_Use_Select); this.ToListChunkPrivate(size, done, includeNestedMembers == false ? this.GetAllFieldExpressionTreeLevel2() : this.GetAllFieldExpressionTreeLevelAll(), null); } @@ -859,7 +859,7 @@ namespace FreeSql.Internal.CommonProvider protected TSelect InternalJoin(Expression exp, SelectTableInfoType joinType) { var tb = _commonUtils.GetTableByEntity(typeof(T2)); - if (tb == null) throw new ArgumentException(CoreStrings.T2_Type_Error); + if (tb == null) throw new ArgumentException(CoreErrorStrings.T2_Type_Error); _tables.Add(new SelectTableInfo { Table = tb, Alias = $"IJ{_tables.Count}", On = null, Type = joinType }); _commonExpression.ExpressionJoinLambda(_tables, _tableRule, joinType, exp, _diymemexpWithTempQuery, _whereGlobalFilter); return this as TSelect; @@ -990,7 +990,7 @@ namespace FreeSql.Internal.CommonProvider protected string InternalGetInsertIntoToSql(string tableName, Expression select) { var tb = _orm.CodeFirst.GetTableByEntity(typeof(TTargetEntity)); - if (tb == null) throw new ArgumentException(CoreStrings.InsertInto_TypeError(typeof(TTargetEntity).DisplayCsharp())); + if (tb == null) throw new ArgumentException(CoreErrorStrings.InsertInto_TypeError(typeof(TTargetEntity).DisplayCsharp())); if (string.IsNullOrEmpty(tableName)) tableName = tb.DbName; if (_orm.CodeFirst.IsSyncStructureToLower) tableName = tableName.ToLower(); if (_orm.CodeFirst.IsSyncStructureToUpper) tableName = tableName.ToUpper(); @@ -1003,7 +1003,7 @@ namespace FreeSql.Internal.CommonProvider _commonExpression.ReadAnonymousField(_tables, _tableRule, field, map, ref index, select, null, _diymemexpWithTempQuery, _whereGlobalFilter, null, null, false); //不走 DTO 映射,不处理 IncludeMany var childs = map.Childs; - if (childs.Any() == false) throw new ArgumentException(CoreStrings.InsertInto_No_Property_Selected(typeof(TTargetEntity).DisplayCsharp())); + if (childs.Any() == false) throw new ArgumentException(CoreErrorStrings.InsertInto_No_Property_Selected(typeof(TTargetEntity).DisplayCsharp())); foreach (var col in tb.Columns.Values) { if (col.Attribute.IsIdentity && string.IsNullOrEmpty(col.DbInsertValue)) continue; @@ -1101,13 +1101,13 @@ namespace FreeSql.Internal.CommonProvider #else public Task ToDataTableByPropertyNameAsync(string[] properties, CancellationToken cancellationToken) { - if (properties?.Any() != true) throw new ArgumentException($"{CoreStrings.Properties_Cannot_Null}"); + if (properties?.Any() != true) throw new ArgumentException($"{CoreErrorStrings.Properties_Cannot_Null}"); var sbfield = new StringBuilder(); for (var propIdx = 0; propIdx < properties.Length; propIdx++) { var property = properties[propIdx]; var exp = ConvertStringPropertyToExpression(property); - if (exp == null) throw new Exception(CoreStrings.Property_Cannot_Find(property)); + if (exp == null) throw new Exception(CoreErrorStrings.Property_Cannot_Find(property)); var field = _commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, exp, true, _diymemexpWithTempQuery); if (propIdx > 0) sbfield.Append(", "); sbfield.Append(field); diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs index a06685c5d..a220402a9 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs @@ -31,7 +31,7 @@ namespace FreeSql.Internal.CommonProvider for (var a = 1; a < lambdaExp.Parameters.Count; a++) { var tb = _commonUtils.GetTableByEntity(lambdaExp.Parameters[a].Type); - if (tb == null) throw new ArgumentException(CoreStrings.Type_Error_Name(lambdaExp.Parameters[a].Name)); + if (tb == null) throw new ArgumentException(CoreErrorStrings.Type_Error_Name(lambdaExp.Parameters[a].Name)); _tables.Add(new SelectTableInfo { Table = tb, Alias = lambdaExp.Parameters[a].Name, On = null, Type = SelectTableInfoType.From }); } var exp = lambdaExp.Body; @@ -79,7 +79,7 @@ namespace FreeSql.Internal.CommonProvider case "LeftJoin": this.InternalJoin(expCall.Arguments[0], SelectTableInfoType.LeftJoin); break; case "InnerJoin": this.InternalJoin(expCall.Arguments[0], SelectTableInfoType.InnerJoin); break; case "RightJoin": this.InternalJoin(expCall.Arguments[0], SelectTableInfoType.RightJoin); break; - default: throw new NotImplementedException(CoreStrings.Not_Implemented_Name(expCall.Method.Name)); + default: throw new NotImplementedException(CoreErrorStrings.Not_Implemented_Name(expCall.Method.Name)); } } } @@ -528,7 +528,7 @@ namespace FreeSql.Internal.CommonProvider public ISelect WithMemory(IEnumerable source) { var list = source?.Select(a => (object)a).ToList(); - if (list.Any() != true) throw new Exception(CoreStrings.Cannot_Be_NULL_Name(nameof(source))); + if (list.Any() != true) throw new Exception(CoreErrorStrings.Cannot_Be_NULL_Name(nameof(source))); var sb = new StringBuilder(); (_orm.InsertOrUpdate().AsType(_tables[0].Table.Type) as InsertOrUpdateProvider) .WriteSourceSelectUnionAll(list, sb, _params, true); @@ -563,13 +563,13 @@ namespace FreeSql.Internal.CommonProvider public ISelect IncludeByPropertyName(string property, Expression>> then) { var exp = ConvertStringPropertyToExpression(property, true); - if (exp == null) throw new ArgumentException($"{CoreStrings.Cannot_Resolve_ExpressionTree(nameof(property))}"); + if (exp == null) throw new ArgumentException($"{CoreErrorStrings.Cannot_Resolve_ExpressionTree(nameof(property))}"); var memExp = exp as MemberExpression; - if (memExp == null) throw new ArgumentException($"{CoreStrings.Cannot_Resolve_ExpressionTree(nameof(property))}2"); + if (memExp == null) throw new ArgumentException($"{CoreErrorStrings.Cannot_Resolve_ExpressionTree(nameof(property))}2"); var parTb = _commonUtils.GetTableByEntity(memExp.Expression.Type); - if (parTb == null) throw new ArgumentException($"{CoreStrings.Cannot_Resolve_ExpressionTree(nameof(property))}3"); + if (parTb == null) throw new ArgumentException($"{CoreErrorStrings.Cannot_Resolve_ExpressionTree(nameof(property))}3"); var parTbref = parTb.GetTableRef(memExp.Member.Name, true, true); - if (parTbref == null) throw new ArgumentException(CoreStrings.Not_Valid_Navigation_Property(nameof(property))); + if (parTbref == null) throw new ArgumentException(CoreErrorStrings.Not_Valid_Navigation_Property(nameof(property))); switch (parTbref.RefType) { case TableRefType.ManyToMany: @@ -584,7 +584,7 @@ namespace FreeSql.Internal.CommonProvider } var navigateSelector = Expression.Lambda(funcType, exp, _tables[0].Parameter); var incMethod = this.GetType().GetMethod("IncludeMany"); - if (incMethod == null) throw new Exception(CoreStrings.RunTimeError_Reflection_IncludeMany); + if (incMethod == null) throw new Exception(CoreErrorStrings.RunTimeError_Reflection_IncludeMany); Delegate newthen = null; if (then != null) { @@ -648,10 +648,10 @@ namespace FreeSql.Internal.CommonProvider { var expBody = navigateSelector?.Body; if (expBody == null) return this; - if (expBody.NodeType != ExpressionType.MemberAccess) throw new Exception(CoreStrings.Include_ParameterType_Error_Use_MemberAccess); - if (typeof(IEnumerable).IsAssignableFrom(expBody.Type)) throw new Exception(CoreStrings.Include_ParameterType_Error_Use_IncludeMany); + if (expBody.NodeType != ExpressionType.MemberAccess) throw new Exception(CoreErrorStrings.Include_ParameterType_Error_Use_MemberAccess); + if (typeof(IEnumerable).IsAssignableFrom(expBody.Type)) throw new Exception(CoreErrorStrings.Include_ParameterType_Error_Use_IncludeMany); var tb = _commonUtils.GetTableByEntity(expBody.Type); - if (tb == null) throw new Exception(CoreStrings.Include_ParameterType_Error); + if (tb == null) throw new Exception(CoreErrorStrings.Include_ParameterType_Error); _isIncluded = true; _tables[0].Parameter = navigateSelector.Parameters[0]; @@ -686,19 +686,19 @@ namespace FreeSql.Internal.CommonProvider isbreak = true; break; } - throw new Exception(CoreStrings.Expression_Error_Use_Successive_MemberAccess_Type(exp)); + throw new Exception(CoreErrorStrings.Expression_Error_Use_Successive_MemberAccess_Type(exp)); default: - throw new Exception(CoreStrings.Expression_Error_Use_Successive_MemberAccess_Type(exp)); + throw new Exception(CoreErrorStrings.Expression_Error_Use_Successive_MemberAccess_Type(exp)); } } - if (param == null) throw new Exception(CoreStrings.Expression_Error_Use_ParameterExpression(exp)); + if (param == null) throw new Exception(CoreErrorStrings.Expression_Error_Use_ParameterExpression(exp)); return NativeTuple.Create(param, members.ToList()); } static MethodInfo GetEntityValueWithPropertyNameMethod = typeof(EntityUtilExtensions).GetMethod("GetEntityValueWithPropertyName"); static ConcurrentDictionary> _dicTypeMethod = new ConcurrentDictionary>(); public ISelect IncludeMany(Expression>> navigateSelector, Action> then = null) where TNavigate : class { - var throwNavigateSelector = new Exception(CoreStrings.IncludeMany_ParameterType_Error_Use_MemberAccess); + var throwNavigateSelector = new Exception(CoreErrorStrings.IncludeMany_ParameterType_Error_Use_MemberAccess); var expBody = navigateSelector?.Body; if (expBody == null) return this; @@ -708,7 +708,7 @@ namespace FreeSql.Internal.CommonProvider Expression> selectExp = null; while (expBody.NodeType == ExpressionType.Call) { - throwNavigateSelector = new Exception(CoreStrings.IncludeMany_ParameterTypeError(nameof(navigateSelector))); + throwNavigateSelector = new Exception(CoreErrorStrings.IncludeMany_ParameterTypeError(nameof(navigateSelector))); var callExp = (expBody as MethodCallExpression); switch (callExp.Method.Name) { @@ -720,7 +720,7 @@ namespace FreeSql.Internal.CommonProvider break; case "Select": selectExp = (callExp.Arguments[1] as Expression>); - if (selectExp?.Parameters.Count != 1) throw new Exception(CoreStrings.IncludeMany_ParameterError_OnlyUseOneParameter(nameof(navigateSelector))); + if (selectExp?.Parameters.Count != 1) throw new Exception(CoreErrorStrings.IncludeMany_ParameterError_OnlyUseOneParameter(nameof(navigateSelector))); break; default: throw throwNavigateSelector; } @@ -736,9 +736,9 @@ namespace FreeSql.Internal.CommonProvider if (tb == null) throw throwNavigateSelector; var collMemElementType = (collMem.Type.IsGenericType ? collMem.Type.GetGenericArguments().FirstOrDefault() : collMem.Type.GetElementType()); if (typeof(TNavigate) != collMemElementType) - throw new Exception(CoreStrings.IncludeMany_ParameterError_Select_ReturnConsistentType(nameof(navigateSelector), collMemElementType)); + throw new Exception(CoreErrorStrings.IncludeMany_ParameterError_Select_ReturnConsistentType(nameof(navigateSelector), collMemElementType)); var tbNav = _commonUtils.GetTableByEntity(typeof(TNavigate)); - if (tbNav == null) throw new Exception(CoreStrings.TypeError_CannotUse_IncludeMany(typeof(TNavigate).FullName)); + if (tbNav == null) throw new Exception(CoreErrorStrings.TypeError_CannotUse_IncludeMany(typeof(TNavigate).FullName)); if (collMem.Expression.NodeType != ExpressionType.Parameter) _commonExpression.ExpressionWhereLambda(_tables, _tableRule, Expression.MakeMemberAccess(collMem.Expression, tb.Properties[tb.ColumnsByCs.First().Value.CsName]), _diymemexpWithTempQuery, null, null); @@ -748,7 +748,7 @@ namespace FreeSql.Internal.CommonProvider if (whereExp == null) { tbref = tb.GetTableRef(collMem.Member.Name, true, true); - if (tbref == null) throw new Exception(CoreStrings.IncludeMany_NotValid_Navigation(tb.Type.DisplayCsharp(), collMem.Member.Name)); + if (tbref == null) throw new Exception(CoreErrorStrings.IncludeMany_NotValid_Navigation(tb.Type.DisplayCsharp(), collMem.Member.Name)); } else { diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/SelectGroupingProvider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/SelectGroupingProvider.cs index d8cbf5f5a..ecb1b4396 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/SelectGroupingProvider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/SelectGroupingProvider.cs @@ -197,7 +197,7 @@ namespace FreeSql.Internal.CommonProvider public string InternalToSql(string field) { if (string.IsNullOrEmpty(field)) - throw new ArgumentException(CoreStrings.Parameter_Field_NotSpecified); + throw new ArgumentException(CoreErrorStrings.Parameter_Field_NotSpecified); var isNestedPageSql = false; switch (_orm.Ado.DataType) diff --git a/FreeSql/Internal/CommonProvider/UpdateProvider.cs b/FreeSql/Internal/CommonProvider/UpdateProvider.cs index 003dae8bc..593a3165e 100644 --- a/FreeSql/Internal/CommonProvider/UpdateProvider.cs +++ b/FreeSql/Internal/CommonProvider/UpdateProvider.cs @@ -224,7 +224,7 @@ namespace FreeSql.Internal.CommonProvider { var ctor = typeof(UpdateJoinProvider<,>).MakeGenericType(typeof(T1), typeof(T2)) .GetConstructor(new[] { typeof(IUpdate), typeof(ISelect), typeof(Expression>) }); - if (ctor == null) throw new Exception(CoreStrings.Type_Cannot_Access_Constructor("UpdateJoinProvider<>")); + if (ctor == null) throw new Exception(CoreErrorStrings.Type_Cannot_Access_Constructor("UpdateJoinProvider<>")); return ctor.Invoke(new object[] { this, query, on }) as IUpdateJoin; } @@ -271,7 +271,7 @@ namespace FreeSql.Internal.CommonProvider if (_versionColumn != null && _source.Count > 0) { if (affrows != _source.Count) - throw new DbUpdateVersionException(CoreStrings.DbUpdateVersionException_RowLevelOptimisticLock(_source.Count, affrows), _table, sql, dbParms, affrows, _source.Select(a => (object)a)); + throw new DbUpdateVersionException(CoreErrorStrings.DbUpdateVersionException_RowLevelOptimisticLock(_source.Count, affrows), _table, sql, dbParms, affrows, _source.Select(a => (object)a)); foreach (var d in _source) { if (d is Dictionary dict) @@ -381,7 +381,7 @@ namespace FreeSql.Internal.CommonProvider } else { - if (_orm.Ado.MasterPool == null) throw new Exception(CoreStrings.MasterPool_IsNull_UseTransaction); + if (_orm.Ado.MasterPool == null) throw new Exception(CoreErrorStrings.MasterPool_IsNull_UseTransaction); using (var conn = _orm.Ado.MasterPool.Get()) { _transaction = conn.Value.BeginTransaction(); @@ -396,12 +396,12 @@ namespace FreeSql.Internal.CommonProvider execute(); } _transaction.Commit(); - _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.Commit, null)); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.Commit, null)); } catch (Exception ex) { _transaction.Rollback(); - _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.RollBack, ex)); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.RollBack, ex)); throw; } _transaction = null; @@ -537,7 +537,7 @@ namespace FreeSql.Internal.CommonProvider if (orm.Aop.AuditValueHandler == null) return; if (data == null || table == null) return; if (typeof(T1) == typeof(object) && new[] { table.Type, table.TypeLazy }.Contains(data.GetType()) == false) - throw new Exception(CoreStrings.DataType_AsType_Inconsistent(data.GetType().DisplayCsharp(), table.Type.DisplayCsharp())); + throw new Exception(CoreErrorStrings.DataType_AsType_Inconsistent(data.GetType().DisplayCsharp(), table.Type.DisplayCsharp())); foreach (var col in table.Columns.Values) { object val = col.GetValue(data); @@ -692,7 +692,7 @@ namespace FreeSql.Internal.CommonProvider if (initAssignExp == null) continue; var memberName = initExp.Bindings[a].Member.Name; if (_table.ColumnsByCsIgnore.ContainsKey(memberName)) continue; - if (_table.ColumnsByCs.TryGetValue(memberName, out var col) == false) throw new Exception(CoreStrings.NotFound_Property(memberName)); + if (_table.ColumnsByCs.TryGetValue(memberName, out var col) == false) throw new Exception(CoreErrorStrings.NotFound_Property(memberName)); var memberValue = _commonExpression.ExpressionLambdaToSql(initAssignExp.Expression, new CommonExpression.ExpTSC { isQuoteName = true, @@ -710,7 +710,7 @@ namespace FreeSql.Internal.CommonProvider { var memberName = newExp.Members[a].Name; if (_table.ColumnsByCsIgnore.ContainsKey(memberName)) continue; - if (_table.ColumnsByCs.TryGetValue(memberName, out var col) == false) throw new Exception(CoreStrings.NotFound_Property(memberName)); + if (_table.ColumnsByCs.TryGetValue(memberName, out var col) == false) throw new Exception(CoreErrorStrings.NotFound_Property(memberName)); var memberValue = _commonExpression.ExpressionLambdaToSql(newExp.Arguments[a], new CommonExpression.ExpTSC { isQuoteName = true, @@ -831,7 +831,7 @@ namespace FreeSql.Internal.CommonProvider protected string WhereCaseSource(string CsName, Func thenValue) { if (_source.Any() == false) return null; - if (_table.ColumnsByCs.ContainsKey(CsName) == false) throw new Exception(CoreStrings.NotFound_CsName_Column(CsName)); + if (_table.ColumnsByCs.ContainsKey(CsName) == false) throw new Exception(CoreErrorStrings.NotFound_CsName_Column(CsName)); if (thenValue == null) throw new ArgumentNullException(nameof(thenValue)); if (_source.Count == 0) return null; @@ -928,10 +928,10 @@ namespace FreeSql.Internal.CommonProvider } public IUpdate AsType(Type entityType) { - if (entityType == typeof(object)) throw new Exception(CoreStrings.TypeAsType_NotSupport_Object("IUpdate")); + if (entityType == typeof(object)) throw new Exception(CoreErrorStrings.TypeAsType_NotSupport_Object("IUpdate")); if (entityType == _table.Type) return this; var newtb = _commonUtils.GetTableByEntity(entityType); - _table = newtb ?? throw new Exception(CoreStrings.Type_AsType_Parameter_Error("IUpdate")); + _table = newtb ?? throw new Exception(CoreErrorStrings.Type_AsType_Parameter_Error("IUpdate")); _tempPrimarys = _table.Primarys; _versionColumn = _ignoreVersion ? null : _table.VersionColumn; if (_isAutoSyncStructure) _orm.CodeFirst.SyncStructure(entityType); @@ -1228,7 +1228,7 @@ namespace FreeSql.Internal.CommonProvider sb.Append(" \r\nWHERE "); if (_source.Any()) { - if (_tempPrimarys.Any() == false) throw new ArgumentException(CoreStrings.NoPrimaryKey_UseSetDto(_table.Type.DisplayCsharp())); + if (_tempPrimarys.Any() == false) throw new ArgumentException(CoreErrorStrings.NoPrimaryKey_UseSetDto(_table.Type.DisplayCsharp())); sb.Append('(').Append(_commonUtils.WhereItems(_tempPrimarys, "", _source, _paramsSource)).Append(')'); andTimes++; } diff --git a/FreeSql/Internal/CommonProvider/UpdateProviderAsync.cs b/FreeSql/Internal/CommonProvider/UpdateProviderAsync.cs index 6f07d10ce..45bc2f898 100644 --- a/FreeSql/Internal/CommonProvider/UpdateProviderAsync.cs +++ b/FreeSql/Internal/CommonProvider/UpdateProviderAsync.cs @@ -50,7 +50,7 @@ namespace FreeSql.Internal.CommonProvider } else { - if (_orm.Ado.MasterPool == null) throw new Exception(CoreStrings.MasterPool_IsNull_UseTransaction); + if (_orm.Ado.MasterPool == null) throw new Exception(CoreErrorStrings.MasterPool_IsNull_UseTransaction); using (var conn = await _orm.Ado.MasterPool.GetAsync()) { _transaction = conn.Value.BeginTransaction(); @@ -65,12 +65,12 @@ namespace FreeSql.Internal.CommonProvider await executeAsync(); } _transaction.Commit(); - _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.Commit, null)); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.Commit, null)); } catch (Exception ex) { _transaction.Rollback(); - _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreStrings.RollBack, ex)); + _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, CoreErrorStrings.RollBack, ex)); throw; } _transaction = null; diff --git a/FreeSql/Internal/Exception/CoreErrorStrings.cs b/FreeSql/Internal/Exception/CoreErrorStrings.cs new file mode 100644 index 000000000..95baa0b40 --- /dev/null +++ b/FreeSql/Internal/Exception/CoreErrorStrings.cs @@ -0,0 +1,2027 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Text; + +namespace FreeSql +{ + public static class CoreErrorStrings + { + public static string Language = "en"; + /// + /// [Table(AsTable = "{asTable}")] 特性值格式错误 + /// + public static string AsTable_PropertyName_FormatError(object asTable) => string.Format(Language == "cn" ? + @"[Table(AsTable = ""{0}"")] 特性值格式错误" : + @"FreeSql: [Table(AsTable=""{0}"")] Property value formatted incorrectly", asTable); + /// + /// [Table(AsTable = xx)] 设置的属性名 {atmGroupsValue} 不是 DateTime 类型 + /// + public static string AsTable_PropertyName_NotDateTime(object atmGroupsValue) => string.Format(Language == "cn" ? + @"[Table(AsTable = xx)] 设置的属性名 {0} 不是 DateTime 类型" : + @"FreeSql: The property name {0} set by [Table (AsTable = xx)] is not of type DateTime", atmGroupsValue); + /// + /// {name}: Failed to get resource {statistics} + /// + public static string Available_Failed_Get_Resource(object name, object statistics) => string.Format(Language == "cn" ? + @"{0}: Failed to get resource {1}" : + @"FreeSql: {0}: Failed to get resource {1}", name, statistics); + /// + /// {name}: An exception needs to be thrown + /// + public static string Available_Thrown_Exception(object name) => string.Format(Language == "cn" ? + @"{0}: An exception needs to be thrown" : + @"FreeSql: {0}: An exception needs to be thrown", name); + /// + /// 错误的表达式格式 {column} + /// + public static string Bad_Expression_Format(object column) => string.Format(Language == "cn" ? + @"错误的表达式格式 {0}" : + @"FreeSql: Wrong expression format {0}", column); + /// + /// Chunk 功能之前不可使用 Select + /// + public static string Before_Chunk_Cannot_Use_Select => Language == "cn" ? + @"Chunk 功能之前不可使用 Select" : + @"FreeSql: Select is not available until the Chunk function"; + /// + /// 安全起见,请务必在事务开启之后,再使用 ForUpdate + /// + public static string Begin_Transaction_Then_ForUpdate => Language == "cn" ? + @"安全起见,请务必在事务开启之后,再使用 ForUpdate" : + @"FreeSql: For security reasons, be sure to use ForUpdate after the transaction is open"; + /// + /// 不能为 null + /// + public static string Cannot_Be_NULL => Language == "cn" ? + @"不能为 null" : + @"FreeSql: Cannot be null"; + /// + /// {name} 不能为 null + /// + public static string Cannot_Be_NULL_Name(object name) => string.Format(Language == "cn" ? + @"{0} 不能为 null" : + @"FreeSql: {0} cannot be null", name); + /// + /// 无法匹配 {property} + /// + public static string Cannot_Match_Property(object property) => string.Format(Language == "cn" ? + @"无法匹配 {0}" : + @"FreeSql: Unable to match {0}", property); + /// + /// {property} 无法解析为表达式树 + /// + public static string Cannot_Resolve_ExpressionTree(object property) => string.Format(Language == "cn" ? + @"{0} 无法解析为表达式树" : + @"FreeSql: {0} cannot be resolved to an expression tree", property); + /// + /// 参数 masterConnectionString 不可为空,请检查 UseConnectionString + /// + public static string Check_UseConnectionString => Language == "cn" ? + @"参数 masterConnectionString 不可为空,请检查 UseConnectionString" : + @"FreeSql: The parameter master ConnectionString cannot be empty, check UseConnectionString"; + /// + /// 提交 + /// + public static string Commit => Language == "cn" ? + @"提交" : + @"FreeSql: Commit"; + /// + /// 连接失败,准备切换其他可用服务器 + /// + public static string Connection_Failed_Switch_Servers => Language == "cn" ? + @"连接失败,准备切换其他可用服务器" : + @"FreeSql: Connection failed, ready to switch other available servers"; + /// + /// 自定义表达式解析错误:类型 {exp3MethodDeclaringType} 需要定义 static ThreadLocal&lt;ExpressionCallContext&gt; 字段、字段、字段(重要三次提醒) + /// + public static string Custom_Expression_ParsingError(object exp3MethodDeclaringType) => string.Format(Language == "cn" ? + @"自定义表达式解析错误:类型 {0} 需要定义 static ThreadLocal 字段、字段、字段(重要三次提醒)" : + @"FreeSql: Custom expression parsing error: type {0} needs to define static ThreadLocalfield, field, field (important three reminders)", exp3MethodDeclaringType); + /// + /// Custom { 反射信息 }不能为空,格式:{ 静态方法名 }{ 空格 }{ 反射信息 } + /// + public static string Custom_Reflection_IsNotNull => Language == "cn" ? + @"Custom { 反射信息 }不能为空,格式:{ 静态方法名 }{ 空格 }{ 反射信息 }" : + @"FreeSql: Custom {Reflection Information} cannot be empty, format: {static method name}{space}{reflection information}"; + /// + /// Custom { 静态方法名 }不能为空,格式:{ 静态方法名 }{ 空格 }{ 反射信息 } + /// + public static string Custom_StaticMethodName_IsNotNull => Language == "cn" ? + @"Custom { 静态方法名 }不能为空,格式:{ 静态方法名 }{ 空格 }{ 反射信息 }" : + @"FreeSql: Custom {static method name} cannot be empty, format: {static method name}{space}{reflection information}"; + /// + /// Custom 对应的{{ 静态方法名 }}:{fiValueCustomArray} 未设置 [DynamicFilterCustomAttribute] 特性 + /// + public static string Custom_StaticMethodName_NotSet_DynamicFilterCustom(object fiValueCustomArray) => string.Format(Language == "cn" ? + @"Custom 对应的{{ 静态方法名 }}:{0} 未设置 [DynamicFilterCustomAttribute] 特性" : + @"FreeSql: Custom corresponding {{static method name}}:{0} The [DynamicFilterCustomAttribute] attribute is not set", fiValueCustomArray); + /// + /// Custom 要求 Field 应该空格分割,并且长度为 2,格式:{ 静态方法名 }{ 空格 }{ 反射信息 } + /// + public static string CustomFieldSeparatedBySpaces => Language == "cn" ? + @"Custom 要求 Field 应该空格分割,并且长度为 2,格式:{ 静态方法名 }{ 空格 }{ 反射信息 }" : + @"FreeSql: Custom requires that Fields be space-split and 2-length in the format: {static method name}{space}{reflection information}"; + /// + /// 操作的数据类型({dataDisplayCsharp}) 与 AsType({tableTypeDisplayCsharp}) 不一致,请检查。 + /// + public static string DataType_AsType_Inconsistent(object dataDisplayCsharp, object tableTypeDisplayCsharp) => string.Format(Language == "cn" ? + @"操作的数据类型({0}) 与 AsType({1}) 不一致,请检查。" : + @"FreeSql: The data type of the operation ({0}) is inconsistent with AsType ({1}). Please check.", dataDisplayCsharp, tableTypeDisplayCsharp); + /// + /// DateRange 要求 Value 应该逗号分割,并且长度为 2 + /// + public static string DateRange_Comma_Separateda_By2Char => Language == "cn" ? + @"DateRange 要求 Value 应该逗号分割,并且长度为 2" : + @"FreeSql: DateRange requires that Value be comma-separated and 2-length"; + /// + /// DateRange 要求 Value[1] 格式必须为:yyyy、yyyy-MM、yyyy-MM-dd、yyyy-MM-dd HH、yyyy、yyyy-MM-dd HH:mm + /// + public static string DateRange_DateFormat_yyyy => Language == "cn" ? + @"DateRange 要求 Value[1] 格式必须为:yyyy、yyyy-MM、yyyy-MM-dd、yyyy-MM-dd HH、yyyy、yyyy-MM-dd HH:mm" : + @"FreeSql: DateRange requires that the Value [1] format must be: yyyy, yyyy-MM, yyyy-MM-dd, yyyyy-MM-dd HH, yyyy, yyyy-MM-dd HH:mm"; + /// + /// 记录可能不存在,或者【行级乐观锁】版本过旧,更新数量{sourceCount},影响的行数{affrows}。 + /// + public static string DbUpdateVersionException_RowLevelOptimisticLock(object sourceCount, object affrows) => string.Format(Language == "cn" ? + @"记录可能不存在,或者【行级乐观锁】版本过旧,更新数量{0},影响的行数{1}。" : + @"FreeSql: The record may not exist, or the row level optimistic lock version is out of date, the number of updates {0}, the number of rows affected {1}.", sourceCount, affrows); + /// + /// SlaveConnectionString 数量与 SlaveWeights 不相同 + /// + public static string Different_Number_SlaveConnectionString_SlaveWeights => Language == "cn" ? + @"SlaveConnectionString 数量与 SlaveWeights 不相同" : + @"FreeSql: The number of SlaveConnectionStrings is not the same as SlaveWeights"; + /// + /// ColumnAttribute.Name {colattrName} 重复存在,请检查(注意:不区分大小写) + /// + public static string Duplicate_ColumnAttribute(object colattrName) => string.Format(Language == "cn" ? + @"ColumnAttribute.Name {0} 重复存在,请检查(注意:不区分大小写)" : + @"FreeSql: ColumnAttribute. Name {0} exists repeatedly, please check (note: case insensitive)", colattrName); + /// + /// 属性名 {pName} 重复存在,请检查(注意:不区分大小写) + /// + public static string Duplicate_PropertyName(object pName) => string.Format(Language == "cn" ? + @"属性名 {0} 重复存在,请检查(注意:不区分大小写)" : + @"FreeSql: Property name {0} exists repeatedly, please check (note: case insensitive)", pName); + /// + /// {function} 功能要求实体类 {tableCsName} 必须有主键 + /// + public static string Entity_Must_Primary_Key(object function, object tableCsName) => string.Format(Language == "cn" ? + @"{0} 功能要求实体类 {1} 必须有主键" : + @"FreeSql: The {0} feature requires that the entity class {1} must have a primary key", function, tableCsName); + /// + /// {tbTypeFullName} 是父子关系,但是 MySql 8.0 以下版本中不支持组合多主键 + /// + public static string Entity_MySQL_VersionsBelow8_NotSupport_Multiple_PrimaryKeys(object tbTypeFullName) => string.Format(Language == "cn" ? + @"{0} 是父子关系,但是 MySql 8.0 以下版本中不支持组合多主键" : + @"FreeSql: {0} is a parent-child relationship, but combinations of multiple primary keys are not supported in versions below MySql 8.0", tbTypeFullName); + /// + /// {tbTypeFullName} 不是父子关系,无法使用该功能 + /// + public static string Entity_NotParentChild_Relationship(object tbTypeFullName) => string.Format(Language == "cn" ? + @"{0} 不是父子关系,无法使用该功能" : + @"FreeSql: {0} is not a parent-child relationship and cannot be used", tbTypeFullName); + /// + /// 这个特别的子查询不能解析 + /// + public static string EspeciallySubquery_Cannot_Parsing => Language == "cn" ? + @"这个特别的子查询不能解析" : + @"FreeSql: This particular subquery cannot be resolved"; + /// + /// 表达式错误,它的顶级对象不是 ParameterExpression:{exp} + /// + public static string Expression_Error_Use_ParameterExpression(object exp) => string.Format(Language == "cn" ? + @"表达式错误,它的顶级对象不是 ParameterExpression:{0}" : + @"FreeSql: Expression error, its top object is not ParameterExpression:{0}", exp); + /// + /// 表达式错误,它不是连续的 MemberAccess 类型:{exp} + /// + public static string Expression_Error_Use_Successive_MemberAccess_Type(object exp) => string.Format(Language == "cn" ? + @"表达式错误,它不是连续的 MemberAccess 类型:{0}" : + @"FreeSql: Expression error, it is not a continuous MemberAccess type: {0}", exp); + /// + /// ExpressionTree 转换类型错误,值({value}),类型({valueTypeFullName}),目标类型({typeFullName}),{exMessage} + /// + public static string ExpressionTree_Convert_Type_Error(object value, object valueTypeFullName, object typeFullName, object exMessage) => string.Format(Language == "cn" ? + @"ExpressionTree 转换类型错误,值({0}),类型({1}),目标类型({2}),{3}" : + @"FreeSql: ExpressionTree conversion type error, value ({0}), type ({1}), target type ({2}), Error:{3}", value, valueTypeFullName, typeFullName, exMessage); + /// + /// 未能解析分表字段值 {sqlWhere} + /// + public static string Failed_SubTable_FieldValue(object sqlWhere) => string.Format(Language == "cn" ? + @"未能解析分表字段值 {0}" : + @"FreeSql: Failed to parse table field value {0}", sqlWhere); + /// + /// AsTable 未实现的功能 {asTable} + /// + public static string Functions_AsTable_NotImplemented(object asTable) => string.Format(Language == "cn" ? + @"AsTable 未实现的功能 {0}" : + @"FreeSql: Function {0} not implemented by AsTable", asTable); + /// + /// GBase 暂时不支持逗号以外的分割符 + /// + public static string GBase_NotSupport_OtherThanCommas => Language == "cn" ? + @"GBase 暂时不支持逗号以外的分割符" : + @"FreeSql: GBase does not support separators other than commas at this time"; + /// + /// tableName:{tableName} 生成了相同的分表名 + /// + public static string Generated_Same_SubTable(object tableName) => string.Format(Language == "cn" ? + @"tableName:{0} 生成了相同的分表名" : + @"FreeSql: TableName:{0} generated the same table name", tableName); + /// + /// GetPrimarys 传递的参数 "{primary}" 不正确,它不属于字典数据的键名 + /// + public static string GetPrimarys_ParameterError_IsNotDictKey(object primary) => string.Format(Language == "cn" ? + @"GetPrimarys 传递的参数 ""{0}"" 不正确,它不属于字典数据的键名" : + @"FreeSql: The parameter'{0}'passed by GetPrimarys is incorrect and does not belong to the key name of the dictionary data", primary); + /// + /// 已经指定了 {first},不能再指定 {second} + /// + public static string Has_Specified_Cannot_Specified_Second(object first, object second) => string.Format(Language == "cn" ? + @"已经指定了 {0},不能再指定 {1}" : + @"FreeSql: {0} has already been specified and {1} can no longer be specified", first, second); + /// + /// {tb2DbName}.{mp2MemberName} 被忽略,请检查 IsIgnore 设置,确认 get/set 为 public + /// + public static string Ignored_Check_Confirm_PublicGetSet(object tb2DbName, object mp2MemberName) => string.Format(Language == "cn" ? + @"{0}.{1} 被忽略,请检查 IsIgnore 设置,确认 get/set 为 public" : + @"FreeSql: {0}. {1} is ignored. Check the IsIgnore setting to make sure get/set is public", tb2DbName, mp2MemberName); + /// + /// Include 参数类型错误 + /// + public static string Include_ParameterType_Error => Language == "cn" ? + @"Include 参数类型错误" : + @"FreeSql: Include parameter type error"; + /// + /// Include 参数类型错误,集合属性请使用 IncludeMany + /// + public static string Include_ParameterType_Error_Use_IncludeMany => Language == "cn" ? + @"Include 参数类型错误,集合属性请使用 IncludeMany" : + @"FreeSql: Include parameter type is wrong, use IncludeMany for collection properties"; + /// + /// Include 参数类型错误,表达式类型应该为 MemberAccess + /// + public static string Include_ParameterType_Error_Use_MemberAccess => Language == "cn" ? + @"Include 参数类型错误,表达式类型应该为 MemberAccess" : + @"FreeSql: Include parameter type is wrong, expression type should be MemberAccess"; + /// + /// IncludeMany 类型 {tbTypeDisplayCsharp} 的属性 {collMemMemberName} 不是有效的导航属性,提示:IsIgnore = true 不会成为导航属性 + /// + public static string IncludeMany_NotValid_Navigation(object collMemMemberName, object tbTypeDisplayCsharp) => string.Format(Language == "cn" ? + @"IncludeMany 类型 {1} 的属性 {0} 不是有效的导航属性,提示:IsIgnore = true 不会成为导航属性" : + @"FreeSql: The property {0} of IncludeMany type {1} is not a valid navigation property, hint: IsIgnore = true will not be a navigation property", collMemMemberName, tbTypeDisplayCsharp); + /// + /// IncludeMany {navigateSelector} 参数错误,Select 只可以使用一个参数的方法,正确格式:.Select(t =&gt;new TNavigate {{}}) + /// + public static string IncludeMany_ParameterError_OnlyUseOneParameter(object navigateSelector) => string.Format(Language == "cn" ? + @"IncludeMany {0} 参数错误,Select 只可以使用一个参数的方法,正确格式:.Select(t =>new TNavigate {{}})" : + @"FreeSql: IncludeMany {0} parameter is wrong, Select can only use one parameter's method, the correct format:.Select(t =>new TNavigate{{}})", navigateSelector); + /// + /// IncludeMany {navigateSelector} 参数错误,Select lambda参数返回值必须和 {collMemElementType} 类型一致 + /// + public static string IncludeMany_ParameterError_Select_ReturnConsistentType(object navigateSelector, object collMemElementType) => string.Format(Language == "cn" ? + @"IncludeMany {0} 参数错误,Select lambda参数返回值必须和 {1} 类型一致" : + @"FreeSql: IncludeMany {0} parameter error, Select lambda parameter return value must match {1} type", navigateSelector, collMemElementType); + /// + /// IncludeMany 参数1 类型错误,表达式类型应该为 MemberAccess + /// + public static string IncludeMany_ParameterType_Error_Use_MemberAccess => Language == "cn" ? + @"IncludeMany 参数1 类型错误,表达式类型应该为 MemberAccess" : + @"FreeSql: IncludeMany parameter 1 has wrong type, expression type should be MemberAccess"; + /// + /// IncludeMany {navigateSelector} 参数类型错误,正确格式: a.collections.Take(1).Where(c =&gt;c.aid == a.id).Select(a=&gt; new TNavigate{{}}) + /// + public static string IncludeMany_ParameterTypeError(object navigateSelector) => string.Format(Language == "cn" ? + @"IncludeMany {0} 参数类型错误,正确格式: a.collections.Take(1).Where(c =>c.aid == a.id).Select(a=> new TNavigate{{}})" : + @"FreeSql: IncludeMany {0} parameter type is wrong, correct format: a.collections.Take(1).Where(c => C.A ID == a.id).Select (a => new TNavigate{{}})", navigateSelector); + /// + /// ISelect.InsertInto() 未选择属性: {displayCsharp} + /// + public static string InsertInto_No_Property_Selected(object displayCsharp) => string.Format(Language == "cn" ? + @"ISelect.InsertInto() 未选择属性: {0}" : + @"FreeSql: ISelect. InsertInto() did not select an attribute: {0}", displayCsharp); + /// + /// ISelect.InsertInto() 类型错误: {displayCsharp} + /// + public static string InsertInto_TypeError(object displayCsharp) => string.Format(Language == "cn" ? + @"ISelect.InsertInto() 类型错误: {0}" : + @"FreeSql: ISelect. InsertInto() type error: {0}", displayCsharp); + /// + /// InsertOrUpdate 功能执行 merge into 要求实体类 {CsName} 必须有主键 + /// + public static string InsertOrUpdate_Must_Primary_Key(object CsName) => string.Format(Language == "cn" ? + @"InsertOrUpdate 功能执行 merge into 要求实体类 {0} 必须有主键" : + @"FreeSql: The InsertOrUpdate function performs merge into requiring the entity class {0} to have a primary key", CsName); + /// + /// InsertOrUpdate&lt;&gt;的泛型参数 不支持 {typeofT1},请传递您的实体类 + /// + public static string InsertOrUpdate_NotSuport_Generic_UseEntity(object typeofT1) => string.Format(Language == "cn" ? + @"InsertOrUpdate<>的泛型参数 不支持 {0},请传递您的实体类" : + @"FreeSql: The generic parameter for InsertOrUpdate<>does not support {0}. Pass in your entity class", typeofT1); + /// + /// 【延时加载】功能需要安装 FreeSql.Extensions.LazyLoading.dll,可前往 nuget 下载 + /// + public static string Install_FreeSql_Extensions_LazyLoading => Language == "cn" ? + @"【延时加载】功能需要安装 FreeSql.Extensions.LazyLoading.dll,可前往 nuget 下载" : + @"FreeSql: FreeSql needs to be installed for Delayed Loading. Extensions. LazyLoading. Dll, downloadable to nuget"; + /// + /// 【延时加载】{trytbTypeName} 编译错误:{exMessage} + /// + public static string LazyLoading_CompilationError(object trytbTypeName, object exMessage, object cscode) => string.Format(Language == "cn" ? + @"【延时加载】{0} 编译错误:{1} + +{2}" : + @"FreeSql: {0} Compilation error: {1} + +{2}", trytbTypeName, exMessage, cscode); + /// + /// 【延时加载】实体类型 {trytbTypeName} 必须声明为 public + /// + public static string LazyLoading_EntityMustDeclarePublic(object trytbTypeName) => string.Format(Language == "cn" ? + @"【延时加载】实体类型 {0} 必须声明为 public" : + @"FreeSql: Entity type {0} must be declared public", trytbTypeName); + /// + /// ManyToMany 导航属性 .AsSelect() 暂时不可用于 Sum/Avg/Max/Min/First/ToOne/ToList 方法 + /// + public static string ManyToMany_AsSelect_NotSupport_Sum_Avg_etc => Language == "cn" ? + @"ManyToMany 导航属性 .AsSelect() 暂时不可用于 Sum/Avg/Max/Min/First/ToOne/ToList 方法" : + @"FreeSql: ManyToMany navigation properties. AsSelect() is temporarily unavailable for the Sum/Avg/Max/Min/First/ToOne/ToList method"; + /// + /// 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 在 {tbmidCsName} 中没有找到对应的字段,如:{midTypePropsTrytbName}{findtrytbPkCsName}、{midTypePropsTrytbName}_{findtrytbPkCsName} + /// + public static string ManyToMany_NotFound_CorrespondingField(object trytbTypeName, object pnvName, object tbmidCsName, object midTypePropsTrytbName, object findtrytbPkCsName) => string.Format(Language == "cn" ? + @"【ManyToMany】导航属性 {0}.{1} 在 {2} 中没有找到对应的字段,如:{3}{4}、{3}_{4}" : + @"FreeSql: [ManyToMany] Navigation property {0}. {1} did not find a corresponding field in {2}, such as: {3}{4}, {3}_ {4}", trytbTypeName, pnvName, tbmidCsName, midTypePropsTrytbName, findtrytbPkCsName); + /// + /// 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {tbrefTypeName} 缺少主键标识,[Column(IsPrimary = true)] + /// + public static string ManyToMany_ParsingError_EntityMissing_PrimaryKey(object trytbTypeName, object pnvName, object tbrefTypeName) => string.Format(Language == "cn" ? + @"【ManyToMany】导航属性 {0}.{1} 解析错误,实体类型 {2} 缺少主键标识,[Column(IsPrimary = true)]" : + @"FreeSql: [ManyToMany] Navigation property {0}. {1} parsing error, entity type {2} missing primary key identity, [Column (IsPrimary = true)]", trytbTypeName, pnvName, tbrefTypeName); + /// + /// 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {tbrefTypeName} 必须存在对应的 [Navigate(ManyToMany = x)] 集合属性 + /// + public static string ManyToMany_ParsingError_EntityMustHas_NavigateCollection(object trytbTypeName, object pnvName, object tbrefTypeName) => string.Format(Language == "cn" ? + @"【ManyToMany】导航属性 {0}.{1} 解析错误,实体类型 {2} 必须存在对应的 [Navigate(ManyToMany = x)] 集合属性" : + @"FreeSql: [ManyToMany] Navigation property {0}. {1} parsing error, entity type {2} must have a corresponding [Navigate (ManyToMany = x)] collection property", trytbTypeName, pnvName, tbrefTypeName); + /// + /// 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,{tbmidCsName}.{trycolCsName} 和 {trytbCsName}.{trytbPrimarysCsName} 类型不一致 + /// + public static string ManyToMany_ParsingError_InconsistentType(object trytbTypeName, object pnvName, object tbmidCsName, object trycolCsName, object trytbCsName, object trytbPrimarysCsName) => string.Format(Language == "cn" ? + @"【ManyToMany】导航属性 {0}.{1} 解析错误,{2}.{3} 和 {4}.{5} 类型不一致" : + @"FreeSql: [ManyToMany] Navigation property {0}. {1} parsing error, {2}. {3} and {4}. {5} type inconsistent", trytbTypeName, pnvName, tbmidCsName, trycolCsName, trytbCsName, trytbPrimarysCsName); + /// + /// 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,中间类 {tbmidCsName}.{midTypePropsTrytbName} 错误:{exMessage} + /// + public static string ManyToMany_ParsingError_IntermediateClass_ErrorMessage(object trytbTypeName, object pnvName, object tbmidCsName, object midTypePropsTrytbName, object exMessage) => string.Format(Language == "cn" ? + @"【ManyToMany】导航属性 {0}.{1} 解析错误,中间类 {2}.{3} 错误:{4}" : + @"FreeSql: [ManyToMany] Navigation property {0}. {1} parsing error, intermediate class {2}.{3} Error: {4}", trytbTypeName, pnvName, tbmidCsName, midTypePropsTrytbName, exMessage); + /// + /// 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,中间类 {tbmidCsName}.{midTypePropsTrytbName} 导航属性不是【ManyToOne】或【OneToOne】 + /// + public static string ManyToMany_ParsingError_IntermediateClass_NotManyToOne_OneToOne(object trytbTypeName, object pnvName, object tbmidCsName, object midTypePropsTrytbName) => string.Format(Language == "cn" ? + @"【ManyToMany】导航属性 {0}.{1} 解析错误,中间类 {2}.{3} 导航属性不是【ManyToOne】或【OneToOne】" : + @"FreeSql: [ManyToMany] Navigation property {0}. {1} parsing error, intermediate class {2}. The {3} navigation property is not ManyToOne or OneToOne", trytbTypeName, pnvName, tbmidCsName, midTypePropsTrytbName); + /// + /// 映射异常:{name} 没有一个属性名相同 + /// + public static string Mapping_Exception_HasNo_SamePropertyName(object name) => string.Format(Language == "cn" ? + @"映射异常:{0} 没有一个属性名相同" : + @"FreeSql: Mapping exception: {0} None of the property names are the same", name); + /// + /// Ado.MasterPool 值为 null,该操作无法自启用事务,请显式传递【事务对象】解决 + /// + public static string MasterPool_IsNull_UseTransaction => Language == "cn" ? + @"Ado.MasterPool 值为 null,该操作无法自启用事务,请显式传递【事务对象】解决" : + @"FreeSql: Ado. MasterPool value is null, this operation cannot self-enable transactions, please explicitly pass [transaction object] resolution"; + /// + /// 缺少 FreeSql 数据库实现包:FreeSql.Provider.{Provider}.dll,可前往 nuget 下载 + /// + public static string Missing_FreeSqlProvider_Package(object Provider) => string.Format(Language == "cn" ? + @"缺少 FreeSql 数据库实现包:FreeSql.Provider.{0}.dll,可前往 nuget 下载" : + @"FreeSql: Missing FreeSql database implementation package: FreeSql.Provider.{0}.Dll, downloadable to nuget", Provider); + /// + /// 缺少 FreeSql 数据库实现包:{dll},可前往 nuget 下载;如果存在 {dll} 依然报错(原因是环境问题导致反射不到类型),请在 UseConnectionString/UseConnectionFactory 第三个参数手工传入 typeof({providerType}) + /// + public static string Missing_FreeSqlProvider_Package_Reason(object dll, object providerType) => string.Format(Language == "cn" ? + @"缺少 FreeSql 数据库实现包:{0},可前往 nuget 下载;如果存在 {0} 依然报错(原因是环境问题导致反射不到类型),请在 UseConnectionString/UseConnectionFactory 第三个参数手工传入 typeof({2})" : + @"FreeSql: The FreeSql database implementation package is missing: {0} can be downloaded to nuget; If there is {0} and an error still occurs (due to environmental issues that cause the type to be unreflected), manually pass in typeof ({2}) in the third parameter of UseConnectionString/UseConnectionFactory", dll, providerType); + /// + /// 导航属性 {trytbTypeName}.{pnvName} 特性 [Navigate] Bind 数目({bindColumnsCount}) 与 外部主键数目({tbrefPrimarysLength}) 不相同 + /// + public static string Navigation_Bind_Number_Different(object trytbTypeName, object pnvName, object bindColumnsCount, object tbrefPrimarysLength) => string.Format(Language == "cn" ? + @"导航属性 {0}.{1} 特性 [Navigate] Bind 数目({2}) 与 外部主键数目({3}) 不相同" : + @"FreeSql: Navigation property {0}. The number of {1} attributes [Navigate] Binds ({2}) is different from the number of external primary keys ({3})", trytbTypeName, pnvName, bindColumnsCount, tbrefPrimarysLength); + /// + /// {tb2DbName}.{mp2MemberName} 导航属性集合忘了 .AsSelect() 吗?如果在 ToList(a =&gt; a.{mp2MemberName}) 中使用,请移步参考 IncludeMany 文档。 + /// + public static string Navigation_Missing_AsSelect(object tb2DbName, object mp2MemberName) => string.Format(Language == "cn" ? + @"{0}.{1} 导航属性集合忘了 .AsSelect() 吗?如果在 ToList(a => a.{1}) 中使用,请移步参考 IncludeMany 文档。" : + @"FreeSql: {0}. {1} Navigation Property Collection forgotten. AsSelect()? If used in ToList (a => a. {1}), step by step to refer to the IncludeMany document.", tb2DbName, mp2MemberName); + /// + /// 【导航属性】{trytbTypeDisplayCsharp}.{pName} 缺少 set 属性 + /// + public static string Navigation_Missing_SetProperty(object trytbTypeDisplayCsharp, object pName) => string.Format(Language == "cn" ? + @"【导航属性】{0}.{1} 缺少 set 属性" : + @"FreeSql: Navigation Properties {0}. Missing set attribute for {1}", trytbTypeDisplayCsharp, pName); + /// + /// 导航属性 {trytbTypeName}.{pnvName} 没有找到对应的字段,如:{pnvName}{findtbrefPkCsName}、{pnvName}_{findtbrefPkCsName}。或者使用 [Navigate] 特性指定关系映射。 + /// + public static string Navigation_NotFound_CorrespondingField(object trytbTypeName, object pnvName, object findtbrefPkCsName) => string.Format(Language == "cn" ? + @"导航属性 {0}.{1} 没有找到对应的字段,如:{1}{3}、{1}_{3}。或者使用 [Navigate] 特性指定关系映射。" : + @"FreeSql: Navigation property {0}. {1} No corresponding fields were found, such as: {1}{3}, {1}_ {3}. Or use the [Navigate] attribute to specify the relationship mapping.", trytbTypeName, pnvName, findtbrefPkCsName); + /// + /// 导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {trytcTypeName} 缺少主键标识,[Column(IsPrimary = true)] + /// + public static string Navigation_ParsingError_EntityMissingPrimaryKey(object trytbTypeName, object pnvName, object trytcTypeName) => string.Format(Language == "cn" ? + @"导航属性 {0}.{1} 解析错误,实体类型 {2} 缺少主键标识,[Column(IsPrimary = true)]" : + @"FreeSql: Navigation property {0}. {1} parsing error, entity type {2} missing primary key identity, [Column (IsPrimary = true)]", trytbTypeName, pnvName, trytcTypeName); + /// + /// 导航属性 {trytbTypeName}.{pnvName} 解析错误,{trytbCsName}.{trycolCsName} 和 {tbrefCsName}.{tbrefPrimarysCsName} 类型不一致 + /// + public static string Navigation_ParsingError_InconsistentType(object trytbTypeName, object pnvName, object trytbCsName, object trycolCsName, object tbrefCsName, object tbrefPrimarysCsName) => string.Format(Language == "cn" ? + @"导航属性 {0}.{1} 解析错误,{2}.{3} 和 {4}.{5} 类型不一致" : + @"FreeSql: Navigation property {0}. {1} parsing error, {2}. {3} and {4}. {5} type inconsistent", trytbTypeName, pnvName, trytbCsName, trycolCsName, tbrefCsName, tbrefPrimarysCsName); + /// + /// 导航属性 {trytbTypeName}.{pnvName} 特性 [Navigate] 解析错误,在 {tbrefTypeName} 未找到属性:{bi} + /// + public static string Navigation_ParsingError_NotFound_Property(object trytbTypeName, object pnvName, object tbrefTypeName, object bi) => string.Format(Language == "cn" ? + @"导航属性 {0}.{1} 特性 [Navigate] 解析错误,在 {2} 未找到属性:{3}" : + @"FreeSql: Navigation property {0}. {1} attribute [Navigate] parsing error, property not found at {2}: {3}", trytbTypeName, pnvName, tbrefTypeName, bi); + /// + /// {tableTypeDisplayCsharp} 没有定义主键,无法使用 SetSource,请尝试 SetDto 或者 SetSource 指定临时主键 + /// + public static string NoPrimaryKey_UseSetDto(object tableTypeDisplayCsharp) => string.Format(Language == "cn" ? + @"{0} 没有定义主键,无法使用 SetSource,请尝试 SetDto 或者 SetSource 指定临时主键" : + @"FreeSql: {0} has no primary key defined and cannot use SetSource. Try SetDto", tableTypeDisplayCsharp); + /// + /// 没有定义属性 + /// + public static string NoProperty_Defined => Language == "cn" ? + @" 没有定义属性 " : + @"FreeSql: No properties defined"; + /// + /// 未实现 + /// + public static string Not_Implemented => Language == "cn" ? + @"未实现" : + @"FreeSql: Not implemented"; + /// + /// 未实现函数表达式 {exp} 解析 + /// + public static string Not_Implemented_Expression(object exp) => string.Format(Language == "cn" ? + @"未实现函数表达式 {0} 解析" : + @"FreeSql: Function expression {0} parsing not implemented", exp); + /// + /// 未实现函数表达式 {exp} 解析,参数 {expArguments} 必须为常量 + /// + public static string Not_Implemented_Expression_ParameterUseConstant(object exp, object expArguments) => string.Format(Language == "cn" ? + @"未实现函数表达式 {0} 解析,参数 {1} 必须为常量" : + @"FreeSql: Function expression {0} parsing not implemented, parameter {1} must be constant", exp, expArguments); + /// + /// 未实现函数表达式 {exp} 解析,如果正在操作导航属性集合,请使用 .AsSelect().{exp3MethodName}({exp3ArgumentsCount}) + /// + public static string Not_Implemented_Expression_UseAsSelect(object exp, object exp3MethodName, object exp3ArgumentsCount) => string.Format(Language == "cn" ? + @"未实现函数表达式 {0} 解析,如果正在操作导航属性集合,请使用 .AsSelect().{1}({2})" : + @"FreeSql: Function expression {0} parsing is not implemented. Use if you are working on a navigation property collection. AsSelect (). {1} ({2})", exp, exp3MethodName, exp3ArgumentsCount); + /// + /// 未实现 MemberAccess 下的 Constant + /// + public static string Not_Implemented_MemberAcess_Constant => Language == "cn" ? + @"未实现 MemberAccess 下的 Constant" : + @"FreeSql: Constant under MemberAccess is not implemented"; + /// + /// 未实现 {name} + /// + public static string Not_Implemented_Name(object name) => string.Format(Language == "cn" ? + @"未实现 {0}" : + @"FreeSql: {0} is not implemented", name); + /// + /// 不支持 + /// + public static string Not_Support => Language == "cn" ? + @"不支持" : + @"FreeSql: I won't support it"; + /// + /// {dataType} 不支持 OrderByRandom 随机排序 + /// + public static string Not_Support_OrderByRandom(object dataType) => string.Format(Language == "cn" ? + @"{0} 不支持 OrderByRandom 随机排序" : + @"FreeSql: {0} does not support OrderByRandom sorting", dataType); + /// + /// {property} 不是有效的导航属性 + /// + public static string Not_Valid_Navigation_Property(object property) => string.Format(Language == "cn" ? + @"{0} 不是有效的导航属性" : + @"FreeSql: {0} is not a valid navigation property", property); + /// + /// {dbName} 找不到列 {memberName} + /// + public static string NotFound_Column(object dbName, object memberName) => string.Format(Language == "cn" ? + @"{0} 找不到列 {1}" : + @"FreeSql: {0} Column {1} not found", dbName, memberName); + /// + /// 找不到 {CsName} 对应的列 + /// + public static string NotFound_CsName_Column(object CsName) => string.Format(Language == "cn" ? + @"找不到 {0} 对应的列" : + @"FreeSql: Cannot find the column corresponding to {0}", CsName); + /// + /// 找不到属性:{memberName} + /// + public static string NotFound_Property(object memberName) => string.Format(Language == "cn" ? + @"找不到属性:{0}" : + @"FreeSql: Attribute not found: {0}", memberName); + /// + /// 找不到属性名 {proto} + /// + public static string NotFound_PropertyName(object proto) => string.Format(Language == "cn" ? + @"找不到属性名 {0}" : + @"FreeSql: Property name {0} not found", proto); + /// + /// Custom 找不到对应的{{ 反射信息 }}:{fiValueCustomArray} + /// + public static string NotFound_Reflection(object fiValueCustomArray) => string.Format(Language == "cn" ? + @"Custom 找不到对应的{{ 反射信息 }}:{0}" : + @"FreeSql: Custom could not find the corresponding {{reflection information}}:{0}", fiValueCustomArray); + /// + /// Custom 找不到对应的{{ 静态方法名 }}:{fiValueCustomArray} + /// + public static string NotFound_Static_MethodName(object fiValueCustomArray) => string.Format(Language == "cn" ? + @"Custom 找不到对应的{{ 静态方法名 }}:{0}" : + @"FreeSql: Custom could not find the corresponding {{static method name}}:{0}", fiValueCustomArray); + /// + /// [Table(AsTable = xx)] 设置的属性名 {atmGroupsValue} 不存在 + /// + public static string NotFound_Table_Property_AsTable(object atmGroupsValue) => string.Format(Language == "cn" ? + @"[Table(AsTable = xx)] 设置的属性名 {0} 不存在" : + @"FreeSql: The property name {0} set by [Table(AsTable = xx)] does not exist", atmGroupsValue); + /// + /// 未指定 UseConnectionString 或者 UseConnectionFactory + /// + public static string NotSpecified_UseConnectionString_UseConnectionFactory => Language == "cn" ? + @"未指定 UseConnectionString 或者 UseConnectionFactory" : + @"FreeSql: No UseConnectionString or UseConnectionFactory specified"; + /// + /// 【{policyName}】ObjectPool.{GetName}() timeout {totalSeconds} seconds, see: https://github.com/dotnetcore/FreeSql/discussions/1081 + /// + public static string ObjectPool_Get_Timeout(object policyName, object GetName, object totalSeconds) => string.Format(Language == "cn" ? + @"【{0}】ObjectPool.{1}() timeout {2} seconds, see: https://github.com/dotnetcore/FreeSql/discussions/1081" : + @"FreeSql: [{0}] ObjectPool. {1}() timeout {2} seconds, see: https://github.com/dotnetcore/FreeSql/discussions/1081", policyName, GetName, totalSeconds); + /// + /// 【{policyName}】ObjectPool.GetAsync() The queue is too long. Policy.AsyncGetCapacity = {asyncGetCapacity} + /// + public static string ObjectPool_GetAsync_Queue_Long(object policyName, object asyncGetCapacity) => string.Format(Language == "cn" ? + @"【{0}】ObjectPool.GetAsync() The queue is too long. Policy.AsyncGetCapacity = {1}" : + @"FreeSql: [{0}] ObjectPool. GetAsync() The queue is too long. Policy. AsyncGetCapacity = {1}", policyName, asyncGetCapacity); + /// + /// 【OneToMany】导航属性 {trytbTypeName}.{pnvName} 在 {tbrefCsName} 中没有找到对应的字段,如:{findtrytb}{findtrytbPkCsName}、{findtrytb}_{findtrytbPkCsName} + /// + public static string OneToMany_NotFound_CorrespondingField(object trytbTypeName, object pnvName, object tbrefCsName, object findtrytb, object findtrytbPkCsName) => string.Format(Language == "cn" ? + @"【OneToMany】导航属性 {0}.{1} 在 {2} 中没有找到对应的字段,如:{3}{4}、{3}_{4}" : + @"FreeSql: [OneToMany] Navigation property {0}.{1} did not find a corresponding field in {2}, such as: {3}{4}, {3}_{4}", trytbTypeName, pnvName, tbrefCsName, findtrytb, findtrytbPkCsName); + /// + /// 【OneToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,{trytbCsName}.{trytbPrimarysCsName} 和 {tbrefCsName}.{trycolCsName} 类型不一致 + /// + public static string OneToMany_ParsingError_InconsistentType(object trytbTypeName, object pnvName, object trytbCsName, object trytbPrimarysCsName, object tbrefCsName, object trycolCsName) => string.Format(Language == "cn" ? + @"【OneToMany】导航属性 {0}.{1} 解析错误,{2}.{3} 和 {4}.{5} 类型不一致" : + @"FreeSql: [OneToMany] Navigation property {0}.{1} parsing error, {2}.{3} and {4}.{5} is of inconsistent type", trytbTypeName, pnvName, trytbCsName, trytbPrimarysCsName, tbrefCsName, trycolCsName); + /// + /// 、{refpropName}{findtrytbPkCsName}、{refpropName}_{findtrytbPkCsName}。或者使用 [Navigate] 特性指定关系映射。 + /// + public static string OneToMany_UseNavigate(object refpropName, object findtrytbPkCsName) => string.Format(Language == "cn" ? + @"、{0}{1}、{0}_{1}。或者使用 [Navigate] 特性指定关系映射。" : + @", {0}{1}, {0}_{1}. Or use the [Navigate] attribute to specify the relationship mapping.", refpropName, findtrytbPkCsName); + /// + /// 参数 field 未指定 + /// + public static string Parameter_Field_NotSpecified => Language == "cn" ? + @"参数 field 未指定" : + @"FreeSql: Parameter field not specified"; + /// + /// {property} 参数错误,它不是集合属性,必须为 IList&lt;T&gt; 或者 ICollection&lt;T&gt; + /// + public static string ParameterError_NotValid_Collection(object property) => string.Format(Language == "cn" ? + @"{0} 参数错误,它不是集合属性,必须为 IList 或者 ICollection" : + @"FreeSql: The {0} parameter is incorrect, it is not a collection property and must be IListor ICollection", property); + /// + /// {property} 参数错误,它不是有效的导航属性 + /// + public static string ParameterError_NotValid_Navigation(object property) => string.Format(Language == "cn" ? + @"{0} 参数错误,它不是有效的导航属性" : + @"FreeSql: The {0} parameter is incorrect, it is not a valid navigation property", property); + /// + /// {where} 参数错误,{keyval} 不是有效的属性名,在实体类 {reftbTypeDisplayCsharp} 无法找到 + /// + public static string ParameterError_NotValid_PropertyName(object where, object keyval, object reftbTypeDisplayCsharp) => string.Format(Language == "cn" ? + @"{0} 参数错误,{1} 不是有效的属性名,在实体类 {2} 无法找到" : + @"FreeSql: {0} parameter error, {1} is not a valid property name and cannot be found in entity class {2}", where, keyval, reftbTypeDisplayCsharp); + /// + /// {property} 参数错误,格式 "TopicId=Id,多组使用逗号连接" + /// + public static string ParameterError_NotValid_UseCommas(object property) => string.Format(Language == "cn" ? + @"{0} 参数错误,格式 ""TopicId=Id,多组使用逗号连接"" " : + @"FreeSql: {0} parameter error, format ""TopicId=Id, multiple groups using comma connection""", property); + /// + /// 解析失败 {callExpMethodName} {message} + /// + public static string Parsing_Failed(object callExpMethodName, object message) => string.Format(Language == "cn" ? + @"解析失败 {0} {1}" : + @"FreeSql: Parsing failed {0} {1}", callExpMethodName, message); + /// + /// 【{policyName}】The ObjectPool has been disposed, see: https://github.com/dotnetcore/FreeSql/discussions/1079 + /// + public static string Policy_ObjectPool_Dispose(object policyName) => string.Format(Language == "cn" ? + @"【{0}】The ObjectPool has been disposed, see: https://github.com/dotnetcore/FreeSql/discussions/1079" : + @"FreeSql: [{0}] The ObjectPool has been disposed, see: https://github.com/dotnetcore/FreeSql/discussions/1079", policyName); + /// + /// 【{policyName}】状态不可用,等待后台检查程序恢复方可使用。{UnavailableExceptionMessage} + /// + public static string Policy_Status_NotAvailable(object policyName, object UnavailableExceptionMessage) => string.Format(Language == "cn" ? + @"【{0}】状态不可用,等待后台检查程序恢复方可使用。{1}" : + @"FreeSql: The {0} status is unavailable and cannot be used until the background checker is restored. {1}", policyName, UnavailableExceptionMessage); + /// + /// 属性{trytbVersionColumnCsName} 被标注为行锁(乐观锁)(IsVersion),但其必须为数字类型 或者 byte[] 或者 string,并且不可为 Nullable + /// + public static string Properties_AsRowLock_Must_Numeric_Byte(object trytbVersionColumnCsName) => string.Format(Language == "cn" ? + @"属性{0} 被标注为行锁(乐观锁)(IsVersion),但其必须为数字类型 或者 byte[] 或者 string,并且不可为 Nullable" : + @"FreeSql: The property {0} is labeled as a row lock (optimistic lock) (IsVersion), but it must be a numeric type or byte[] or string, and it cannot be Nullable", trytbVersionColumnCsName); + /// + /// properties 参数不能为空 + /// + public static string Properties_Cannot_Null => Language == "cn" ? + @"properties 参数不能为空" : + @"FreeSql: Properrties parameter cannot be empty"; + /// + /// {property} 属性名无法找到 + /// + public static string Property_Cannot_Find(object property) => string.Format(Language == "cn" ? + @"{0} 属性名无法找到" : + @"FreeSql: {0} property name not found", property); + /// + /// Range 要求 Value 应该逗号分割,并且长度为 2 + /// + public static string Range_Comma_Separateda_By2Char => Language == "cn" ? + @"Range 要求 Value 应该逗号分割,并且长度为 2" : + @"FreeSql: Range requires that Value be comma-separated and 2-length"; + /// + /// 回滚 + /// + public static string RollBack => Language == "cn" ? + @"回滚" : + @"FreeSql: RollBack"; + /// + /// 运行时错误,反射获取 IncludeMany 方法失败 + /// + public static string RunTimeError_Reflection_IncludeMany => Language == "cn" ? + @"运行时错误,反射获取 IncludeMany 方法失败" : + @"FreeSql: Runtime error, reflection failed to get IncludeMany method"; + /// + /// {qoteSql} is NULL,除非设置特性 [Column(IsNullable = false)] + /// + public static string Set_Column_IsNullable_False(object qoteSql) => string.Format(Language == "cn" ? + @"{0} is NULL,除非设置特性 [Column(IsNullable = false)]" : + @"FreeSql: {0} is NULL unless the attribute [Column (IsNullable = false)]", qoteSql); + /// + /// 分表字段值 "{dt}" 不能小于 "{beginTime} " + /// + public static string SubTableFieldValue_CannotLessThen(object dt, object beginTime) => string.Format(Language == "cn" ? + @"分表字段值 ""{0}"" 不能小于 ""{1} """ : + @"FreeSql: Subtable field value'{0}'cannot be less than'{1}'", dt, beginTime); + /// + /// 分表字段值不能为 null + /// + public static string SubTableFieldValue_IsNotNull => Language == "cn" ? + @"分表字段值不能为 null" : + @"FreeSql: Subtable field value cannot be null"; + /// + /// 分表字段值 "{columnValue}" 不能转化成 DateTime + /// + public static string SubTableFieldValue_NotConvertDateTime(object columnValue) => string.Format(Language == "cn" ? + @"分表字段值 ""{0}"" 不能转化成 DateTime" : + @"FreeSql: The tabular field value'{0}'cannot be converted to DateTime", columnValue); + /// + /// 分表字段值 "{dt}" 未匹配到分表名 + /// + public static string SubTableFieldValue_NotMatchTable(object dt) => string.Format(Language == "cn" ? + @"分表字段值 ""{0}"" 未匹配到分表名" : + @"FreeSql: Table field value'{0}'does not match table name", dt); + /// + /// T2 类型错误 + /// + public static string T2_Type_Error => Language == "cn" ? + @"T2 类型错误" : + @"FreeSql: Type T2 Error"; + /// + /// tableName 格式错误,示例:“log_{yyyyMMdd}” + /// + public static string TableName_Format_Error(object yyyyMMdd) => string.Format(Language == "cn" ? + @"tableName 格式错误,示例:“log_{0}”" : + @"FreeSql: TableName format error, example: ""log_{0}""", yyyyMMdd); + /// + /// {Type}.AsType 参数错误,请传入正确的实体类型 + /// + public static string Type_AsType_Parameter_Error(object Type) => string.Format(Language == "cn" ? + @"{0}.AsType 参数错误,请传入正确的实体类型" : + @"FreeSql: {0}. AsType parameter error, please pass in the correct entity type", Type); + /// + /// {thatFullName} 类型无法访问构造函数 + /// + public static string Type_Cannot_Access_Constructor(object thatFullName) => string.Format(Language == "cn" ? + @"{0} 类型无法访问构造函数" : + @"FreeSql: The {0} type cannot access the constructor", thatFullName); + /// + /// {name} 类型错误 + /// + public static string Type_Error_Name(object name) => string.Format(Language == "cn" ? + @"{0} 类型错误" : + @"FreeSql: {0} type error", name); + /// + /// {Type}.AsType 参数不支持指定为 object + /// + public static string TypeAsType_NotSupport_Object(object Type) => string.Format(Language == "cn" ? + @"{0}.AsType 参数不支持指定为 object" : + @"FreeSql: {0}. AsType parameter does not support specifying as object", Type); + /// + /// 类型 {typeofFullName} 错误,不能使用 IncludeMany + /// + public static string TypeError_CannotUse_IncludeMany(object typeofFullName) => string.Format(Language == "cn" ? + @"类型 {0} 错误,不能使用 IncludeMany" : + @"FreeSql: Type {0} error, IncludeMany cannot be used", typeofFullName); + /// + /// 无法解析表达式:{exp} + /// + public static string Unable_Parse_Expression(object exp) => string.Format(Language == "cn" ? + @"无法解析表达式:{0}" : + @"FreeSql: Unable to parse expression: {0}", exp); + /// + /// 无法解析表达式方法 {exp3tmpCallMethodName} + /// + public static string Unable_Parse_ExpressionMethod(object exp3tmpCallMethodName) => string.Format(Language == "cn" ? + @"无法解析表达式方法 {0}" : + @"FreeSql: Unable to parse expression method {0}", exp3tmpCallMethodName); + /// + /// 请使用 fsql.InsertDict(dict) 方法插入字典数据 + /// + public static string Use_InsertDict_Method => Language == "cn" ? + @"请使用 fsql.InsertDict(dict) 方法插入字典数据" : + @"FreeSql: Please use fsql. InsertDict (dict) method inserts dictionary data"; + /// + /// 找不到 {name} + /// + public static string S_NotFound_Name(object name) => string.Format(Language == "cn" ? + @"找不到 {0}" : + @"FreeSql: {0} not found", name); + /// + /// 从库 + /// + public static string S_SlaveDatabase => Language == "cn" ? + @"从库" : + @"FreeSql: Slave Database"; + /// + /// 主库 + /// + public static string S_MasterDatabase => Language == "cn" ? + @"主库" : + @"FreeSql: Master Database"; + /// + /// 蛋疼的 Access 插入只能一条一条执行,不支持 values(..),(..) 也不支持 select .. UNION ALL select .. + /// + public static string S_Access_InsertOnlyOneAtTime => Language == "cn" ? + @"蛋疼的 Access 插入只能一条一条执行,不支持 values(..),(..) 也不支持 select .. UNION ALL select .." : + @"FreeSql: Egg pain Accs insertion can only be performed one at a time, values (..) are not supported. (..) Select is also not supported.. UNION ALL select.."; + /// + /// BaseEntity.Initialization 初始化错误,获取到 IFreeSql 是 null + /// + public static string S_BaseEntity_Initialization_Error => Language == "cn" ? + @"BaseEntity.Initialization 初始化错误,获取到 IFreeSql 是 null" : + @"FreeSql: BaseEntity. Initialization initialization error, get IFreeSql is null"; + /// + /// 【{thisName}】Block access and wait for recovery: {exMessage} + /// + public static string S_BlockAccess_WaitForRecovery(object thisName, object exMessage) => string.Format(Language == "cn" ? + @"【{0}】Block access and wait for recovery: {1}" : + @"FreeSql: [{0}] Block access and wait for recovery: {1}", thisName, exMessage); + /// + /// 无法将 IQueryable&lt;{typeofName}&gt; 转换为 ISelect&lt;{typeofName}&gt;,因为他的实现不是 FreeSql.Extensions.Linq.QueryableProvider + /// + public static string S_CannotBeConverted_To_ISelect(object typeofName) => string.Format(Language == "cn" ? + @"无法将 IQueryable<{0}> 转换为 ISelect<{0}>,因为他的实现不是 FreeSql.Extensions.Linq.QueryableProvider" : + @"FreeSql: IQueryable<{0}> cannot be converted to ISelect<{0}> because its implementation is not FreeSql.Extensions.Linq.QueryableProvider", typeofName); + /// + /// 连接字符串错误 + /// + public static string S_ConnectionStringError => Language == "cn" ? + @"连接字符串错误" : + @"FreeSql: Connection string error"; + /// + /// 【{thisName}】连接字符串错误,请检查。 + /// + public static string S_ConnectionStringError_Check(object thisName) => string.Format(Language == "cn" ? + @"【{0}】连接字符串错误,请检查。" : + @"FreeSql: [{0}] Connection string error, please check.", thisName); + /// + /// 连接字符串错误,或者检查项目属性 &gt; 生成 &gt; 目标平台:x86 | x64,或者改用 FreeSql.Provider.SqliteCore 访问 arm 平台 + /// + public static string S_ConnectionStringError_CheckProject => Language == "cn" ? + @"连接字符串错误,或者检查项目属性 > 生成 > 目标平台:x86 | x64,或者改用 FreeSql.Provider.SqliteCore 访问 arm 平台" : + @"FreeSql: Connection string error, or check project properties > Build > Target Platform: x86 | x64, Or use FreeSql.Provider.SqliteCore accessing arm platform"; + /// + /// 【{thisName}】连接字符串错误,请检查。或者检查项目属性 &gt; 生成 &gt; 目标平台:x86 | x64,或者改用 FreeSql.Provider.SqliteCore 访问 arm 平台 + /// + public static string S_ConnectionStringError_CheckProjectConnection(object thisName) => string.Format(Language == "cn" ? + @"【{0}】连接字符串错误,请检查。或者检查项目属性 > 生成 > 目标平台:x86 | x64,或者改用 FreeSql.Provider.SqliteCore 访问 arm 平台" : + @"FreeSql: [{0}] Connection string error, please check. Or check Project Properties > Build > Target Platform: x86 | x64, Or use FreeSql.Provider.SqliteCore accessing arm platform", thisName); + /// + /// FreeSql.Provider.CustomAdapter 无法使用 CreateCommand + /// + public static string S_CustomAdapter_Cannot_Use_CreateCommand => Language == "cn" ? + @"FreeSql.Provider.CustomAdapter 无法使用 CreateCommand" : + @"FreeSql: FreeSql.Provider.CustomAdapter cannot use CreateCommand"; + /// + /// FreeSql.Provider.CustomAdapter 仅支持 UseConnectionFactory 方式构建 IFreeSql + /// + public static string S_CustomAdapter_OnlySuppport_UseConnectionFactory => Language == "cn" ? + @"FreeSql.Provider.CustomAdapter 仅支持 UseConnectionFactory 方式构建 IFreeSql" : + @"FreeSql: FreeSql.Provider.CustomAdapter only supports building IFreeSql in the UseConnectionFactory way"; + /// + /// 达梦 CodeFirst 不支持代码创建 tablespace 与 schemas {tbname} + /// + public static string S_Dameng_NotSupport_TablespaceSchemas(object tbname) => string.Format(Language == "cn" ? + @"达梦 CodeFirst 不支持代码创建 tablespace 与 schemas {0}" : + @"FreeSql: Dream CodeFirst does not support code creation tablespace and schemas {0}", tbname); + /// + /// -DB 参数错误,未提供 ConnectionString + /// + public static string S_DB_Parameter_Error_NoConnectionString => Language == "cn" ? + @"-DB 参数错误,未提供 ConnectionString" : + @"FreeSql: -DB parameter error, no ConnectionString provided"; + /// + /// -DB 参数错误,格式为:MySql,ConnectionString + /// + public static string S_DB_ParameterError => Language == "cn" ? + @"-DB 参数错误,格式为:MySql,ConnectionString" : + @"FreeSql: -DB parameter error, format: MySql, ConnectionString"; + /// + /// -DB 参数错误,不支持的类型:"{dbargs}" + /// + public static string S_DB_ParameterError_UnsupportedType(object dbargs) => string.Format(Language == "cn" ? + @"-DB 参数错误,不支持的类型:""{0}""" : + @"FreeSql: -DB parameter error, unsupported type: ""{0}""", dbargs); + /// + /// {method} 是 FreeSql.Provider.{provider} 特有的功能 + /// + public static string S_Features_Unique(object method, object provider) => string.Format(Language == "cn" ? + @"{0} 是 FreeSql.Provider.{1} 特有的功能" : + @"FreeSql: {0} is FreeSql.Provider.{1} specific features", method, provider); + /// + /// fsql.InsertOrUpdate Sqlite 无法完成 UpdateColumns 操作 + /// + public static string S_InsertOrUpdate_Unable_UpdateColumns => Language == "cn" ? + @"fsql.InsertOrUpdate Sqlite 无法完成 UpdateColumns 操作" : + @"FreeSql: InsertOrUpdate Sqlite was unable to complete the UpdateColumns operation"; + /// + /// MygisGeometry.Parse 未实现 "{wkt}" + /// + public static string S_MygisGeometry_NotImplement(object wkt) => string.Format(Language == "cn" ? + @"MygisGeometry.Parse 未实现 ""{0}""" : + @"FreeSql: MygisGeometry. Parse does not implement ""{0}""", wkt); + /// + /// -NameOptions 参数错误,格式为:0,0,0,0 + /// + public static string S_NameOptions_Incorrect => Language == "cn" ? + @"-NameOptions 参数错误,格式为:0,0,0,0" : + @"FreeSql: -NameOptions parameter incorrect, format: 0,0,0,0"; + /// + /// 未实现该功能 + /// + public static string S_Not_Implemented_Feature => Language == "cn" ? + @" 未实现该功能" : + @"FreeSql: This function is not implemented"; + /// + /// 未实现错误,请反馈给作者 + /// + public static string S_Not_Implemented_FeedBack => Language == "cn" ? + @"未实现错误,请反馈给作者" : + @"FreeSql: Unrealized error, please feedback to author"; + /// + /// FreeSql.Provider.{providerName} 未实现 Skip/Offset 功能,如果需要分页请使用判断上一次 id + /// + public static string S_NotImplementSkipOffset(object providerName) => string.Format(Language == "cn" ? + @"FreeSql.Provider.{0} 未实现 Skip/Offset 功能,如果需要分页请使用判断上一次 id" : + @"FreeSql: FreeSql.Provider.{0} does not implement Skip/Offset functionality, use to determine last ID if paging is required", providerName); + /// + /// 旧表(OldName):{tboldname} 存在,数据库已存在 {tbname} 表,无法改名 + /// + public static string S_OldTableExists(object tboldname, object tbname) => string.Format(Language == "cn" ? + @"旧表(OldName):{0} 存在,数据库已存在 {1} 表,无法改名" : + @"FreeSql: Old table (OldName): {0} exists, database already exists {1} table, cannot rename", tboldname, tbname); + /// + /// OnConflictDoUpdate 功能要求实体类必须设置 IsPrimary 属性 + /// + public static string S_OnConflictDoUpdate_MustIsPrimary => Language == "cn" ? + @"OnConflictDoUpdate 功能要求实体类必须设置 IsPrimary 属性" : + @"FreeSql: The OnConflictDoUpdate feature requires that entity classes must set the IsPrimary property"; + /// + /// Oracle CodeFirst 不支持代码创建 tablespace 与 schemas {tbname} + /// + public static string S_Oracle_NotSupport_TablespaceSchemas(object tbname) => string.Format(Language == "cn" ? + @"Oracle CodeFirst 不支持代码创建 tablespace 与 schemas {0}" : + @"FreeSql: Oracle CodeFirst does not support code creation of tablespace and schemas {0}", tbname); + /// + /// 解析失败 {callExpMethodName} {message},提示:可以使用扩展方法 IQueryable.RestoreToSelect() 还原为 ISelect 再查询 + /// + public static string S_ParsingFailed_UseRestoreToSelect(object callExpMethodName, object message) => string.Format(Language == "cn" ? + @"解析失败 {0} {1},提示:可以使用扩展方法 IQueryable.RestoreToSelect() 还原为 ISelect 再查询" : + @"FreeSql: Parsing failed {0} {1}, hint: Extension method IQueryable can be used. RestoreToSelect() reverted to ISelect re-query", callExpMethodName, message); + /// + /// fsql.InsertOrUpdate + IfExistsDoNothing + {providerName}要求实体类 {tableCsName} 必须有主键 + /// + public static string S_RequiresEntityPrimaryKey(object providerName, object tableCsName) => string.Format(Language == "cn" ? + @"fsql.InsertOrUpdate + IfExistsDoNothing + {0}要求实体类 {1} 必须有主键" : + @"FreeSql: InsertOrUpdate + IfExistsDoNothing + {0} requires the entity class {1} to have a primary key", providerName, tableCsName); + /// + /// SelectMany 错误的类型:{typeFullName} + /// + public static string S_SelectManayErrorType(object typeFullName) => string.Format(Language == "cn" ? + @"SelectMany 错误的类型:{0}" : + @"FreeSql: SelectMany error type: {0}", typeFullName); + /// + /// 类型 {objentityTypeFullName} 不可迁移 + /// + public static string S_Type_IsNot_Migrable(object objentityTypeFullName) => string.Format(Language == "cn" ? + @"类型 {0} 不可迁移" : + @"FreeSql: Type {0} is not migrable", objentityTypeFullName); + /// + /// 类型 {objentityTypeFullName} 不可迁移,可迁移属性0个 + /// + public static string S_Type_IsNot_Migrable_0Attributes(object objentityTypeFullName) => string.Format(Language == "cn" ? + @"类型 {0} 不可迁移,可迁移属性0个" : + @"FreeSql: Type {0} is not migrable, migratable property 0", objentityTypeFullName); + /// + /// 未实现 {columnDbTypeTextFull} 类型映射 + /// + public static string S_TypeMappingNotImplemented(object columnDbTypeTextFull) => string.Format(Language == "cn" ? + @"未实现 {0} 类型映射" : + @"FreeSql: {0} type mapping not implemented", columnDbTypeTextFull); + /// + /// 错误的参数设置:{args} + /// + public static string S_WrongParameter(object args) => string.Format(Language == "cn" ? + @"错误的参数设置:{0}" : + @"FreeSql: Wrong parameter setting: {0}", args); + /// + /// 对象池 + /// + public static string S_ObjectPool => Language == "cn" ? + @"对象池" : + @"FreeSql: Object pool"; + } +} + +/* +var xml1 = ` + + FreeSql: [Table(AsTable="{asTable}")] Property value formatted incorrectly + + + FreeSql: The property name {atmGroupsValue} set by [Table (AsTable = xx)] is not of type DateTime + + + FreeSql: {name}: Failed to get resource {statistics} + + + FreeSql: {name}: An exception needs to be thrown + + + FreeSql: Wrong expression format {column} + + + FreeSql: Select is not available until the Chunk function + + + FreeSql: For security reasons, be sure to use ForUpdate after the transaction is open + + + FreeSql: Cannot be null + + + FreeSql: {name} cannot be null + + + FreeSql: Unable to match {property} + + + FreeSql: {property} cannot be resolved to an expression tree + + + FreeSql: The parameter master ConnectionString cannot be empty, check UseConnectionString + + + FreeSql: Commit + + + FreeSql: Connection failed, ready to switch other available servers + + + FreeSql: Custom expression parsing error: type {exp3MethodDeclaringType} needs to define static ThreadLocal<ExpressionCallContext>field, field, field (important three reminders) + + + FreeSql: Custom {Reflection Information} cannot be empty, format: {static method name}{space}{reflection information} + + + FreeSql: Custom {static method name} cannot be empty, format: {static method name}{space}{reflection information} + + + FreeSql: Custom corresponding {{static method name}}:{fiValueCustomArray} The [DynamicFilterCustomAttribute] attribute is not set + + + FreeSql: Custom requires that Fields be space-split and 2-length in the format: {static method name}{space}{reflection information} + + + FreeSql: The data type of the operation ({dataDisplayCsharp}) is inconsistent with AsType ({tableTypeDisplayCsharp}). Please check. + + + FreeSql: DateRange requires that Value be comma-separated and 2-length + + + FreeSql: DateRange requires that the Value [1] format must be: yyyy, yyyy-MM, yyyy-MM-dd, yyyyy-MM-dd HH, yyyy, yyyy-MM-dd HH:mm + + + FreeSql: The record may not exist, or the row level optimistic lock version is out of date, the number of updates {sourceCount}, the number of rows affected {affrows}. + + + FreeSql: The number of SlaveConnectionStrings is not the same as SlaveWeights + + + FreeSql: ColumnAttribute. Name {colattrName} exists repeatedly, please check (note: case insensitive) + + + FreeSql: Property name {pName} exists repeatedly, please check (note: case insensitive) + + + FreeSql: The {function} feature requires that the entity class {tableCsName} must have a primary key + + + FreeSql: {tbTypeFullName} is a parent-child relationship, but combinations of multiple primary keys are not supported in versions below MySql 8.0 + + + FreeSql: {tbTypeFullName} is not a parent-child relationship and cannot be used + + + FreeSql: This particular subquery cannot be resolved + + + FreeSql: Expression error, its top object is not ParameterExpression:{exp} + + + FreeSql: Expression error, it is not a continuous MemberAccess type: {exp} + + + FreeSql: ExpressionTree conversion type error, value ({value}), type ({valueTypeFullName}), target type ({typeFullName}), Error:{exMessage} + + + FreeSql: Failed to parse table field value {sqlWhere} + + + FreeSql: Function {asTable} not implemented by AsTable + + + FreeSql: GBase does not support separators other than commas at this time + + + FreeSql: TableName:{tableName} generated the same table name + + + FreeSql: The parameter'{primary}'passed by GetPrimarys is incorrect and does not belong to the key name of the dictionary data + + + FreeSql: {first} has already been specified and {second} can no longer be specified + + + FreeSql: {tb2DbName}. {mp2MemberName} is ignored. Check the IsIgnore setting to make sure get/set is public + + + FreeSql: Include parameter type error + + + FreeSql: Include parameter type is wrong, use IncludeMany for collection properties + + + FreeSql: Include parameter type is wrong, expression type should be MemberAccess + + + FreeSql: The property {collMemMemberName} of IncludeMany type {tbTypeDisplayCsharp} is not a valid navigation property, hint: IsIgnore = true will not be a navigation property + + + FreeSql: IncludeMany {navigateSelector} parameter is wrong, Select can only use one parameter's method, the correct format:.Select(t =>new TNavigate{{}}) + + + FreeSql: IncludeMany {navigateSelector} parameter error, Select lambda parameter return value must match {collMemElementType} type + + + FreeSql: IncludeMany parameter 1 has wrong type, expression type should be MemberAccess + + + FreeSql: IncludeMany {navigateSelector} parameter type is wrong, correct format: a.collections.Take(1).Where(c => C.A ID == a.id).Select (a => new TNavigate{{}}) + + + FreeSql: ISelect. InsertInto() did not select an attribute: {displayCsharp} + + + FreeSql: ISelect. InsertInto() type error: {displayCsharp} + + + FreeSql: The InsertOrUpdate function performs merge into requiring the entity class {CsName} to have a primary key + + + FreeSql: The generic parameter for InsertOrUpdate<>does not support {typeofT1}. Pass in your entity class + + + FreeSql: FreeSql needs to be installed for Delayed Loading. Extensions. LazyLoading. Dll, downloadable to nuget + + + FreeSql: {trytbTypeName} Compilation error: {exMessage}\r\n\r\n{cscode} + + + FreeSql: Entity type {trytbTypeName} must be declared public + + + FreeSql: ManyToMany navigation properties. AsSelect() is temporarily unavailable for the Sum/Avg/Max/Min/First/ToOne/ToList method + + + FreeSql: [ManyToMany] Navigation property {trytbTypeName}. {pnvName} did not find a corresponding field in {tbmidCsName}, such as: {midTypePropsTrytbName}{findtrytbPkCsName}, {midTypePropsTrytbName}_ {findtrytbPkCsName} + + + FreeSql: [ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, entity type {tbrefTypeName} missing primary key identity, [Column (IsPrimary = true)] + + + FreeSql: [ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, entity type {tbrefTypeName} must have a corresponding [Navigate (ManyToMany = x)] collection property + + + FreeSql: [ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, {tbmidCsName}. {trycolCsName} and {trytbCsName}. {trytbPrimarysCsName} type inconsistent + + + FreeSql: [ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, intermediate class {tbmidCsName}.{midTypePropsTrytbName} Error: {exMessage} + + + FreeSql: [ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, intermediate class {tbmidCsName}. The {midTypePropsTrytbName} navigation property is not ManyToOne or OneToOne + + + FreeSql: Mapping exception: {name} None of the property names are the same + + + FreeSql: Ado. MasterPool value is null, this operation cannot self-enable transactions, please explicitly pass [transaction object] resolution + + + FreeSql: Missing FreeSql database implementation package: FreeSql.Provider.{Provider}.Dll, downloadable to nuget + + + FreeSql: The FreeSql database implementation package is missing: {dll} can be downloaded to nuget; If there is {dll} and an error still occurs (due to environmental issues that cause the type to be unreflected), manually pass in typeof ({providerType}) in the third parameter of UseConnectionString/UseConnectionFactory + + + FreeSql: Navigation property {trytbTypeName}. The number of {pnvName} attributes [Navigate] Binds ({bindColumnsCount}) is different from the number of external primary keys ({tbrefPrimarysLength}) + + + FreeSql: {tb2DbName}. {mp2MemberName} Navigation Property Collection forgotten. AsSelect()? If used in ToList (a => a. {mp2MemberName}), step by step to refer to the IncludeMany document. + + + FreeSql: Navigation Properties {trytbTypeDisplayCsharp}. Missing set attribute for {pName} + + + FreeSql: Navigation property {trytbTypeName}. {pnvName} No corresponding fields were found, such as: {pnvName}{findtbrefPkCsName}, {pnvName}_ {findtbrefPkCsName}. Or use the [Navigate] attribute to specify the relationship mapping. + + + FreeSql: Navigation property {trytbTypeName}. {pnvName} parsing error, entity type {trytcTypeName} missing primary key identity, [Column (IsPrimary = true)] + + + FreeSql: Navigation property {trytbTypeName}. {pnvName} parsing error, {trytbCsName}. {trycolCsName} and {tbrefCsName}. {tbrefPrimarysCsName} type inconsistent + + + FreeSql: Navigation property {trytbTypeName}. {pnvName} attribute [Navigate] parsing error, property not found at {tbrefTypeName}: {bi} + + + FreeSql: {tableTypeDisplayCsharp} has no primary key defined and cannot use SetSource. Try SetDto + + + FreeSql: No properties defined + + + FreeSql: Not implemented + + + FreeSql: Function expression {exp} parsing not implemented + + + FreeSql: Function expression {exp} parsing not implemented, parameter {expArguments} must be constant + + + FreeSql: Function expression {exp} parsing is not implemented. Use if you are working on a navigation property collection. AsSelect (). {exp3MethodName} ({exp3ArgumentsCount}) + + + FreeSql: Constant under MemberAccess is not implemented + + + FreeSql: {name} is not implemented + + + FreeSql: I won't support it + + + FreeSql: {dataType} does not support OrderByRandom sorting + + + FreeSql: {property} is not a valid navigation property + + + FreeSql: {dbName} Column {memberName} not found + + + FreeSql: Cannot find the column corresponding to {CsName} + + + FreeSql: Attribute not found: {memberName} + + + FreeSql: Property name {proto} not found + + + FreeSql: Custom could not find the corresponding {{reflection information}}:{fiValueCustomArray} + + + FreeSql: Custom could not find the corresponding {{static method name}}:{fiValueCustomArray} + + + FreeSql: The property name {atmGroupsValue} set by [Table(AsTable = xx)] does not exist + + + FreeSql: No UseConnectionString or UseConnectionFactory specified + + + FreeSql: [{policyName}] ObjectPool. {GetName}() timeout {totalSeconds} seconds, see: https://github.com/dotnetcore/FreeSql/discussions/1081 + + + FreeSql: [{policyName}] ObjectPool. GetAsync() The queue is too long. Policy. AsyncGetCapacity = {asyncGetCapacity} + + + FreeSql: [OneToMany] Navigation property {trytbTypeName}.{pnvName} did not find a corresponding field in {tbrefCsName}, such as: {findtrytb}{findtrytbPkCsName}, {findtrytb}_{findtrytbPkCsName} + + + FreeSql: [OneToMany] Navigation property {trytbTypeName}.{pnvName} parsing error, {trytbCsName}.{trytbPrimarysCsName} and {tbrefCsName}.{trycolCsName} is of inconsistent type + + + , {refpropName}{findtrytbPkCsName}, {refpropName}_{findtrytbPkCsName}. Or use the [Navigate] attribute to specify the relationship mapping. + + + FreeSql: Parameter field not specified + + + FreeSql: The {property} parameter is incorrect, it is not a collection property and must be IList<T>or ICollection<T> + + + FreeSql: The {property} parameter is incorrect, it is not a valid navigation property + + + FreeSql: {where} parameter error, {keyval} is not a valid property name and cannot be found in entity class {reftbTypeDisplayCsharp} + + + FreeSql: {property} parameter error, format "TopicId=Id, multiple groups using comma connection" + + + FreeSql: Parsing failed {callExpMethodName} {message} + + + FreeSql: [{policyName}] The ObjectPool has been disposed, see: https://github.com/dotnetcore/FreeSql/discussions/1079 + + + FreeSql: The {policyName} status is unavailable and cannot be used until the background checker is restored. {UnavailableExceptionMessage} + + + FreeSql: The property {trytbVersionColumnCsName} is labeled as a row lock (optimistic lock) (IsVersion), but it must be a numeric type or byte[] or string, and it cannot be Nullable + + + FreeSql: Properrties parameter cannot be empty + + + FreeSql: {property} property name not found + + + FreeSql: Range requires that Value be comma-separated and 2-length + + + FreeSql: RollBack + + + FreeSql: Runtime error, reflection failed to get IncludeMany method + + + FreeSql: {qoteSql} is NULL unless the attribute [Column (IsNullable = false)] + + + FreeSql: Subtable field value'{dt}'cannot be less than'{beginTime}' + + + FreeSql: Subtable field value cannot be null + + + FreeSql: The tabular field value'{columnValue}'cannot be converted to DateTime + + + FreeSql: Table field value'{dt}'does not match table name + + + FreeSql: Type T2 Error + + + FreeSql: TableName format error, example: "log_{yyyyMMdd}" + + + FreeSql: {Type}. AsType parameter error, please pass in the correct entity type + + + FreeSql: The {thatFullName} type cannot access the constructor + + + FreeSql: {name} type error + + + FreeSql: {Type}. AsType parameter does not support specifying as object + + + FreeSql: Type {typeofFullName} error, IncludeMany cannot be used + + + FreeSql: Unable to parse expression: {exp} + + + FreeSql: Unable to parse expression method {exp3tmpCallMethodName} + + + FreeSql: Please use fsql. InsertDict (dict) method inserts dictionary data + + + FreeSql: {name} not found + + + FreeSql: Slave Database + + + FreeSql: Master Database + + + FreeSql: Egg pain Accs insertion can only be performed one at a time, values (..) are not supported. (..) Select is also not supported.. UNION ALL select.. + + + FreeSql: BaseEntity. Initialization initialization error, get IFreeSql is null + + + FreeSql: [{thisName}] Block access and wait for recovery: {exMessage} + + + FreeSql: IQueryable<{typeofName}> cannot be converted to ISelect<{typeofName}> because its implementation is not FreeSql.Extensions.Linq.QueryableProvider + + + FreeSql: Connection string error + + + FreeSql: [{thisName}] Connection string error, please check. + + + FreeSql: Connection string error, or check project properties > Build > Target Platform: x86 | x64, Or use FreeSql.Provider.SqliteCore accessing arm platform + + + FreeSql: [{thisName}] Connection string error, please check. Or check Project Properties > Build > Target Platform: x86 | x64, Or use FreeSql.Provider.SqliteCore accessing arm platform + + + FreeSql: FreeSql.Provider.CustomAdapter cannot use CreateCommand + + + FreeSql: FreeSql.Provider.CustomAdapter only supports building IFreeSql in the UseConnectionFactory way + + + FreeSql: Dream CodeFirst does not support code creation tablespace and schemas {tbname} + + + FreeSql: -DB parameter error, no ConnectionString provided + + + FreeSql: -DB parameter error, format: MySql, ConnectionString + + + FreeSql: -DB parameter error, unsupported type: "{dbargs}" + + + FreeSql: {method} is FreeSql.Provider.{provider} specific features + + + FreeSql: InsertOrUpdate Sqlite was unable to complete the UpdateColumns operation + + + FreeSql: MygisGeometry. Parse does not implement "{wkt}" + + + FreeSql: -NameOptions parameter incorrect, format: 0,0,0,0 + + + FreeSql: This function is not implemented + + + FreeSql: Unrealized error, please feedback to author + + + FreeSql: FreeSql.Provider.{providerName} does not implement Skip/Offset functionality, use to determine last ID if paging is required + + + FreeSql: Old table (OldName): {tboldname} exists, database already exists {tbname} table, cannot rename + + + FreeSql: The OnConflictDoUpdate feature requires that entity classes must set the IsPrimary property + + + FreeSql: Oracle CodeFirst does not support code creation of tablespace and schemas {tbname} + + + FreeSql: Parsing failed {callExpMethodName} {message}, hint: Extension method IQueryable can be used. RestoreToSelect() reverted to ISelect re-query + + + FreeSql: InsertOrUpdate + IfExistsDoNothing + {providerName} requires the entity class {tableCsName} to have a primary key + + + FreeSql: SelectMany error type: {typeFullName} + + + FreeSql: Type {objentityTypeFullName} is not migrable + + + FreeSql: Type {objentityTypeFullName} is not migrable, migratable property 0 + + + FreeSql: {columnDbTypeTextFull} type mapping not implemented + + + FreeSql: Wrong parameter setting: {args} + + + FreeSql: Object pool + `; + +var xml2= ` + [Table(AsTable = "{asTable}")] 特性值格式错误 + + + [Table(AsTable = xx)] 设置的属性名 {atmGroupsValue} 不是 DateTime 类型 + + + {name}: Failed to get resource {statistics} + + + {name}: An exception needs to be thrown + + + 错误的表达式格式 {column} + + + Chunk 功能之前不可使用 Select + + + 安全起见,请务必在事务开启之后,再使用 ForUpdate + + + 不能为 null + + + {name} 不能为 null + + + 无法匹配 {property} + + + {property} 无法解析为表达式树 + + + 参数 masterConnectionString 不可为空,请检查 UseConnectionString + + + 提交 + + + 连接失败,准备切换其他可用服务器 + + + 自定义表达式解析错误:类型 {exp3MethodDeclaringType} 需要定义 static ThreadLocal<ExpressionCallContext> 字段、字段、字段(重要三次提醒) + + + Custom { 反射信息 }不能为空,格式:{ 静态方法名 }{ 空格 }{ 反射信息 } + + + Custom { 静态方法名 }不能为空,格式:{ 静态方法名 }{ 空格 }{ 反射信息 } + + + Custom 对应的{{ 静态方法名 }}:{fiValueCustomArray} 未设置 [DynamicFilterCustomAttribute] 特性 + + + Custom 要求 Field 应该空格分割,并且长度为 2,格式:{ 静态方法名 }{ 空格 }{ 反射信息 } + + + 操作的数据类型({dataDisplayCsharp}) 与 AsType({tableTypeDisplayCsharp}) 不一致,请检查。 + + + DateRange 要求 Value 应该逗号分割,并且长度为 2 + + + DateRange 要求 Value[1] 格式必须为:yyyy、yyyy-MM、yyyy-MM-dd、yyyy-MM-dd HH、yyyy、yyyy-MM-dd HH:mm + + + 记录可能不存在,或者【行级乐观锁】版本过旧,更新数量{sourceCount},影响的行数{affrows}。 + + + SlaveConnectionString 数量与 SlaveWeights 不相同 + + + ColumnAttribute.Name {colattrName} 重复存在,请检查(注意:不区分大小写) + + + 属性名 {pName} 重复存在,请检查(注意:不区分大小写) + + + {function} 功能要求实体类 {tableCsName} 必须有主键 + + + {tbTypeFullName} 是父子关系,但是 MySql 8.0 以下版本中不支持组合多主键 + + + {tbTypeFullName} 不是父子关系,无法使用该功能 + + + 这个特别的子查询不能解析 + + + 表达式错误,它的顶级对象不是 ParameterExpression:{exp} + + + 表达式错误,它不是连续的 MemberAccess 类型:{exp} + + + ExpressionTree 转换类型错误,值({value}),类型({valueTypeFullName}),目标类型({typeFullName}),{exMessage} + + + 未能解析分表字段值 {sqlWhere} + + + AsTable 未实现的功能 {asTable} + + + GBase 暂时不支持逗号以外的分割符 + + + tableName:{tableName} 生成了相同的分表名 + + + GetPrimarys 传递的参数 "{primary}" 不正确,它不属于字典数据的键名 + + + 已经指定了 {first},不能再指定 {second} + + + {tb2DbName}.{mp2MemberName} 被忽略,请检查 IsIgnore 设置,确认 get/set 为 public + + + Include 参数类型错误 + + + Include 参数类型错误,集合属性请使用 IncludeMany + + + Include 参数类型错误,表达式类型应该为 MemberAccess + + + IncludeMany 类型 {tbTypeDisplayCsharp} 的属性 {collMemMemberName} 不是有效的导航属性,提示:IsIgnore = true 不会成为导航属性 + + + IncludeMany {navigateSelector} 参数错误,Select 只可以使用一个参数的方法,正确格式:.Select(t =>new TNavigate {{}}) + + + IncludeMany {navigateSelector} 参数错误,Select lambda参数返回值必须和 {collMemElementType} 类型一致 + + + IncludeMany 参数1 类型错误,表达式类型应该为 MemberAccess + + + IncludeMany {navigateSelector} 参数类型错误,正确格式: a.collections.Take(1).Where(c =>c.aid == a.id).Select(a=> new TNavigate{{}}) + + + ISelect.InsertInto() 未选择属性: {displayCsharp} + + + ISelect.InsertInto() 类型错误: {displayCsharp} + + + InsertOrUpdate 功能执行 merge into 要求实体类 {CsName} 必须有主键 + + + InsertOrUpdate<>的泛型参数 不支持 {typeofT1},请传递您的实体类 + + + 【延时加载】功能需要安装 FreeSql.Extensions.LazyLoading.dll,可前往 nuget 下载 + + + 【延时加载】{trytbTypeName} 编译错误:{exMessage}\r\n\r\n{cscode} + + + 【延时加载】实体类型 {trytbTypeName} 必须声明为 public + + + ManyToMany 导航属性 .AsSelect() 暂时不可用于 Sum/Avg/Max/Min/First/ToOne/ToList 方法 + + + 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 在 {tbmidCsName} 中没有找到对应的字段,如:{midTypePropsTrytbName}{findtrytbPkCsName}、{midTypePropsTrytbName}_{findtrytbPkCsName} + + + 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {tbrefTypeName} 缺少主键标识,[Column(IsPrimary = true)] + + + 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {tbrefTypeName} 必须存在对应的 [Navigate(ManyToMany = x)] 集合属性 + + + 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,{tbmidCsName}.{trycolCsName} 和 {trytbCsName}.{trytbPrimarysCsName} 类型不一致 + + + 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,中间类 {tbmidCsName}.{midTypePropsTrytbName} 错误:{exMessage} + + + 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,中间类 {tbmidCsName}.{midTypePropsTrytbName} 导航属性不是【ManyToOne】或【OneToOne】 + + + 映射异常:{name} 没有一个属性名相同 + + + Ado.MasterPool 值为 null,该操作无法自启用事务,请显式传递【事务对象】解决 + + + 缺少 FreeSql 数据库实现包:FreeSql.Provider.{Provider}.dll,可前往 nuget 下载 + + + 缺少 FreeSql 数据库实现包:{dll},可前往 nuget 下载;如果存在 {dll} 依然报错(原因是环境问题导致反射不到类型),请在 UseConnectionString/UseConnectionFactory 第三个参数手工传入 typeof({providerType}) + + + 导航属性 {trytbTypeName}.{pnvName} 特性 [Navigate] Bind 数目({bindColumnsCount}) 与 外部主键数目({tbrefPrimarysLength}) 不相同 + + + {tb2DbName}.{mp2MemberName} 导航属性集合忘了 .AsSelect() 吗?如果在 ToList(a => a.{mp2MemberName}) 中使用,请移步参考 IncludeMany 文档。 + + + 【导航属性】{trytbTypeDisplayCsharp}.{pName} 缺少 set 属性 + + + 导航属性 {trytbTypeName}.{pnvName} 没有找到对应的字段,如:{pnvName}{findtbrefPkCsName}、{pnvName}_{findtbrefPkCsName}。或者使用 [Navigate] 特性指定关系映射。 + + + 导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {trytcTypeName} 缺少主键标识,[Column(IsPrimary = true)] + + + 导航属性 {trytbTypeName}.{pnvName} 解析错误,{trytbCsName}.{trycolCsName} 和 {tbrefCsName}.{tbrefPrimarysCsName} 类型不一致 + + + 导航属性 {trytbTypeName}.{pnvName} 特性 [Navigate] 解析错误,在 {tbrefTypeName} 未找到属性:{bi} + + + {tableTypeDisplayCsharp} 没有定义主键,无法使用 SetSource,请尝试 SetDto 或者 SetSource 指定临时主键 + + + 没有定义属性 + + + 未实现 + + + 未实现函数表达式 {exp} 解析 + + + 未实现函数表达式 {exp} 解析,参数 {expArguments} 必须为常量 + + + 未实现函数表达式 {exp} 解析,如果正在操作导航属性集合,请使用 .AsSelect().{exp3MethodName}({exp3ArgumentsCount}) + + + 未实现 MemberAccess 下的 Constant + + + 未实现 {name} + + + 不支持 + + + {dataType} 不支持 OrderByRandom 随机排序 + + + {property} 不是有效的导航属性 + + + {dbName} 找不到列 {memberName} + + + 找不到 {CsName} 对应的列 + + + 找不到属性:{memberName} + + + 找不到属性名 {proto} + + + Custom 找不到对应的{{ 反射信息 }}:{fiValueCustomArray} + + + Custom 找不到对应的{{ 静态方法名 }}:{fiValueCustomArray} + + + [Table(AsTable = xx)] 设置的属性名 {atmGroupsValue} 不存在 + + + 未指定 UseConnectionString 或者 UseConnectionFactory + + + 【{policyName}】ObjectPool.{GetName}() timeout {totalSeconds} seconds, see: https://github.com/dotnetcore/FreeSql/discussions/1081 + + + 【{policyName}】ObjectPool.GetAsync() The queue is too long. Policy.AsyncGetCapacity = {asyncGetCapacity} + + + 【OneToMany】导航属性 {trytbTypeName}.{pnvName} 在 {tbrefCsName} 中没有找到对应的字段,如:{findtrytb}{findtrytbPkCsName}、{findtrytb}_{findtrytbPkCsName} + + + 【OneToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,{trytbCsName}.{trytbPrimarysCsName} 和 {tbrefCsName}.{trycolCsName} 类型不一致 + + + 、{refpropName}{findtrytbPkCsName}、{refpropName}_{findtrytbPkCsName}。或者使用 [Navigate] 特性指定关系映射。 + + + 参数 field 未指定 + + + {property} 参数错误,它不是集合属性,必须为 IList<T> 或者 ICollection<T> + + + {property} 参数错误,它不是有效的导航属性 + + + {where} 参数错误,{keyval} 不是有效的属性名,在实体类 {reftbTypeDisplayCsharp} 无法找到 + + + {property} 参数错误,格式 "TopicId=Id,多组使用逗号连接" + + + 解析失败 {callExpMethodName} {message} + + + 【{policyName}】The ObjectPool has been disposed, see: https://github.com/dotnetcore/FreeSql/discussions/1079 + + + 【{policyName}】状态不可用,等待后台检查程序恢复方可使用。{UnavailableExceptionMessage} + + + 属性{trytbVersionColumnCsName} 被标注为行锁(乐观锁)(IsVersion),但其必须为数字类型 或者 byte[] 或者 string,并且不可为 Nullable + + + properties 参数不能为空 + + + {property} 属性名无法找到 + + + Range 要求 Value 应该逗号分割,并且长度为 2 + + + 回滚 + + + 运行时错误,反射获取 IncludeMany 方法失败 + + + 蛋疼的 Access 插入只能一条一条执行,不支持 values(..),(..) 也不支持 select .. UNION ALL select .. + Providers + + + BaseEntity.Initialization 初始化错误,获取到 IFreeSql 是 null + Extensions + + + 【{thisName}】Block access and wait for recovery: {exMessage} + Providers + + + 无法将 IQueryable<{typeofName}> 转换为 ISelect<{typeofName}>,因为他的实现不是 FreeSql.Extensions.Linq.QueryableProvider + Extensions + + + 连接字符串错误 + Providers + + + 【{thisName}】连接字符串错误,请检查。 + Providers + + + 连接字符串错误,或者检查项目属性 > 生成 > 目标平台:x86 | x64,或者改用 FreeSql.Provider.SqliteCore 访问 arm 平台 + Providers + + + 【{thisName}】连接字符串错误,请检查。或者检查项目属性 > 生成 > 目标平台:x86 | x64,或者改用 FreeSql.Provider.SqliteCore 访问 arm 平台 + Providers + + + FreeSql.Provider.CustomAdapter 无法使用 CreateCommand + Providers + + + FreeSql.Provider.CustomAdapter 仅支持 UseConnectionFactory 方式构建 IFreeSql + Providers + + + 达梦 CodeFirst 不支持代码创建 tablespace 与 schemas {tbname} + Providers + + + -DB 参数错误,未提供 ConnectionString + Extensions + + + -DB 参数错误,格式为:MySql,ConnectionString + Extensions + + + -DB 参数错误,不支持的类型:"{dbargs}" + Extensions + + + {method} 是 FreeSql.Provider.{provider} 特有的功能 + Providers + + + fsql.InsertOrUpdate Sqlite 无法完成 UpdateColumns 操作 + Providers + + + 主库 + Providers + + + MygisGeometry.Parse 未实现 "{wkt}" + Providers + + + -NameOptions 参数错误,格式为:0,0,0,0 + Extensions + + + 未实现该功能 + Providers + + + 未实现错误,请反馈给作者 + Providers + + + 找不到 {name} + Providers + + + FreeSql.Provider.{providerName} 未实现 Skip/Offset 功能,如果需要分页请使用判断上一次 id + Providers + + + 对象池 + Providers + + + 旧表(OldName):{tboldname} 存在,数据库已存在 {tbname} 表,无法改名 + Providers + + + OnConflictDoUpdate 功能要求实体类必须设置 IsPrimary 属性 + Providers + + + Oracle CodeFirst 不支持代码创建 tablespace 与 schemas {tbname} + Providers + + + 解析失败 {callExpMethodName} {message},提示:可以使用扩展方法 IQueryable.RestoreToSelect() 还原为 ISelect 再查询 + Extensions + + + fsql.InsertOrUpdate + IfExistsDoNothing + {providerName}要求实体类 {tableCsName} 必须有主键 + Providers + + + SelectMany 错误的类型:{typeFullName} + Extensions + + + 从库 + Providers + + + 类型 {objentityTypeFullName} 不可迁移 + Providers + + + 类型 {objentityTypeFullName} 不可迁移,可迁移属性0个 + Providers + + + 未实现 {columnDbTypeTextFull} 类型映射 + Providers + + + 错误的参数设置:{args} + Extensions + + + {qoteSql} is NULL,除非设置特性 [Column(IsNullable = false)] + + + 分表字段值 "{dt}" 不能小于 "{beginTime} " + + + 分表字段值不能为 null + + + 分表字段值 "{columnValue}" 不能转化成 DateTime + + + 分表字段值 "{dt}" 未匹配到分表名 + + + T2 类型错误 + + + tableName 格式错误,示例:“log_{yyyyMMdd}” + + + {Type}.AsType 参数错误,请传入正确的实体类型 + + + {thatFullName} 类型无法访问构造函数 + + + {name} 类型错误 + + + {Type}.AsType 参数不支持指定为 object + + + 类型 {typeofFullName} 错误,不能使用 IncludeMany + + + 无法解析表达式:{exp} + + + 无法解析表达式方法 {exp3tmpCallMethodName} + + + 请使用 fsql.InsertDict(dict) 方法插入字典数据 + `; + +$(document.body).append(xml1); +$(document.body).append(xml2); + +var sb = 'public static class ErrorStrings {\r\npublic static string Language = "en";'; +var datas = $('#xml1 data'); +for (var a= 0; a < datas.length; a++) { + var name = $(datas[a]).attr('name'); + var en = $(datas[a]).find('value').text(); + var cn = $('#xml2 data[name="' + name + '"]').find('value').text(); + console.log(name + ':' + en + '|' + cn); + sb += ` + /// + /// ` + cn.replace(//g, '>').replace(/&/g, '&').split('\n')[0].replace(/\n/, '').replace(/\r\n/g, '') + ` + /// `; + var args = en.match(/\{(\w+)\}/g); + if (args == null || args.length == 0) { + sb += '\r\n public static string ' + name + ' => Language == "cn" ? \r\n @"' + cn.replace(/"/g, '""') + '" : \r\n @"' + en.replace(/"/g, '""') + '";'; + } + else if (args.length > 0) { + sb += '\r\n public static string ' + name + '('; + var csargs = []; + var csargsdict = {}; + for (var b = 0; b < args.length; b++) { + var argname = args[b].substr(1, args[b].length - 2); + if (csargsdict[argname] == null) { + if (b > 0) sb += ', '; + sb += 'object ' + argname; + csargsdict[argname] = b; + csargs.push(argname); + } + en = en.replace(args[b], '{' + csargsdict[argname] + '}'); + cn = cn.replace(args[b], '{' + csargsdict[argname] + '}'); + } + sb += ') => string.Format(Language == "cn" ? \r\n @"' + cn.replace(/"/g, '""') + '" : \r\n @"' + en.replace(/"/g, '""') + '", ' + csargs.join(', ') + ');'; + } +} +sb += '\r\n}\r\n'; +console.log(sb); + */ \ No newline at end of file diff --git a/FreeSql/Internal/UtilsExpressionTree.cs b/FreeSql/Internal/UtilsExpressionTree.cs index 01a688f80..bd53811ab 100644 --- a/FreeSql/Internal/UtilsExpressionTree.cs +++ b/FreeSql/Internal/UtilsExpressionTree.cs @@ -113,7 +113,7 @@ namespace FreeSql.Internal else colattr.IsIgnore = true; //Navigate 错误提示 var pnvAttr = common.GetEntityNavigateAttribute(trytb.Type, p); - if (pnvAttr != null) throw new Exception(CoreStrings.Navigation_Missing_SetProperty(trytb.Type.DisplayCsharp(), p.Name)); + if (pnvAttr != null) throw new Exception(CoreErrorStrings.Navigation_Missing_SetProperty(trytb.Type.DisplayCsharp(), p.Name)); } if (tp == null && colattr?.IsIgnore != true) { @@ -153,7 +153,7 @@ namespace FreeSql.Internal StringBuilder cscode = null; if (common.CodeFirst.IsLazyLoading && propsLazy.Any()) { - if (trytb.Type.IsPublic == false && trytb.Type.IsNestedPublic == false) throw new Exception(CoreStrings.LazyLoading_EntityMustDeclarePublic(trytbTypeName)); + if (trytb.Type.IsPublic == false && trytb.Type.IsNestedPublic == false) throw new Exception(CoreErrorStrings.LazyLoading_EntityMustDeclarePublic(trytbTypeName)); trytbTypeLazyName = $"FreeSqlLazyEntity__{Regex.Replace(trytbTypeName, @"[^\w\d]", "_")}"; @@ -179,14 +179,14 @@ namespace FreeSql.Internal { cscode.AppendLine("}"); Assembly assembly = null; - if (MethodLazyLoadingComplier.Value == null) throw new Exception(CoreStrings.Install_FreeSql_Extensions_LazyLoading); + if (MethodLazyLoadingComplier.Value == null) throw new Exception(CoreErrorStrings.Install_FreeSql_Extensions_LazyLoading); try { assembly = MethodLazyLoadingComplier.Value.Invoke(null, new object[] { cscode.ToString() }) as Assembly; } catch (Exception ex) { - throw new Exception(CoreStrings.LazyLoading_CompilationError(trytbTypeName, ex.Message, cscode)); + throw new Exception(CoreErrorStrings.LazyLoading_CompilationError(trytbTypeName, ex.Message, cscode)); } var type = assembly.GetExportedTypes()/*.DefinedTypes*/.Where(a => a.FullName.EndsWith(trytbTypeLazyName)).FirstOrDefault(); trytb.TypeLazy = type; @@ -503,8 +503,8 @@ namespace FreeSql.Internal colattr.DbType = Regex.Replace(colattr.DbType, decimalPatten, $"$1({colattr.Precision},{colattr.Scale})"); } - if (trytb.Columns.ContainsKey(colattr.Name)) throw new Exception(CoreStrings.Duplicate_ColumnAttribute(colattr.Name)); - if (trytb.ColumnsByCs.ContainsKey(csName)) throw new Exception(CoreStrings.Duplicate_PropertyName(csName)); + if (trytb.Columns.ContainsKey(colattr.Name)) throw new Exception(CoreErrorStrings.Duplicate_ColumnAttribute(colattr.Name)); + if (trytb.ColumnsByCs.ContainsKey(csName)) throw new Exception(CoreErrorStrings.Duplicate_PropertyName(csName)); return col; } @@ -515,7 +515,7 @@ namespace FreeSql.Internal { if (trytb.VersionColumn.Attribute.MapType.IsNullableType() || trytb.VersionColumn.Attribute.MapType.IsNumberType() == false && !new[] { typeof(byte[]), typeof(string) }.Contains(trytb.VersionColumn.Attribute.MapType)) - throw new Exception(CoreStrings.Properties_AsRowLock_Must_Numeric_Byte(trytb.VersionColumn.CsName)); + throw new Exception(CoreErrorStrings.Properties_AsRowLock_Must_Numeric_Byte(trytb.VersionColumn.CsName)); } tbattr?.ParseAsTable(trytb); @@ -800,7 +800,7 @@ namespace FreeSql.Internal { if (locTb.ColumnsByCs.TryGetValue(bi, out var trybindcol) == false) { - nvref.Exception = new Exception(CoreStrings.Navigation_ParsingError_NotFound_Property(trytbTypeName, pnv.Name, locFindTypeName, bi)); + nvref.Exception = new Exception(CoreErrorStrings.Navigation_ParsingError_NotFound_Property(trytbTypeName, pnv.Name, locFindTypeName, bi)); trytb.AddOrUpdateTableRef(pnv.Name, nvref); //if (isLazy) throw nvref.Exception; break; @@ -820,7 +820,7 @@ namespace FreeSql.Internal { if (bindColumnsTempPrimary[a].CsType.NullableTypeOrThis() != bindColumns[a].CsType.NullableTypeOrThis()) { - nvref.Exception = new Exception(CoreStrings.OneToMany_ParsingError_InconsistentType(trytbTypeName, pnv.Name, trytb.CsName, bindColumnsTempPrimary[a].CsName, tbref.CsName, bindColumns[a].CsName)); + nvref.Exception = new Exception(CoreErrorStrings.OneToMany_ParsingError_InconsistentType(trytbTypeName, pnv.Name, trytb.CsName, bindColumnsTempPrimary[a].CsName, tbref.CsName, bindColumns[a].CsName)); trytb.AddOrUpdateTableRef(pnv.Name, nvref); //if (isLazy) throw nvref.Exception; break; @@ -852,7 +852,7 @@ namespace FreeSql.Internal { if (bindColumns[a].CsType.NullableTypeOrThis() != bindColumnsTempPrimary[a].CsType.NullableTypeOrThis()) { - nvref.Exception = new Exception(CoreStrings.Navigation_ParsingError_InconsistentType(trytbTypeName, pnv.Name, trytb.CsName, bindColumns[a].CsName, tbref.CsName, bindColumnsTempPrimary[a].CsName)); + nvref.Exception = new Exception(CoreErrorStrings.Navigation_ParsingError_InconsistentType(trytbTypeName, pnv.Name, trytb.CsName, bindColumns[a].CsName, tbref.CsName, bindColumnsTempPrimary[a].CsName)); trytb.AddOrUpdateTableRef(pnv.Name, nvref); //if (isLazy) throw nvref.Exception; break; @@ -883,7 +883,7 @@ namespace FreeSql.Internal if (typeof(IEnumerable).IsAssignableFrom(pnv.PropertyType) == false) return; if (trytb.Primarys.Any() == false) { - nvref.Exception = new Exception(CoreStrings.Navigation_ParsingError_EntityMissingPrimaryKey(trytbTypeName, pnv.Name, trytbTypeName)); + nvref.Exception = new Exception(CoreErrorStrings.Navigation_ParsingError_EntityMissingPrimaryKey(trytbTypeName, pnv.Name, trytbTypeName)); trytb.AddOrUpdateTableRef(pnv.Name, nvref); //if (isLazy) throw nvref.Exception; return; @@ -916,7 +916,7 @@ namespace FreeSql.Internal if (isManyToMany == false) { - nvref.Exception = new Exception(CoreStrings.ManyToMany_ParsingError_EntityMustHas_NavigateCollection(trytbTypeName, pnv.Name, tbrefTypeName)); + nvref.Exception = new Exception(CoreErrorStrings.ManyToMany_ParsingError_EntityMustHas_NavigateCollection(trytbTypeName, pnv.Name, tbrefTypeName)); trytb.AddOrUpdateTableRef(pnv.Name, nvref); //if (isLazy) throw nvref.Exception; return; @@ -939,7 +939,7 @@ namespace FreeSql.Internal { if (tbref.Primarys.Any() == false) { - nvref.Exception = new Exception(CoreStrings.ManyToMany_ParsingError_EntityMissing_PrimaryKey(trytbTypeName, pnv.Name, tbrefTypeName)); + nvref.Exception = new Exception(CoreErrorStrings.ManyToMany_ParsingError_EntityMissing_PrimaryKey(trytbTypeName, pnv.Name, tbrefTypeName)); trytb.AddOrUpdateTableRef(pnv.Name, nvref); //if (isLazy) throw nvref.Exception; return; @@ -1010,7 +1010,7 @@ namespace FreeSql.Internal } catch (Exception ex) { - nvref.Exception = new Exception(CoreStrings.ManyToMany_ParsingError_IntermediateClass_ErrorMessage(trytbTypeName, pnv.Name, tbmid.CsName, midTypePropsTrytb.Name, ex.Message)); + nvref.Exception = new Exception(CoreErrorStrings.ManyToMany_ParsingError_IntermediateClass_ErrorMessage(trytbTypeName, pnv.Name, tbmid.CsName, midTypePropsTrytb.Name, ex.Message)); trytb.AddOrUpdateTableRef(pnv.Name, nvref); //if (isLazy) throw nvref.Exception; } @@ -1018,7 +1018,7 @@ namespace FreeSql.Internal { if (trytbTf.RefType != TableRefType.ManyToOne && trytbTf.RefType != TableRefType.OneToOne) { - nvref.Exception = new Exception(CoreStrings.ManyToMany_ParsingError_IntermediateClass_NotManyToOne_OneToOne(trytbTypeName, pnv.Name, tbmid.CsName, midTypePropsTrytb.Name)); + nvref.Exception = new Exception(CoreErrorStrings.ManyToMany_ParsingError_IntermediateClass_NotManyToOne_OneToOne(trytbTypeName, pnv.Name, tbmid.CsName, midTypePropsTrytb.Name)); trytb.AddOrUpdateTableRef(pnv.Name, nvref); //if (isLazy) throw nvref.Exception; } @@ -1057,7 +1057,7 @@ namespace FreeSql.Internal } catch (Exception ex) { - nvref.Exception = new Exception(CoreStrings.ManyToMany_ParsingError_IntermediateClass_ErrorMessage(trytbTypeName, pnv.Name, tbmid.CsName, midTypePropsTbref.Name, ex.Message)); + nvref.Exception = new Exception(CoreErrorStrings.ManyToMany_ParsingError_IntermediateClass_ErrorMessage(trytbTypeName, pnv.Name, tbmid.CsName, midTypePropsTbref.Name, ex.Message)); trytb.AddOrUpdateTableRef(pnv.Name, nvref); //if (isLazy) throw nvref.Exception; } @@ -1065,7 +1065,7 @@ namespace FreeSql.Internal { if (tbrefTf.RefType != TableRefType.ManyToOne && tbrefTf.RefType != TableRefType.OneToOne) { - nvref.Exception = new Exception(CoreStrings.ManyToMany_ParsingError_IntermediateClass_NotManyToOne_OneToOne(trytbTypeName, pnv.Name, tbmid.CsName, midTypePropsTbref.Name)); + nvref.Exception = new Exception(CoreErrorStrings.ManyToMany_ParsingError_IntermediateClass_NotManyToOne_OneToOne(trytbTypeName, pnv.Name, tbmid.CsName, midTypePropsTbref.Name)); trytb.AddOrUpdateTableRef(pnv.Name, nvref); //if (isLazy) throw nvref.Exception; } @@ -1103,14 +1103,14 @@ namespace FreeSql.Internal } if (trycol != null && trycol.CsType.NullableTypeOrThis() != trytb.Primarys[a].CsType.NullableTypeOrThis()) { - nvref.Exception = new Exception(CoreStrings.ManyToMany_ParsingError_InconsistentType(trytbTypeName, pnv.Name, tbmid.CsName, trycol.CsName, trytb.CsName, trytb.Primarys[a].CsName)); + nvref.Exception = new Exception(CoreErrorStrings.ManyToMany_ParsingError_InconsistentType(trytbTypeName, pnv.Name, tbmid.CsName, trycol.CsName, trytb.CsName, trytb.Primarys[a].CsName)); trytb.AddOrUpdateTableRef(pnv.Name, nvref); //if (isLazy) throw nvref.Exception; break; } if (trycol == null) { - nvref.Exception = new Exception(CoreStrings.ManyToMany_NotFound_CorrespondingField(trytbTypeName, pnv.Name, tbmid.CsName, midTypePropsTrytb.Name, findtrytbPkCsName)); + nvref.Exception = new Exception(CoreErrorStrings.ManyToMany_NotFound_CorrespondingField(trytbTypeName, pnv.Name, tbmid.CsName, midTypePropsTrytb.Name, findtrytbPkCsName)); trytb.AddOrUpdateTableRef(pnv.Name, nvref); //if (isLazy) throw nvref.Exception; break; @@ -1143,14 +1143,14 @@ namespace FreeSql.Internal } if (trycol != null && trycol.CsType.NullableTypeOrThis() != tbref.Primarys[a].CsType.NullableTypeOrThis()) { - nvref.Exception = new Exception(CoreStrings.ManyToMany_ParsingError_InconsistentType(trytbTypeName, pnv.Name, tbmid.CsName, trycol.CsName, trytb.CsName, trytb.Primarys[a].CsName)); + nvref.Exception = new Exception(CoreErrorStrings.ManyToMany_ParsingError_InconsistentType(trytbTypeName, pnv.Name, tbmid.CsName, trycol.CsName, trytb.CsName, trytb.Primarys[a].CsName)); trytb.AddOrUpdateTableRef(pnv.Name, nvref); //if (isLazy) throw nvref.Exception; break; } if (trycol == null) { - nvref.Exception = new Exception(CoreStrings.ManyToMany_NotFound_CorrespondingField(trytbTypeName, pnv.Name, tbmid.CsName, midTypePropsTrytb.Name, findtbrefPkCsName)); + nvref.Exception = new Exception(CoreErrorStrings.ManyToMany_NotFound_CorrespondingField(trytbTypeName, pnv.Name, tbmid.CsName, midTypePropsTrytb.Name, findtbrefPkCsName)); trytb.AddOrUpdateTableRef(pnv.Name, nvref); //if (isLazy) throw nvref.Exception; break; @@ -1356,7 +1356,7 @@ namespace FreeSql.Internal { if (tbref.ColumnsByCs.TryGetValue(bi, out var trybindcol) == false) { - nvref.Exception = new Exception(CoreStrings.Navigation_ParsingError_NotFound_Property(trytbTypeName, pnv.Name, tbrefTypeName, bi)); + nvref.Exception = new Exception(CoreErrorStrings.Navigation_ParsingError_NotFound_Property(trytbTypeName, pnv.Name, tbrefTypeName, bi)); trytb.AddOrUpdateTableRef(pnv.Name, nvref); //if (isLazy) throw nvref.Exception; break; @@ -1370,7 +1370,7 @@ namespace FreeSql.Internal if (nvref.Exception == null && bindColumns.Any() && bindColumns.Count != trytb.Primarys.Length) { - nvref.Exception = new Exception(CoreStrings.Navigation_Bind_Number_Different(trytbTypeName, pnv.Name, bindColumns.Count, trytb.Primarys.Length)); + nvref.Exception = new Exception(CoreErrorStrings.Navigation_Bind_Number_Different(trytbTypeName, pnv.Name, bindColumns.Count, trytb.Primarys.Length)); trytb.AddOrUpdateTableRef(pnv.Name, nvref); //if (isLazy) throw nvref.Exception; } @@ -1410,15 +1410,15 @@ namespace FreeSql.Internal } if (trycol != null && trycol.CsType.NullableTypeOrThis() != trytb.Primarys[a].CsType.NullableTypeOrThis()) { - nvref.Exception = new Exception(CoreStrings.OneToMany_ParsingError_InconsistentType(trytbTypeName, pnv.Name, trytb.CsName, trytb.Primarys[a].CsName, tbref.CsName, trycol.CsName)); + nvref.Exception = new Exception(CoreErrorStrings.OneToMany_ParsingError_InconsistentType(trytbTypeName, pnv.Name, trytb.CsName, trytb.Primarys[a].CsName, tbref.CsName, trycol.CsName)); trytb.AddOrUpdateTableRef(pnv.Name, nvref); //if (isLazy) throw nvref.Exception; break; } if (trycol == null) { - nvref.Exception = new Exception(CoreStrings.OneToMany_NotFound_CorrespondingField(trytbTypeName, pnv.Name, tbref.CsName, findtrytb, findtrytbPkCsName) - + (refprop == null ? "" : CoreStrings.OneToMany_UseNavigate(refprop.Name, findtrytbPkCsName))); + nvref.Exception = new Exception(CoreErrorStrings.OneToMany_NotFound_CorrespondingField(trytbTypeName, pnv.Name, tbref.CsName, findtrytb, findtrytbPkCsName) + + (refprop == null ? "" : CoreErrorStrings.OneToMany_UseNavigate(refprop.Name, findtrytbPkCsName))); trytb.AddOrUpdateTableRef(pnv.Name, nvref); //if (isLazy) throw nvref.Exception; break; @@ -1462,7 +1462,7 @@ namespace FreeSql.Internal if (tbref == null) return; if (tbref.Primarys.Any() == false) { - nvref.Exception = new Exception(CoreStrings.Navigation_ParsingError_EntityMissingPrimaryKey(trytbTypeName, pnv.Name, propTypeName)); + nvref.Exception = new Exception(CoreErrorStrings.Navigation_ParsingError_EntityMissingPrimaryKey(trytbTypeName, pnv.Name, propTypeName)); trytb.AddOrUpdateTableRef(pnv.Name, nvref); //if (isLazy) throw nvref.Exception; } @@ -1479,7 +1479,7 @@ namespace FreeSql.Internal { if (trytb.ColumnsByCs.TryGetValue(bi, out var trybindcol) == false) { - nvref.Exception = new Exception(CoreStrings.Navigation_ParsingError_NotFound_Property(trytbTypeName, pnv.Name, trytbTypeName, bi)); + nvref.Exception = new Exception(CoreErrorStrings.Navigation_ParsingError_NotFound_Property(trytbTypeName, pnv.Name, trytbTypeName, bi)); trytb.AddOrUpdateTableRef(pnv.Name, nvref); //if (isLazy) throw nvref.Exception; break; @@ -1491,7 +1491,7 @@ namespace FreeSql.Internal if (nvref.Exception == null && bindColumns.Any() && bindColumns.Count != tbref.Primarys.Length) { - nvref.Exception = new Exception(CoreStrings.Navigation_Bind_Number_Different(trytbTypeName, pnv.Name, bindColumns.Count, tbref.Primarys.Length)); + nvref.Exception = new Exception(CoreErrorStrings.Navigation_Bind_Number_Different(trytbTypeName, pnv.Name, bindColumns.Count, tbref.Primarys.Length)); trytb.AddOrUpdateTableRef(pnv.Name, nvref); //if (isLazy) throw nvref.Exception; } @@ -1546,14 +1546,14 @@ namespace FreeSql.Internal } if (trycol != null && trycol.CsType.NullableTypeOrThis() != tbref.Primarys[a].CsType.NullableTypeOrThis()) { - nvref.Exception = new Exception(CoreStrings.Navigation_ParsingError_InconsistentType(trytbTypeName, pnv.Name, trytb.CsName, trycol.CsName, tbref.CsName, tbref.Primarys[a].CsName)); + nvref.Exception = new Exception(CoreErrorStrings.Navigation_ParsingError_InconsistentType(trytbTypeName, pnv.Name, trytb.CsName, trycol.CsName, tbref.CsName, tbref.Primarys[a].CsName)); trytb.AddOrUpdateTableRef(pnv.Name, nvref); //if (isLazy) throw nvref.Exception; break; } if (trycol == null) { - nvref.Exception = new Exception(CoreStrings.Navigation_NotFound_CorrespondingField(trytbTypeName, pnv.Name, findtbrefPkCsName)); + nvref.Exception = new Exception(CoreErrorStrings.Navigation_NotFound_CorrespondingField(trytbTypeName, pnv.Name, findtbrefPkCsName)); trytb.AddOrUpdateTableRef(pnv.Name, nvref); //if (isLazy) throw nvref.Exception; break; @@ -2121,7 +2121,7 @@ namespace FreeSql.Internal var parmValue = Expression.Parameter(typeof(object), "value"); Expression exp = Expression.Convert(parmInfo, typeObj); foreach (var pro in memberAccessPath.Split('.')) - exp = Expression.PropertyOrField(exp, pro) ?? throw new Exception(string.Concat(exp.Type.FullName, CoreStrings.NoProperty_Defined, pro)); + exp = Expression.PropertyOrField(exp, pro) ?? throw new Exception(string.Concat(exp.Type.FullName, CoreErrorStrings.NoProperty_Defined, pro)); var value2 = Expression.Call(MethodGetDataReaderValue, Expression.Constant(exp.Type), parmValue); var value3 = Expression.Convert(parmValue, typeValue); @@ -2761,7 +2761,7 @@ namespace FreeSql.Internal } catch (Exception ex) { - throw new ArgumentException(CoreStrings.ExpressionTree_Convert_Type_Error(string.Concat(value), value.GetType().FullName, type.FullName, ex.Message)); + throw new ArgumentException(CoreErrorStrings.ExpressionTree_Convert_Type_Error(string.Concat(value), value.GetType().FullName, type.FullName, ex.Message)); } } public static string GetCsName(string name) diff --git a/FreeSql/Properties/CoreStrings.Designer.cs b/FreeSql/Properties/CoreStrings.Designer.cs deleted file mode 100644 index 146386c87..000000000 --- a/FreeSql/Properties/CoreStrings.Designer.cs +++ /dev/null @@ -1,1243 +0,0 @@ - -// - -using System; -using System.Reflection; -using System.Resources; -using System.Globalization; -using System.Threading; - -namespace FreeSql -{ - /// - /// - /// String resources used in FreeSql exceptions, etc. - /// - /// - /// These strings are exposed publicly for use by database providers and extensions. - /// It is unusual for application code to need these strings. - /// - /// - public static class CoreStrings - { - private static readonly ResourceManager _resourceManager = new ResourceManager("FreeSql.Properties.CoreStrings", typeof(CoreStrings).Assembly); - - private static CultureInfo _resourceCulture; - - /// - /// 重写当前线程的 CurrentUICulture 属性,对 - /// 使用此强类型资源类的所有资源查找执行重写。 - /// - public static CultureInfo Culture - { - get - { - return _resourceCulture; - } - set - { - _resourceCulture = value; - } - } - - /// - /// [Table(AsTable = "{asTable}")] 特性值格式错误 - /// - public static string AsTable_PropertyName_FormatError(object asTable) - => string.Format( - GetString("AsTable_PropertyName_FormatError", nameof(asTable)), - asTable); - - /// - /// [Table(AsTable = xx)] 设置的属性名 {atmGroupsValue} 不是 DateTime 类型 - /// - public static string AsTable_PropertyName_NotDateTime(object atmGroupsValue) - => string.Format( - GetString("AsTable_PropertyName_NotDateTime", nameof(atmGroupsValue)), - atmGroupsValue); - - /// - /// {name}: Failed to get resource {statistics} - /// - public static string Available_Failed_Get_Resource(object name, object statistics) - => string.Format( - GetString("Available_Failed_Get_Resource", nameof(name), nameof(statistics)), - name, statistics); - - /// - /// {name}: An exception needs to be thrown - /// - public static string Available_Thrown_Exception(object name) - => string.Format( - GetString("Available_Thrown_Exception", nameof(name)), - name); - - /// - /// 错误的表达式格式 {column} - /// - public static string Bad_Expression_Format(object column) - => string.Format( - GetString("Bad_Expression_Format", nameof(column)), - column); - - /// - /// Chunk 功能之前不可使用 Select - /// - public static string Before_Chunk_Cannot_Use_Select - => GetString("Before_Chunk_Cannot_Use_Select"); - - /// - /// 安全起见,请务必在事务开启之后,再使用 ForUpdate - /// - public static string Begin_Transaction_Then_ForUpdate - => GetString("Begin_Transaction_Then_ForUpdate"); - - /// - /// 不能为 null - /// - public static string Cannot_Be_NULL - => GetString("Cannot_Be_NULL"); - - /// - /// {name} 不能为 null - /// - public static string Cannot_Be_NULL_Name(object name) - => string.Format( - GetString("Cannot_Be_NULL_Name", nameof(name)), - name); - - /// - /// 无法匹配 {property} - /// - public static string Cannot_Match_Property(object property) - => string.Format( - GetString("Cannot_Match_Property", nameof(property)), - property); - - /// - /// {property} 无法解析为表达式树 - /// - public static string Cannot_Resolve_ExpressionTree(object property) - => string.Format( - GetString("Cannot_Resolve_ExpressionTree", nameof(property)), - property); - - /// - /// 参数 masterConnectionString 不可为空,请检查 UseConnectionString - /// - public static string Check_UseConnectionString - => GetString("Check_UseConnectionString"); - - /// - /// 提交 - /// - public static string Commit - => GetString("Commit"); - - /// - /// 连接失败,准备切换其他可用服务器 - /// - public static string Connection_Failed_Switch_Servers - => GetString("Connection_Failed_Switch_Servers"); - - /// - /// 自定义表达式解析错误:类型 {exp3MethodDeclaringType} 需要定义 static ThreadLocal<ExpressionCallContext> 字段、字段、字段(重要三次提醒) - /// - public static string Custom_Expression_ParsingError(object exp3MethodDeclaringType) - => string.Format( - GetString("Custom_Expression_ParsingError", nameof(exp3MethodDeclaringType)), - exp3MethodDeclaringType); - - /// - /// Custom { 反射信息 }不能为空,格式:{ 静态方法名 }{ 空格 }{ 反射信息 } - /// - public static string Custom_Reflection_IsNotNull - => GetString("Custom_Reflection_IsNotNull"); - - /// - /// Custom { 静态方法名 }不能为空,格式:{ 静态方法名 }{ 空格 }{ 反射信息 } - /// - public static string Custom_StaticMethodName_IsNotNull - => GetString("Custom_StaticMethodName_IsNotNull"); - - /// - /// Custom 对应的{{ 静态方法名 }}:{fiValueCustomArray} 未设置 [DynamicFilterCustomAttribute] 特性 - /// - public static string Custom_StaticMethodName_NotSet_DynamicFilterCustom(object fiValueCustomArray) - => string.Format( - GetString("Custom_StaticMethodName_NotSet_DynamicFilterCustom", nameof(fiValueCustomArray)), - fiValueCustomArray); - - /// - /// Custom 要求 Field 应该空格分割,并且长度为 2,格式:{ 静态方法名 }{ 空格 }{ 反射信息 } - /// - public static string CustomFieldSeparatedBySpaces - => GetString("CustomFieldSeparatedBySpaces"); - - /// - /// 操作的数据类型({dataDisplayCsharp}) 与 AsType({tableTypeDisplayCsharp}) 不一致,请检查。 - /// - public static string DataType_AsType_Inconsistent(object dataDisplayCsharp, object tableTypeDisplayCsharp) - => string.Format( - GetString("DataType_AsType_Inconsistent", nameof(dataDisplayCsharp), nameof(tableTypeDisplayCsharp)), - dataDisplayCsharp, tableTypeDisplayCsharp); - - /// - /// DateRange 要求 Value 应该逗号分割,并且长度为 2 - /// - public static string DateRange_Comma_Separateda_By2Char - => GetString("DateRange_Comma_Separateda_By2Char"); - - /// - /// DateRange 要求 Value[1] 格式必须为:yyyy、yyyy-MM、yyyy-MM-dd、yyyy-MM-dd HH、yyyy、yyyy-MM-dd HH:mm - /// - public static string DateRange_DateFormat_yyyy - => GetString("DateRange_DateFormat_yyyy"); - - /// - /// 记录可能不存在,或者【行级乐观锁】版本过旧,更新数量{sourceCount},影响的行数{affrows}。 - /// - public static string DbUpdateVersionException_RowLevelOptimisticLock(object sourceCount, object affrows) - => string.Format( - GetString("DbUpdateVersionException_RowLevelOptimisticLock", nameof(sourceCount), nameof(affrows)), - sourceCount, affrows); - - /// - /// SlaveConnectionString 数量与 SlaveWeights 不相同 - /// - public static string Different_Number_SlaveConnectionString_SlaveWeights - => GetString("Different_Number_SlaveConnectionString_SlaveWeights"); - - /// - /// ColumnAttribute.Name {colattrName} 重复存在,请检查(注意:不区分大小写) - /// - public static string Duplicate_ColumnAttribute(object colattrName) - => string.Format( - GetString("Duplicate_ColumnAttribute", nameof(colattrName)), - colattrName); - - /// - /// 属性名 {pName} 重复存在,请检查(注意:不区分大小写) - /// - public static string Duplicate_PropertyName(object pName) - => string.Format( - GetString("Duplicate_PropertyName", nameof(pName)), - pName); - - /// - /// {function} 功能要求实体类 {tableCsName} 必须有主键 - /// - public static string Entity_Must_Primary_Key(object function, object tableCsName) - => string.Format( - GetString("Entity_Must_Primary_Key", nameof(function), nameof(tableCsName)), - function, tableCsName); - - /// - /// {tbTypeFullName} 是父子关系,但是 MySql 8.0 以下版本中不支持组合多主键 - /// - public static string Entity_MySQL_VersionsBelow8_NotSupport_Multiple_PrimaryKeys(object tbTypeFullName) - => string.Format( - GetString("Entity_MySQL_VersionsBelow8_NotSupport_Multiple_PrimaryKeys", nameof(tbTypeFullName)), - tbTypeFullName); - - /// - /// {tbTypeFullName} 不是父子关系,无法使用该功能 - /// - public static string Entity_NotParentChild_Relationship(object tbTypeFullName) - => string.Format( - GetString("Entity_NotParentChild_Relationship", nameof(tbTypeFullName)), - tbTypeFullName); - - /// - /// 这个特别的子查询不能解析 - /// - public static string EspeciallySubquery_Cannot_Parsing - => GetString("EspeciallySubquery_Cannot_Parsing"); - - /// - /// 表达式错误,它的顶级对象不是 ParameterExpression:{exp} - /// - public static string Expression_Error_Use_ParameterExpression(object exp) - => string.Format( - GetString("Expression_Error_Use_ParameterExpression", nameof(exp)), - exp); - - /// - /// 表达式错误,它不是连续的 MemberAccess 类型:{exp} - /// - public static string Expression_Error_Use_Successive_MemberAccess_Type(object exp) - => string.Format( - GetString("Expression_Error_Use_Successive_MemberAccess_Type", nameof(exp)), - exp); - - /// - /// ExpressionTree 转换类型错误,值({value}),类型({valueTypeFullName}),目标类型({typeFullName}),{exMessage} - /// - public static string ExpressionTree_Convert_Type_Error(object value, object valueTypeFullName, object typeFullName, object exMessage) - => string.Format( - GetString("ExpressionTree_Convert_Type_Error", nameof(value), nameof(valueTypeFullName), nameof(typeFullName), nameof(exMessage)), - value, valueTypeFullName, typeFullName, exMessage); - - /// - /// 未能解析分表字段值 {sqlWhere} - /// - public static string Failed_SubTable_FieldValue(object sqlWhere) - => string.Format( - GetString("Failed_SubTable_FieldValue", nameof(sqlWhere)), - sqlWhere); - - /// - /// AsTable 未实现的功能 {asTable} - /// - public static string Functions_AsTable_NotImplemented(object asTable) - => string.Format( - GetString("Functions_AsTable_NotImplemented", nameof(asTable)), - asTable); - - /// - /// GBase 暂时不支持逗号以外的分割符 - /// - public static string GBase_NotSupport_OtherThanCommas - => GetString("GBase_NotSupport_OtherThanCommas"); - - /// - /// tableName:{tableName} 生成了相同的分表名 - /// - public static string Generated_Same_SubTable(object tableName) - => string.Format( - GetString("Generated_Same_SubTable", nameof(tableName)), - tableName); - - /// - /// GetPrimarys 传递的参数 "{primary}" 不正确,它不属于字典数据的键名 - /// - public static string GetPrimarys_ParameterError_IsNotDictKey (object primary) - => string.Format( - GetString("GetPrimarys_ParameterError_IsNotDictKey ", nameof(primary)), - primary); - - /// - /// 已经指定了 {first},不能再指定 {second} - /// - public static string Has_Specified_Cannot_Specified_Second(object first, object second) - => string.Format( - GetString("Has_Specified_Cannot_Specified_Second", nameof(first), nameof(second)), - first, second); - - /// - /// {tb2DbName}.{mp2MemberName} 被忽略,请检查 IsIgnore 设置,确认 get/set 为 public - /// - public static string Ignored_Check_Confirm_PublicGetSet(object tb2DbName, object mp2MemberName) - => string.Format( - GetString("Ignored_Check_Confirm_PublicGetSet", nameof(tb2DbName), nameof(mp2MemberName)), - tb2DbName, mp2MemberName); - - /// - /// Include 参数类型错误 - /// - public static string Include_ParameterType_Error - => GetString("Include_ParameterType_Error"); - - /// - /// Include 参数类型错误,集合属性请使用 IncludeMany - /// - public static string Include_ParameterType_Error_Use_IncludeMany - => GetString("Include_ParameterType_Error_Use_IncludeMany"); - - /// - /// Include 参数类型错误,表达式类型应该为 MemberAccess - /// - public static string Include_ParameterType_Error_Use_MemberAccess - => GetString("Include_ParameterType_Error_Use_MemberAccess"); - - /// - /// IncludeMany 类型 {tbTypeDisplayCsharp} 的属性 {collMemMemberName} 不是有效的导航属性,提示:IsIgnore = true 不会成为导航属性 - /// - public static string IncludeMany_NotValid_Navigation(object tbTypeDisplayCsharp, object collMemMemberName) - => string.Format( - GetString("IncludeMany_NotValid_Navigation", nameof(tbTypeDisplayCsharp), nameof(collMemMemberName)), - tbTypeDisplayCsharp, collMemMemberName); - - /// - /// IncludeMany {navigateSelector} 参数错误,Select 只可以使用一个参数的方法,正确格式:.Select(t =>new TNavigate {{}}) - /// - public static string IncludeMany_ParameterError_OnlyUseOneParameter(object navigateSelector) - => string.Format( - GetString("IncludeMany_ParameterError_OnlyUseOneParameter", nameof(navigateSelector)), - navigateSelector); - - /// - /// IncludeMany {navigateSelector} 参数错误,Select lambda参数返回值必须和 {collMemElementType} 类型一致 - /// - public static string IncludeMany_ParameterError_Select_ReturnConsistentType(object navigateSelector, object collMemElementType) - => string.Format( - GetString("IncludeMany_ParameterError_Select_ReturnConsistentType", nameof(navigateSelector), nameof(collMemElementType)), - navigateSelector, collMemElementType); - - /// - /// IncludeMany 参数1 类型错误,表达式类型应该为 MemberAccess - /// - public static string IncludeMany_ParameterType_Error_Use_MemberAccess - => GetString("IncludeMany_ParameterType_Error_Use_MemberAccess"); - - /// - /// IncludeMany {navigateSelector} 参数类型错误,正确格式: a.collections.Take(1).Where(c =>c.aid == a.id).Select(a=> new TNavigate{{}}) - /// - public static string IncludeMany_ParameterTypeError(object navigateSelector) - => string.Format( - GetString("IncludeMany_ParameterTypeError", nameof(navigateSelector)), - navigateSelector); - - /// - /// ISelect.InsertInto() 未选择属性: {displayCsharp} - /// - public static string InsertInto_No_Property_Selected(object displayCsharp) - => string.Format( - GetString("InsertInto_No_Property_Selected", nameof(displayCsharp)), - displayCsharp); - - /// - /// ISelect.InsertInto() 类型错误: {displayCsharp} - /// - public static string InsertInto_TypeError(object displayCsharp) - => string.Format( - GetString("InsertInto_TypeError", nameof(displayCsharp)), - displayCsharp); - - /// - /// InsertOrUpdate 功能执行 merge into 要求实体类 {CsName} 必须有主键 - /// - public static string InsertOrUpdate_Must_Primary_Key(object CsName) - => string.Format( - GetString("InsertOrUpdate_Must_Primary_Key", nameof(CsName)), - CsName); - - /// - /// InsertOrUpdate<>的泛型参数 不支持 {typeofT1},请传递您的实体类 - /// - public static string InsertOrUpdate_NotSuport_Generic_UseEntity(object typeofT1) - => string.Format( - GetString("InsertOrUpdate_NotSuport_Generic_UseEntity", nameof(typeofT1)), - typeofT1); - - /// - /// 【延时加载】功能需要安装 FreeSql.Extensions.LazyLoading.dll,可前往 nuget 下载 - /// - public static string Install_FreeSql_Extensions_LazyLoading - => GetString("Install_FreeSql_Extensions_LazyLoading"); - - /// - /// 【延时加载】{trytbTypeName} 编译错误:{exMessage}\r\n\r\n{cscode} - /// - public static string LazyLoading_CompilationError(object trytbTypeName, object exMessage, object cscode) - => string.Format( - GetString("LazyLoading_CompilationError", nameof(trytbTypeName), nameof(exMessage), nameof(cscode)), - trytbTypeName, exMessage, cscode); - - /// - /// 【延时加载】实体类型 {trytbTypeName} 必须声明为 public - /// - public static string LazyLoading_EntityMustDeclarePublic(object trytbTypeName) - => string.Format( - GetString("LazyLoading_EntityMustDeclarePublic", nameof(trytbTypeName)), - trytbTypeName); - - /// - /// ManyToMany 导航属性 .AsSelect() 暂时不可用于 Sum/Avg/Max/Min/First/ToOne/ToList 方法 - /// - public static string ManyToMany_AsSelect_NotSupport_Sum_Avg_etc - => GetString("ManyToMany_AsSelect_NotSupport_Sum_Avg_etc"); - - /// - /// 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 在 {tbmidCsName} 中没有找到对应的字段,如:{midTypePropsTrytbName}{findtrytbPkCsName}、{midTypePropsTrytbName}_{findtrytbPkCsName} - /// - public static string ManyToMany_NotFound_CorrespondingField(object trytbTypeName, object pnvName, object tbmidCsName, object midTypePropsTrytbName, object findtrytbPkCsName) - => string.Format( - GetString("ManyToMany_NotFound_CorrespondingField", nameof(trytbTypeName), nameof(pnvName), nameof(tbmidCsName), nameof(midTypePropsTrytbName), nameof(findtrytbPkCsName)), - trytbTypeName, pnvName, tbmidCsName, midTypePropsTrytbName, findtrytbPkCsName); - - /// - /// 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {tbrefTypeName} 缺少主键标识,[Column(IsPrimary = true)] - /// - public static string ManyToMany_ParsingError_EntityMissing_PrimaryKey(object trytbTypeName, object pnvName, object tbrefTypeName) - => string.Format( - GetString("ManyToMany_ParsingError_EntityMissing_PrimaryKey", nameof(trytbTypeName), nameof(pnvName), nameof(tbrefTypeName)), - trytbTypeName, pnvName, tbrefTypeName); - - /// - /// 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {tbrefTypeName} 必须存在对应的 [Navigate(ManyToMany = x)] 集合属性 - /// - public static string ManyToMany_ParsingError_EntityMustHas_NavigateCollection(object trytbTypeName, object pnvName, object tbrefTypeName) - => string.Format( - GetString("ManyToMany_ParsingError_EntityMustHas_NavigateCollection", nameof(trytbTypeName), nameof(pnvName), nameof(tbrefTypeName)), - trytbTypeName, pnvName, tbrefTypeName); - - /// - /// 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,{tbmidCsName}.{trycolCsName} 和 {trytbCsName}.{trytbPrimarysCsName} 类型不一致 - /// - public static string ManyToMany_ParsingError_InconsistentType(object trytbTypeName, object pnvName, object tbmidCsName, object trycolCsName, object trytbCsName, object trytbPrimarysCsName) - => string.Format( - GetString("ManyToMany_ParsingError_InconsistentType", nameof(trytbTypeName), nameof(pnvName), nameof(tbmidCsName), nameof(trycolCsName), nameof(trytbCsName), nameof(trytbPrimarysCsName)), - trytbTypeName, pnvName, tbmidCsName, trycolCsName, trytbCsName, trytbPrimarysCsName); - - /// - /// 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,中间类 {tbmidCsName}.{midTypePropsTrytbName} 错误:{exMessage} - /// - public static string ManyToMany_ParsingError_IntermediateClass_ErrorMessage(object trytbTypeName, object pnvName, object tbmidCsName, object midTypePropsTrytbName, object exMessage) - => string.Format( - GetString("ManyToMany_ParsingError_IntermediateClass_ErrorMessage", nameof(trytbTypeName), nameof(pnvName), nameof(tbmidCsName), nameof(midTypePropsTrytbName), nameof(exMessage)), - trytbTypeName, pnvName, tbmidCsName, midTypePropsTrytbName, exMessage); - - /// - /// 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,中间类 {tbmidCsName}.{midTypePropsTrytbName} 导航属性不是【ManyToOne】或【OneToOne】 - /// - public static string ManyToMany_ParsingError_IntermediateClass_NotManyToOne_OneToOne(object trytbTypeName, object pnvName, object tbmidCsName, object midTypePropsTrytbName) - => string.Format( - GetString("ManyToMany_ParsingError_IntermediateClass_NotManyToOne_OneToOne", nameof(trytbTypeName), nameof(pnvName), nameof(tbmidCsName), nameof(midTypePropsTrytbName)), - trytbTypeName, pnvName, tbmidCsName, midTypePropsTrytbName); - - /// - /// 映射异常:{name} 没有一个属性名相同 - /// - public static string Mapping_Exception_HasNo_SamePropertyName(object name) - => string.Format( - GetString("Mapping_Exception_HasNo_SamePropertyName", nameof(name)), - name); - - /// - /// Ado.MasterPool 值为 null,该操作无法自启用事务,请显式传递【事务对象】解决 - /// - public static string MasterPool_IsNull_UseTransaction - => GetString("MasterPool_IsNull_UseTransaction"); - - /// - /// 缺少 FreeSql 数据库实现包:FreeSql.Provider.{Provider}.dll,可前往 nuget 下载 - /// - public static string Missing_FreeSqlProvider_Package(object Provider) - => string.Format( - GetString("Missing_FreeSqlProvider_Package", nameof(Provider)), - Provider); - - /// - /// 缺少 FreeSql 数据库实现包:{dll},可前往 nuget 下载;如果存在 {dll} 依然报错(原因是环境问题导致反射不到类型),请在 UseConnectionString/UseConnectionFactory 第三个参数手工传入 typeof({providerType}) - /// - public static string Missing_FreeSqlProvider_Package_Reason(object dll, object providerType) - => string.Format( - GetString("Missing_FreeSqlProvider_Package_Reason", nameof(dll), nameof(providerType)), - dll, providerType); - - /// - /// 导航属性 {trytbTypeName}.{pnvName} 特性 [Navigate] Bind 数目({bindColumnsCount}) 与 外部主键数目({tbrefPrimarysLength}) 不相同 - /// - public static string Navigation_Bind_Number_Different(object trytbTypeName, object pnvName, object bindColumnsCount, object tbrefPrimarysLength) - => string.Format( - GetString("Navigation_Bind_Number_Different", nameof(trytbTypeName), nameof(pnvName), nameof(bindColumnsCount), nameof(tbrefPrimarysLength)), - trytbTypeName, pnvName, bindColumnsCount, tbrefPrimarysLength); - - /// - /// {tb2DbName}.{mp2MemberName} 导航属性集合忘了 .AsSelect() 吗?如果在 ToList(a => a.{mp2MemberName}) 中使用,请移步参考 IncludeMany 文档。 - /// - public static string Navigation_Missing_AsSelect(object tb2DbName, object mp2MemberName) - => string.Format( - GetString("Navigation_Missing_AsSelect", nameof(tb2DbName), nameof(mp2MemberName)), - tb2DbName, mp2MemberName); - - /// - /// 【导航属性】{trytbTypeDisplayCsharp}.{pName} 缺少 set 属性 - /// - public static string Navigation_Missing_SetProperty(object trytbTypeDisplayCsharp, object pName) - => string.Format( - GetString("Navigation_Missing_SetProperty", nameof(trytbTypeDisplayCsharp), nameof(pName)), - trytbTypeDisplayCsharp, pName); - - /// - /// 导航属性 {trytbTypeName}.{pnvName} 没有找到对应的字段,如:{pnvName}{findtbrefPkCsName}、{pnvName}_{findtbrefPkCsName}。或者使用 [Navigate] 特性指定关系映射。 - /// - public static string Navigation_NotFound_CorrespondingField(object trytbTypeName, object pnvName, object findtbrefPkCsName) - => string.Format( - GetString("Navigation_NotFound_CorrespondingField", nameof(trytbTypeName), nameof(pnvName), nameof(findtbrefPkCsName)), - trytbTypeName, pnvName, findtbrefPkCsName); - - /// - /// 导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {trytcTypeName} 缺少主键标识,[Column(IsPrimary = true)] - /// - public static string Navigation_ParsingError_EntityMissingPrimaryKey(object trytbTypeName, object pnvName, object trytcTypeName) - => string.Format( - GetString("Navigation_ParsingError_EntityMissingPrimaryKey", nameof(trytbTypeName), nameof(pnvName), nameof(trytcTypeName)), - trytbTypeName, pnvName, trytcTypeName); - - /// - /// 导航属性 {trytbTypeName}.{pnvName} 解析错误,{trytbCsName}.{trycolCsName} 和 {tbrefCsName}.{tbrefPrimarysCsName} 类型不一致 - /// - public static string Navigation_ParsingError_InconsistentType(object trytbTypeName, object pnvName, object trytbCsName, object trycolCsName, object tbrefCsName, object tbrefPrimarysCsName) - => string.Format( - GetString("Navigation_ParsingError_InconsistentType", nameof(trytbTypeName), nameof(pnvName), nameof(trytbCsName), nameof(trycolCsName), nameof(tbrefCsName), nameof(tbrefPrimarysCsName)), - trytbTypeName, pnvName, trytbCsName, trycolCsName, tbrefCsName, tbrefPrimarysCsName); - - /// - /// 导航属性 {trytbTypeName}.{pnvName} 特性 [Navigate] 解析错误,在 {tbrefTypeName} 未找到属性:{bi} - /// - public static string Navigation_ParsingError_NotFound_Property(object trytbTypeName, object pnvName, object tbrefTypeName, object bi) - => string.Format( - GetString("Navigation_ParsingError_NotFound_Property", nameof(trytbTypeName), nameof(pnvName), nameof(tbrefTypeName), nameof(bi)), - trytbTypeName, pnvName, tbrefTypeName, bi); - - /// - /// {tableTypeDisplayCsharp} 没有定义主键,无法使用 SetSource,请尝试 SetDto 或者 SetSource 指定临时主键 - /// - public static string NoPrimaryKey_UseSetDto(object tableTypeDisplayCsharp) - => string.Format( - GetString("NoPrimaryKey_UseSetDto", nameof(tableTypeDisplayCsharp)), - tableTypeDisplayCsharp); - - /// - /// 没有定义属性 - /// - public static string NoProperty_Defined - => GetString("NoProperty_Defined"); - - /// - /// 未实现 - /// - public static string Not_Implemented - => GetString("Not_Implemented"); - - /// - /// 未实现函数表达式 {exp} 解析 - /// - public static string Not_Implemented_Expression(object exp) - => string.Format( - GetString("Not_Implemented_Expression", nameof(exp)), - exp); - - /// - /// 未实现函数表达式 {exp} 解析,参数 {expArguments} 必须为常量 - /// - public static string Not_Implemented_Expression_ParameterUseConstant(object exp, object expArguments) - => string.Format( - GetString("Not_Implemented_Expression_ParameterUseConstant", nameof(exp), nameof(expArguments)), - exp, expArguments); - - /// - /// 未实现函数表达式 {exp} 解析,如果正在操作导航属性集合,请使用 .AsSelect().{exp3MethodName}({exp3ArgumentsCount}) - /// - public static string Not_Implemented_Expression_UseAsSelect(object exp, object exp3MethodName, object exp3ArgumentsCount) - => string.Format( - GetString("Not_Implemented_Expression_UseAsSelect", nameof(exp), nameof(exp3MethodName), nameof(exp3ArgumentsCount)), - exp, exp3MethodName, exp3ArgumentsCount); - - /// - /// 未实现 MemberAccess 下的 Constant - /// - public static string Not_Implemented_MemberAcess_Constant - => GetString("Not_Implemented_MemberAcess_Constant"); - - /// - /// 未实现 {name} - /// - public static string Not_Implemented_Name(object name) - => string.Format( - GetString("Not_Implemented_Name", nameof(name)), - name); - - /// - /// 不支持 - /// - public static string Not_Support - => GetString("Not_Support"); - - /// - /// {dataType} 不支持 OrderByRandom 随机排序 - /// - public static string Not_Support_OrderByRandom(object dataType) - => string.Format( - GetString("Not_Support_OrderByRandom", nameof(dataType)), - dataType); - - /// - /// {property} 不是有效的导航属性 - /// - public static string Not_Valid_Navigation_Property(object property) - => string.Format( - GetString("Not_Valid_Navigation_Property", nameof(property)), - property); - - /// - /// {dbName} 找不到列 {memberName} - /// - public static string NotFound_Column(object dbName, object memberName) - => string.Format( - GetString("NotFound_Column", nameof(dbName), nameof(memberName)), - dbName, memberName); - - /// - /// 找不到 {CsName} 对应的列 - /// - public static string NotFound_CsName_Column(object CsName) - => string.Format( - GetString("NotFound_CsName_Column", nameof(CsName)), - CsName); - - /// - /// 找不到属性:{memberName} - /// - public static string NotFound_Property(object memberName) - => string.Format( - GetString("NotFound_Property", nameof(memberName)), - memberName); - - /// - /// 找不到属性名 {proto} - /// - public static string NotFound_PropertyName(object proto) - => string.Format( - GetString("NotFound_PropertyName", nameof(proto)), - proto); - - /// - /// Custom 找不到对应的{{ 反射信息 }}:{fiValueCustomArray} - /// - public static string NotFound_Reflection(object fiValueCustomArray) - => string.Format( - GetString("NotFound_Reflection", nameof(fiValueCustomArray)), - fiValueCustomArray); - - /// - /// Custom 找不到对应的{{ 静态方法名 }}:{fiValueCustomArray} - /// - public static string NotFound_Static_MethodName(object fiValueCustomArray) - => string.Format( - GetString("NotFound_Static_MethodName", nameof(fiValueCustomArray)), - fiValueCustomArray); - - /// - /// [Table(AsTable = xx)] 设置的属性名 {atmGroupsValue} 不存在 - /// - public static string NotFound_Table_Property_AsTable(object atmGroupsValue) - => string.Format( - GetString("NotFound_Table_Property_AsTable", nameof(atmGroupsValue)), - atmGroupsValue); - - /// - /// 未指定 UseConnectionString 或者 UseConnectionFactory - /// - public static string NotSpecified_UseConnectionString_UseConnectionFactory - => GetString("NotSpecified_UseConnectionString_UseConnectionFactory"); - - /// - /// 【{policyName}】ObjectPool.{GetName}() timeout {totalSeconds} seconds, see: https://github.com/dotnetcore/FreeSql/discussions/1081 - /// - public static string ObjectPool_Get_Timeout(object policyName, object GetName, object totalSeconds) - => string.Format( - GetString("ObjectPool_Get_Timeout", nameof(policyName), nameof(GetName), nameof(totalSeconds)), - policyName, GetName, totalSeconds); - - /// - /// 【{policyName}】ObjectPool.GetAsync() The queue is too long. Policy.AsyncGetCapacity = {asyncGetCapacity} - /// - public static string ObjectPool_GetAsync_Queue_Long(object policyName, object asyncGetCapacity) - => string.Format( - GetString("ObjectPool_GetAsync_Queue_Long", nameof(policyName), nameof(asyncGetCapacity)), - policyName, asyncGetCapacity); - - /// - /// 【OneToMany】导航属性 {trytbTypeName}.{pnvName} 在 {tbrefCsName} 中没有找到对应的字段,如:{findtrytb}{findtrytbPkCsName}、{findtrytb}_{findtrytbPkCsName} - /// - public static string OneToMany_NotFound_CorrespondingField(object trytbTypeName, object pnvName, object tbrefCsName, object findtrytb, object findtrytbPkCsName) - => string.Format( - GetString("OneToMany_NotFound_CorrespondingField", nameof(trytbTypeName), nameof(pnvName), nameof(tbrefCsName), nameof(findtrytb), nameof(findtrytbPkCsName)), - trytbTypeName, pnvName, tbrefCsName, findtrytb, findtrytbPkCsName); - - /// - /// 【OneToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,{trytbCsName}.{trytbPrimarysCsName} 和 {tbrefCsName}.{trycolCsName} 类型不一致 - /// - public static string OneToMany_ParsingError_InconsistentType(object trytbTypeName, object pnvName, object trytbCsName, object trytbPrimarysCsName, object tbrefCsName, object trycolCsName) - => string.Format( - GetString("OneToMany_ParsingError_InconsistentType", nameof(trytbTypeName), nameof(pnvName), nameof(trytbCsName), nameof(trytbPrimarysCsName), nameof(tbrefCsName), nameof(trycolCsName)), - trytbTypeName, pnvName, trytbCsName, trytbPrimarysCsName, tbrefCsName, trycolCsName); - - /// - /// 、{refpropName}{findtrytbPkCsName}、{refpropName}_{findtrytbPkCsName}。或者使用 [Navigate] 特性指定关系映射。 - /// - public static string OneToMany_UseNavigate(object refpropName, object findtrytbPkCsName) - => string.Format( - GetString("OneToMany_UseNavigate", nameof(refpropName), nameof(findtrytbPkCsName)), - refpropName, findtrytbPkCsName); - - /// - /// 参数 field 未指定 - /// - public static string Parameter_Field_NotSpecified - => GetString("Parameter_Field_NotSpecified"); - - /// - /// {property} 参数错误,它不是集合属性,必须为 IList<T> 或者 ICollection<T> - /// - public static string ParameterError_NotValid_Collection(object property) - => string.Format( - GetString("ParameterError_NotValid_Collection", nameof(property)), - property); - - /// - /// {property} 参数错误,它不是有效的导航属性 - /// - public static string ParameterError_NotValid_Navigation(object property) - => string.Format( - GetString("ParameterError_NotValid_Navigation", nameof(property)), - property); - - /// - /// {where} 参数错误,{keyval} 不是有效的属性名,在实体类 {reftbTypeDisplayCsharp} 无法找到 - /// - public static string ParameterError_NotValid_PropertyName(object where, object keyval, object reftbTypeDisplayCsharp) - => string.Format( - GetString("ParameterError_NotValid_PropertyName", nameof(where), nameof(keyval), nameof(reftbTypeDisplayCsharp)), - where, keyval, reftbTypeDisplayCsharp); - - /// - /// {property} 参数错误,格式 "TopicId=Id,多组使用逗号连接" - /// - public static string ParameterError_NotValid_UseCommas(object property) - => string.Format( - GetString("ParameterError_NotValid_UseCommas", nameof(property)), - property); - - /// - /// 解析失败 {callExpMethodName} {message} - /// - public static string Parsing_Failed(object callExpMethodName, object message) - => string.Format( - GetString("Parsing_Failed", nameof(callExpMethodName), nameof(message)), - callExpMethodName, message); - - /// - /// 【{policyName}】The ObjectPool has been disposed, see: https://github.com/dotnetcore/FreeSql/discussions/1079 - /// - public static string Policy_ObjectPool_Dispose(object policyName) - => string.Format( - GetString("Policy_ObjectPool_Dispose", nameof(policyName)), - policyName); - - /// - /// 【{policyName}】状态不可用,等待后台检查程序恢复方可使用。{UnavailableExceptionMessage} - /// - public static string Policy_Status_NotAvailable(object policyName, object UnavailableExceptionMessage) - => string.Format( - GetString("Policy_Status_NotAvailable", nameof(policyName), nameof(UnavailableExceptionMessage)), - policyName, UnavailableExceptionMessage); - - /// - /// 属性{trytbVersionColumnCsName} 被标注为行锁(乐观锁)(IsVersion),但其必须为数字类型 或者 byte[] 或者 string,并且不可为 Nullable - /// - public static string Properties_AsRowLock_Must_Numeric_Byte(object trytbVersionColumnCsName) - => string.Format( - GetString("Properties_AsRowLock_Must_Numeric_Byte", nameof(trytbVersionColumnCsName)), - trytbVersionColumnCsName); - - /// - /// properties 参数不能为空 - /// - public static string Properties_Cannot_Null - => GetString("Properties_Cannot_Null"); - - /// - /// {property} 属性名无法找到 - /// - public static string Property_Cannot_Find(object property) - => string.Format( - GetString("Property_Cannot_Find", nameof(property)), - property); - - /// - /// Range 要求 Value 应该逗号分割,并且长度为 2 - /// - public static string Range_Comma_Separateda_By2Char - => GetString("Range_Comma_Separateda_By2Char"); - - /// - /// 回滚 - /// - public static string RollBack - => GetString("RollBack"); - - /// - /// 运行时错误,反射获取 IncludeMany 方法失败 - /// - public static string RunTimeError_Reflection_IncludeMany - => GetString("RunTimeError_Reflection_IncludeMany"); - - /// - /// 蛋疼的 Access 插入只能一条一条执行,不支持 values(..),(..) 也不支持 select .. UNION ALL select .. - /// - public static string S_Access_InsertOnlyOneAtTime - => GetString("S_Access_InsertOnlyOneAtTime"); - - /// - /// BaseEntity.Initialization 初始化错误,获取到 IFreeSql 是 null - /// - public static string S_BaseEntity_Initialization_Error - => GetString("S_BaseEntity_Initialization_Error"); - - /// - /// 【{thisName}】Block access and wait for recovery: {exMessage} - /// - public static string S_BlockAccess_WaitForRecovery(object thisName, object exMessage) - => string.Format( - GetString("S_BlockAccess_WaitForRecovery", nameof(thisName), nameof(exMessage)), - thisName, exMessage); - - /// - /// 无法将 IQueryable<{typeofName}> 转换为 ISelect<{typeofName}>,因为他的实现不是 FreeSql.Extensions.Linq.QueryableProvider - /// - public static string S_CannotBeConverted_To_ISelect(object typeofName) - => string.Format( - GetString("S_CannotBeConverted_To_ISelect", nameof(typeofName)), - typeofName); - - /// - /// 连接字符串错误 - /// - public static string S_ConnectionStringError - => GetString("S_ConnectionStringError"); - - /// - /// 【{thisName}】连接字符串错误,请检查。 - /// - public static string S_ConnectionStringError_Check(object thisName) - => string.Format( - GetString("S_ConnectionStringError_Check", nameof(thisName)), - thisName); - - /// - /// 连接字符串错误,或者检查项目属性 > 生成 > 目标平台:x86 | x64,或者改用 FreeSql.Provider.SqliteCore 访问 arm 平台 - /// - public static string S_ConnectionStringError_CheckProject - => GetString("S_ConnectionStringError_CheckProject"); - - /// - /// 【{thisName}】连接字符串错误,请检查。或者检查项目属性 > 生成 > 目标平台:x86 | x64,或者改用 FreeSql.Provider.SqliteCore 访问 arm 平台 - /// - public static string S_ConnectionStringError_CheckProjectConnection(object thisName) - => string.Format( - GetString("S_ConnectionStringError_CheckProjectConnection", nameof(thisName)), - thisName); - - /// - /// FreeSql.Provider.CustomAdapter 无法使用 CreateCommand - /// - public static string S_CustomAdapter_Cannot_Use_CreateCommand - => GetString("S_CustomAdapter_Cannot_Use_CreateCommand"); - - /// - /// FreeSql.Provider.CustomAdapter 仅支持 UseConnectionFactory 方式构建 IFreeSql - /// - public static string S_CustomAdapter_OnlySuppport_UseConnectionFactory - => GetString("S_CustomAdapter_OnlySuppport_UseConnectionFactory "); - - /// - /// 达梦 CodeFirst 不支持代码创建 tablespace 与 schemas {tbname} - /// - public static string S_Dameng_NotSupport_TablespaceSchemas (object tbname) - => string.Format( - GetString("S_Dameng_NotSupport_TablespaceSchemas ", nameof(tbname)), - tbname); - - /// - /// -DB 参数错误,未提供 ConnectionString - /// - public static string S_DB_Parameter_Error_NoConnectionString - => GetString("S_DB_Parameter_Error_NoConnectionString"); - - /// - /// -DB 参数错误,格式为:MySql,ConnectionString - /// - public static string S_DB_ParameterError - => GetString("S_DB_ParameterError"); - - /// - /// -DB 参数错误,不支持的类型:"{dbargs}" - /// - public static string S_DB_ParameterError_UnsupportedType(object dbargs) - => string.Format( - GetString("S_DB_ParameterError_UnsupportedType", nameof(dbargs)), - dbargs); - - /// - /// {method} 是 FreeSql.Provider.{provider} 特有的功能 - /// - public static string S_Features_Unique(object method, object provider) - => string.Format( - GetString("S_Features_Unique", nameof(method), nameof(provider)), - method, provider); - - /// - /// fsql.InsertOrUpdate Sqlite 无法完成 UpdateColumns 操作 - /// - public static string S_InsertOrUpdate_Unable_UpdateColumns - => GetString("S_InsertOrUpdate_Unable_UpdateColumns"); - - /// - /// 主库 - /// - public static string S_MasterDatabase - => GetString("S_MasterDatabase"); - - /// - /// MygisGeometry.Parse 未实现 "{wkt}" - /// - public static string S_MygisGeometry_NotImplement(object wkt) - => string.Format( - GetString("S_MygisGeometry_NotImplement", nameof(wkt)), - wkt); - - /// - /// -NameOptions 参数错误,格式为:0,0,0,0 - /// - public static string S_NameOptions_Incorrect - => GetString("S_NameOptions_Incorrect"); - - /// - /// 未实现该功能 - /// - public static string S_Not_Implemented_Feature - => GetString("S_Not_Implemented_Feature"); - - /// - /// 未实现错误,请反馈给作者 - /// - public static string S_Not_Implemented_FeedBack - => GetString("S_Not_Implemented_FeedBack"); - - /// - /// 找不到 {name} - /// - public static string S_NotFound_Name(object name) - => string.Format( - GetString("S_NotFound_Name", nameof(name)), - name); - - /// - /// FreeSql.Provider.{providerName} 未实现 Skip/Offset 功能,如果需要分页请使用判断上一次 id - /// - public static string S_NotImplementSkipOffset(object providerName) - => string.Format( - GetString("S_NotImplementSkipOffset", nameof(providerName)), - providerName); - - /// - /// 对象池 - /// - public static string S_ObjectPool - => GetString("S_ObjectPool"); - - /// - /// 旧表(OldName):{tboldname} 存在,数据库已存在 {tbname} 表,无法改名 - /// - public static string S_OldTableExists(object tboldname, object tbname) - => string.Format( - GetString("S_OldTableExists", nameof(tboldname), nameof(tbname)), - tboldname, tbname); - - /// - /// OnConflictDoUpdate 功能要求实体类必须设置 IsPrimary 属性 - /// - public static string S_OnConflictDoUpdate_MustIsPrimary - => GetString("S_OnConflictDoUpdate_MustIsPrimary"); - - /// - /// Oracle CodeFirst 不支持代码创建 tablespace 与 schemas {tbname} - /// - public static string S_Oracle_NotSupport_TablespaceSchemas(object tbname) - => string.Format( - GetString("S_Oracle_NotSupport_TablespaceSchemas", nameof(tbname)), - tbname); - - /// - /// 解析失败 {callExpMethodName} {message},提示:可以使用扩展方法 IQueryable.RestoreToSelect() 还原为 ISelect 再查询 - /// - public static string S_ParsingFailed_UseRestoreToSelect(object callExpMethodName, object message) - => string.Format( - GetString("S_ParsingFailed_UseRestoreToSelect", nameof(callExpMethodName), nameof(message)), - callExpMethodName, message); - - /// - /// fsql.InsertOrUpdate + IfExistsDoNothing + {providerName}要求实体类 {tableCsName} 必须有主键 - /// - public static string S_RequiresEntityPrimaryKey(object providerName, object tableCsName) - => string.Format( - GetString("S_RequiresEntityPrimaryKey", nameof(providerName), nameof(tableCsName)), - providerName, tableCsName); - - /// - /// SelectMany 错误的类型:{typeFullName} - /// - public static string S_SelectManayErrorType(object typeFullName) - => string.Format( - GetString("S_SelectManayErrorType", nameof(typeFullName)), - typeFullName); - - /// - /// 从库 - /// - public static string S_SlaveDatabase - => GetString("S_SlaveDatabase"); - - /// - /// 类型 {objentityTypeFullName} 不可迁移 - /// - public static string S_Type_IsNot_Migrable(object objentityTypeFullName) - => string.Format( - GetString("S_Type_IsNot_Migrable", nameof(objentityTypeFullName)), - objentityTypeFullName); - - /// - /// 类型 {objentityTypeFullName} 不可迁移,可迁移属性0个 - /// - public static string S_Type_IsNot_Migrable_0Attributes(object objentityTypeFullName) - => string.Format( - GetString("S_Type_IsNot_Migrable_0Attributes", nameof(objentityTypeFullName)), - objentityTypeFullName); - - /// - /// 未实现 {columnDbTypeTextFull} 类型映射 - /// - public static string S_TypeMappingNotImplemented(object columnDbTypeTextFull) - => string.Format( - GetString("S_TypeMappingNotImplemented", nameof(columnDbTypeTextFull)), - columnDbTypeTextFull); - - /// - /// 错误的参数设置:{args} - /// - public static string S_WrongParameter(object args) - => string.Format( - GetString("S_WrongParameter", nameof(args)), - args); - - /// - /// {qoteSql} is NULL,除非设置特性 [Column(IsNullable = false)] - /// - public static string Set_Column_IsNullable_False(object qoteSql) - => string.Format( - GetString("Set_Column_IsNullable_False", nameof(qoteSql)), - qoteSql); - - /// - /// 分表字段值 "{dt}" 不能小于 "{beginTime} " - /// - public static string SubTableFieldValue_CannotLessThen(object dt, object beginTime) - => string.Format( - GetString("SubTableFieldValue_CannotLessThen", nameof(dt), nameof(beginTime)), - dt, beginTime); - - /// - /// 分表字段值不能为 null - /// - public static string SubTableFieldValue_IsNotNull - => GetString("SubTableFieldValue_IsNotNull"); - - /// - /// 分表字段值 "{columnValue}" 不能转化成 DateTime - /// - public static string SubTableFieldValue_NotConvertDateTime(object columnValue) - => string.Format( - GetString("SubTableFieldValue_NotConvertDateTime", nameof(columnValue)), - columnValue); - - /// - /// 分表字段值 "{dt}" 未匹配到分表名 - /// - public static string SubTableFieldValue_NotMatchTable(object dt) - => string.Format( - GetString("SubTableFieldValue_NotMatchTable", nameof(dt)), - dt); - - /// - /// T2 类型错误 - /// - public static string T2_Type_Error - => GetString("T2_Type_Error"); - - /// - /// tableName 格式错误,示例:“log_{yyyyMMdd}” - /// - public static string TableName_Format_Error(object yyyyMMdd) - => string.Format( - GetString("TableName_Format_Error", nameof(yyyyMMdd)), - yyyyMMdd); - - /// - /// {Type}.AsType 参数错误,请传入正确的实体类型 - /// - public static string Type_AsType_Parameter_Error(object Type) - => string.Format( - GetString("Type_AsType_Parameter_Error", nameof(Type)), - Type); - - /// - /// {thatFullName} 类型无法访问构造函数 - /// - public static string Type_Cannot_Access_Constructor(object thatFullName) - => string.Format( - GetString("Type_Cannot_Access_Constructor", nameof(thatFullName)), - thatFullName); - - /// - /// {name} 类型错误 - /// - public static string Type_Error_Name(object name) - => string.Format( - GetString("Type_Error_Name", nameof(name)), - name); - - /// - /// {Type}.AsType 参数不支持指定为 object - /// - public static string TypeAsType_NotSupport_Object(object Type) - => string.Format( - GetString("TypeAsType_NotSupport_Object", nameof(Type)), - Type); - - /// - /// 类型 {typeofFullName} 错误,不能使用 IncludeMany - /// - public static string TypeError_CannotUse_IncludeMany(object typeofFullName) - => string.Format( - GetString("TypeError_CannotUse_IncludeMany", nameof(typeofFullName)), - typeofFullName); - - /// - /// 无法解析表达式:{exp} - /// - public static string Unable_Parse_Expression(object exp) - => string.Format( - GetString("Unable_Parse_Expression", nameof(exp)), - exp); - - /// - /// 无法解析表达式方法 {exp3tmpCallMethodName} - /// - public static string Unable_Parse_ExpressionMethod(object exp3tmpCallMethodName) - => string.Format( - GetString("Unable_Parse_ExpressionMethod", nameof(exp3tmpCallMethodName)), - exp3tmpCallMethodName); - - /// - /// 请使用 fsql.InsertDict(dict) 方法插入字典数据 - /// - public static string Use_InsertDict_Method - => GetString("Use_InsertDict_Method"); - - private static string GetString(string name, params string[] formatterNames) - { - var value = _resourceManager.GetString(name,_resourceCulture); - for (var i = 0; i < formatterNames.Length; i++) - { - value = value.Replace("{" + formatterNames[i] + "}", "{" + i + "}"); - } - - return value; - } - } -} - diff --git a/FreeSql/Properties/CoreStrings.Designer.tt b/FreeSql/Properties/CoreStrings.Designer.tt deleted file mode 100644 index 1b17aead8..000000000 --- a/FreeSql/Properties/CoreStrings.Designer.tt +++ /dev/null @@ -1,5 +0,0 @@ -<# - Session["ResourceFile"] = "CoreStrings.resx"; - Session["AccessModifier"] = "public"; -#> -<#@ include file="Resources.tt" #> \ No newline at end of file diff --git a/FreeSql/Properties/CoreStrings.resx b/FreeSql/Properties/CoreStrings.resx deleted file mode 100644 index 6328057c6..000000000 --- a/FreeSql/Properties/CoreStrings.resx +++ /dev/null @@ -1,603 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - FreeSql: [Table(AsTable="{asTable}")] Property value formatted incorrectly - - - FreeSql: The property name {atmGroupsValue} set by [Table (AsTable = xx)] is not of type DateTime - - - FreeSql: {name}: Failed to get resource {statistics} - - - FreeSql: {name}: An exception needs to be thrown - - - FreeSql: Wrong expression format {column} - - - FreeSql: Select is not available until the Chunk function - - - FreeSql: For security reasons, be sure to use ForUpdate after the transaction is open - - - FreeSql: Cannot be null - - - FreeSql: {name} cannot be null - - - FreeSql: Unable to match {property} - - - FreeSql: {property} cannot be resolved to an expression tree - - - FreeSql: The parameter master ConnectionString cannot be empty, check UseConnectionString - - - FreeSql: Commit - - - FreeSql: Connection failed, ready to switch other available servers - - - FreeSql: Custom expression parsing error: type {exp3MethodDeclaringType} needs to define static ThreadLocal<ExpressionCallContext>field, field, field (important three reminders) - - - FreeSql: Custom {Reflection Information} cannot be empty, format: {static method name}{space}{reflection information} - - - FreeSql: Custom {static method name} cannot be empty, format: {static method name}{space}{reflection information} - - - FreeSql: Custom corresponding {{static method name}}:{fiValueCustomArray} The [DynamicFilterCustomAttribute] attribute is not set - - - FreeSql: Custom requires that Fields be space-split and 2-length in the format: {static method name}{space}{reflection information} - - - FreeSql: The data type of the operation ({dataDisplayCsharp}) is inconsistent with AsType ({tableTypeDisplayCsharp}). Please check. - - - FreeSql: DateRange requires that Value be comma-separated and 2-length - - - FreeSql: DateRange requires that the Value [1] format must be: yyyy, yyyy-MM, yyyy-MM-dd, yyyyy-MM-dd HH, yyyy, yyyy-MM-dd HH:mm - - - FreeSql: The record may not exist, or the row level optimistic lock version is out of date, the number of updates {sourceCount}, the number of rows affected {affrows}. - - - FreeSql: The number of SlaveConnectionStrings is not the same as SlaveWeights - - - FreeSql: ColumnAttribute. Name {colattrName} exists repeatedly, please check (note: case insensitive) - - - FreeSql: Property name {pName} exists repeatedly, please check (note: case insensitive) - - - FreeSql: The {function} feature requires that the entity class {tableCsName} must have a primary key - - - FreeSql: {tbTypeFullName} is a parent-child relationship, but combinations of multiple primary keys are not supported in versions below MySql 8.0 - - - FreeSql: {tbTypeFullName} is not a parent-child relationship and cannot be used - - - FreeSql: This particular subquery cannot be resolved - - - FreeSql: Expression error, its top object is not ParameterExpression:{exp} - - - FreeSql: Expression error, it is not a continuous MemberAccess type: {exp} - - - FreeSql: ExpressionTree conversion type error, value ({value}), type ({valueTypeFullName}), target type ({typeFullName}), Error:{exMessage} - - - FreeSql: Failed to parse table field value {sqlWhere} - - - FreeSql: Function {asTable} not implemented by AsTable - - - FreeSql: GBase does not support separators other than commas at this time - - - FreeSql: TableName:{tableName} generated the same table name - - - FreeSql: The parameter'{primary}'passed by GetPrimarys is incorrect and does not belong to the key name of the dictionary data - - - FreeSql: {first} has already been specified and {second} can no longer be specified - - - FreeSql: {tb2DbName}. {mp2MemberName} is ignored. Check the IsIgnore setting to make sure get/set is public - - - FreeSql: Include parameter type error - - - FreeSql: Include parameter type is wrong, use IncludeMany for collection properties - - - FreeSql: Include parameter type is wrong, expression type should be MemberAccess - - - FreeSql: The property {collMemMemberName} of IncludeMany type {tbTypeDisplayCsharp} is not a valid navigation property, hint: IsIgnore = true will not be a navigation property - - - FreeSql: IncludeMany {navigateSelector} parameter is wrong, Select can only use one parameter's method, the correct format:.Select(t =>new TNavigate{{}}) - - - FreeSql: IncludeMany {navigateSelector} parameter error, Select lambda parameter return value must match {collMemElementType} type - - - FreeSql: IncludeMany parameter 1 has wrong type, expression type should be MemberAccess - - - FreeSql: IncludeMany {navigateSelector} parameter type is wrong, correct format: a.collections.Take(1).Where(c => C.A ID == a.id).Select (a => new TNavigate{{}}) - - - FreeSql: ISelect. InsertInto() did not select an attribute: {displayCsharp} - - - FreeSql: ISelect. InsertInto() type error: {displayCsharp} - - - FreeSql: The InsertOrUpdate function performs merge into requiring the entity class {CsName} to have a primary key - - - FreeSql: The generic parameter for InsertOrUpdate<>does not support {typeofT1}. Pass in your entity class - - - FreeSql: FreeSql needs to be installed for Delayed Loading. Extensions. LazyLoading. Dll, downloadable to nuget - - - FreeSql: {trytbTypeName} Compilation error: {exMessage}\r\n\r\n{cscode} - - - FreeSql: Entity type {trytbTypeName} must be declared public - - - FreeSql: ManyToMany navigation properties. AsSelect() is temporarily unavailable for the Sum/Avg/Max/Min/First/ToOne/ToList method - - - FreeSql: [ManyToMany] Navigation property {trytbTypeName}. {pnvName} did not find a corresponding field in {tbmidCsName}, such as: {midTypePropsTrytbName}{findtrytbPkCsName}, {midTypePropsTrytbName}_ {findtrytbPkCsName} - - - FreeSql: [ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, entity type {tbrefTypeName} missing primary key identity, [Column (IsPrimary = true)] - - - FreeSql: [ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, entity type {tbrefTypeName} must have a corresponding [Navigate (ManyToMany = x)] collection property - - - FreeSql: [ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, {tbmidCsName}. {trycolCsName} and {trytbCsName}. {trytbPrimarysCsName} type inconsistent - - - FreeSql: [ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, intermediate class {tbmidCsName}.{midTypePropsTrytbName} Error: {exMessage} - - - FreeSql: [ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, intermediate class {tbmidCsName}. The {midTypePropsTrytbName} navigation property is not ManyToOne or OneToOne - - - FreeSql: Mapping exception: {name} None of the property names are the same - - - FreeSql: Ado. MasterPool value is null, this operation cannot self-enable transactions, please explicitly pass [transaction object] resolution - - - FreeSql: Missing FreeSql database implementation package: FreeSql.Provider.{Provider}.Dll, downloadable to nuget - - - FreeSql: The FreeSql database implementation package is missing: {dll} can be downloaded to nuget; If there is {dll} and an error still occurs (due to environmental issues that cause the type to be unreflected), manually pass in typeof ({providerType}) in the third parameter of UseConnectionString/UseConnectionFactory - - - FreeSql: Navigation property {trytbTypeName}. The number of {pnvName} attributes [Navigate] Binds ({bindColumnsCount}) is different from the number of external primary keys ({tbrefPrimarysLength}) - - - FreeSql: {tb2DbName}. {mp2MemberName} Navigation Property Collection forgotten. AsSelect()? If used in ToList (a => a. {mp2MemberName}), step by step to refer to the IncludeMany document. - - - FreeSql: Navigation Properties {trytbTypeDisplayCsharp}. Missing set attribute for {pName} - - - FreeSql: Navigation property {trytbTypeName}. {pnvName} No corresponding fields were found, such as: {pnvName}{findtbrefPkCsName}, {pnvName}_ {findtbrefPkCsName}. Or use the [Navigate] attribute to specify the relationship mapping. - - - FreeSql: Navigation property {trytbTypeName}. {pnvName} parsing error, entity type {trytcTypeName} missing primary key identity, [Column (IsPrimary = true)] - - - FreeSql: Navigation property {trytbTypeName}. {pnvName} parsing error, {trytbCsName}. {trycolCsName} and {tbrefCsName}. {tbrefPrimarysCsName} type inconsistent - - - FreeSql: Navigation property {trytbTypeName}. {pnvName} attribute [Navigate] parsing error, property not found at {tbrefTypeName}: {bi} - - - FreeSql: {tableTypeDisplayCsharp} has no primary key defined and cannot use SetSource. Try SetDto - - - FreeSql: No properties defined - - - FreeSql: Not implemented - - - FreeSql: Function expression {exp} parsing not implemented - - - FreeSql: Function expression {exp} parsing not implemented, parameter {expArguments} must be constant - - - FreeSql: Function expression {exp} parsing is not implemented. Use if you are working on a navigation property collection. AsSelect (). {exp3MethodName} ({exp3ArgumentsCount}) - - - FreeSql: Constant under MemberAccess is not implemented - - - FreeSql: {name} is not implemented - - - FreeSql: I won't support it - - - FreeSql: {dataType} does not support OrderByRandom sorting - - - FreeSql: {property} is not a valid navigation property - - - FreeSql: {dbName} Column {memberName} not found - - - FreeSql: Cannot find the column corresponding to {CsName} - - - FreeSql: Attribute not found: {memberName} - - - FreeSql: Property name {proto} not found - - - FreeSql: Custom could not find the corresponding {{reflection information}}:{fiValueCustomArray} - - - FreeSql: Custom could not find the corresponding {{static method name}}:{fiValueCustomArray} - - - FreeSql: The property name {atmGroupsValue} set by [Table(AsTable = xx)] does not exist - - - FreeSql: No UseConnectionString or UseConnectionFactory specified - - - FreeSql: [{policyName}] ObjectPool. {GetName}() timeout {totalSeconds} seconds, see: https://github.com/dotnetcore/FreeSql/discussions/1081 - - - FreeSql: [{policyName}] ObjectPool. GetAsync() The queue is too long. Policy. AsyncGetCapacity = {asyncGetCapacity} - - - FreeSql: [OneToMany] Navigation property {trytbTypeName}.{pnvName} did not find a corresponding field in {tbrefCsName}, such as: {findtrytb}{findtrytbPkCsName}, {findtrytb}_{findtrytbPkCsName} - - - FreeSql: [OneToMany] Navigation property {trytbTypeName}.{pnvName} parsing error, {trytbCsName}.{trytbPrimarysCsName} and {tbrefCsName}.{trycolCsName} is of inconsistent type - - - , {refpropName}{findtrytbPkCsName}, {refpropName}_{findtrytbPkCsName}. Or use the [Navigate] attribute to specify the relationship mapping. - - - FreeSql: Parameter field not specified - - - FreeSql: The {property} parameter is incorrect, it is not a collection property and must be IList<T>or ICollection<T> - - - FreeSql: The {property} parameter is incorrect, it is not a valid navigation property - - - FreeSql: {where} parameter error, {keyval} is not a valid property name and cannot be found in entity class {reftbTypeDisplayCsharp} - - - FreeSql: {property} parameter error, format "TopicId=Id, multiple groups using comma connection" - - - FreeSql: Parsing failed {callExpMethodName} {message} - - - FreeSql: [{policyName}] The ObjectPool has been disposed, see: https://github.com/dotnetcore/FreeSql/discussions/1079 - - - FreeSql: The {policyName} status is unavailable and cannot be used until the background checker is restored. {UnavailableExceptionMessage} - - - FreeSql: The property {trytbVersionColumnCsName} is labeled as a row lock (optimistic lock) (IsVersion), but it must be a numeric type or byte[] or string, and it cannot be Nullable - - - FreeSql: Properrties parameter cannot be empty - - - FreeSql: {property} property name not found - - - FreeSql: Range requires that Value be comma-separated and 2-length - - - FreeSql: RollBack - - - FreeSql: Runtime error, reflection failed to get IncludeMany method - - - FreeSql: {qoteSql} is NULL unless the attribute [Column (IsNullable = false)] - - - FreeSql: Subtable field value'{dt}'cannot be less than'{beginTime}' - - - FreeSql: Subtable field value cannot be null - - - FreeSql: The tabular field value'{columnValue}'cannot be converted to DateTime - - - FreeSql: Table field value'{dt}'does not match table name - - - FreeSql: Type T2 Error - - - FreeSql: TableName format error, example: "log_{yyyyMMdd}" - - - FreeSql: {Type}. AsType parameter error, please pass in the correct entity type - - - FreeSql: The {thatFullName} type cannot access the constructor - - - FreeSql: {name} type error - - - FreeSql: {Type}. AsType parameter does not support specifying as object - - - FreeSql: Type {typeofFullName} error, IncludeMany cannot be used - - - FreeSql: Unable to parse expression: {exp} - - - FreeSql: Unable to parse expression method {exp3tmpCallMethodName} - - - FreeSql: Please use fsql. InsertDict (dict) method inserts dictionary data - - - FreeSql: {name} not found - - - FreeSql: Slave Database - - - FreeSql: Master Database - - - FreeSql: Egg pain Accs insertion can only be performed one at a time, values (..) are not supported. (..) Select is also not supported.. UNION ALL select.. - - - FreeSql: BaseEntity. Initialization initialization error, get IFreeSql is null - - - FreeSql: [{thisName}] Block access and wait for recovery: {exMessage} - - - FreeSql: IQueryable<{typeofName}> cannot be converted to ISelect<{typeofName}> because its implementation is not FreeSql.Extensions.Linq.QueryableProvider - - - FreeSql: Connection string error - - - FreeSql: [{thisName}] Connection string error, please check. - - - FreeSql: Connection string error, or check project properties > Build > Target Platform: x86 | x64, Or use FreeSql.Provider.SqliteCore accessing arm platform - - - FreeSql: [{thisName}] Connection string error, please check. Or check Project Properties > Build > Target Platform: x86 | x64, Or use FreeSql.Provider.SqliteCore accessing arm platform - - - FreeSql: FreeSql.Provider.CustomAdapter cannot use CreateCommand - - - FreeSql: FreeSql.Provider.CustomAdapter only supports building IFreeSql in the UseConnectionFactory way - - - FreeSql: Dream CodeFirst does not support code creation tablespace and schemas {tbname} - - - FreeSql: -DB parameter error, no ConnectionString provided - - - FreeSql: -DB parameter error, format: MySql, ConnectionString - - - FreeSql: -DB parameter error, unsupported type: "{dbargs}" - - - FreeSql: {method} is FreeSql.Provider.{provider} specific features - - - FreeSql: InsertOrUpdate Sqlite was unable to complete the UpdateColumns operation - - - FreeSql: MygisGeometry. Parse does not implement "{wkt}" - - - FreeSql: -NameOptions parameter incorrect, format: 0,0,0,0 - - - FreeSql: This function is not implemented - - - FreeSql: Unrealized error, please feedback to author - - - FreeSql: FreeSql.Provider.{providerName} does not implement Skip/Offset functionality, use to determine last ID if paging is required - - - FreeSql: Old table (OldName): {tboldname} exists, database already exists {tbname} table, cannot rename - - - FreeSql: The OnConflictDoUpdate feature requires that entity classes must set the IsPrimary property - - - FreeSql: Oracle CodeFirst does not support code creation of tablespace and schemas {tbname} - - - FreeSql: Parsing failed {callExpMethodName} {message}, hint: Extension method IQueryable can be used. RestoreToSelect() reverted to ISelect re-query - - - FreeSql: InsertOrUpdate + IfExistsDoNothing + {providerName} requires the entity class {tableCsName} to have a primary key - - - FreeSql: SelectMany error type: {typeFullName} - - - FreeSql: Type {objentityTypeFullName} is not migrable - - - FreeSql: Type {objentityTypeFullName} is not migrable, migratable property 0 - - - FreeSql: {columnDbTypeTextFull} type mapping not implemented - - - FreeSql: Wrong parameter setting: {args} - - - FreeSql: Object pool - - \ No newline at end of file diff --git a/FreeSql/Properties/CoreStrings.zh-Hans.resx b/FreeSql/Properties/CoreStrings.zh-Hans.resx deleted file mode 100644 index 2b501999b..000000000 --- a/FreeSql/Properties/CoreStrings.zh-Hans.resx +++ /dev/null @@ -1,638 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - [Table(AsTable = "{asTable}")] 特性值格式错误 - - - [Table(AsTable = xx)] 设置的属性名 {atmGroupsValue} 不是 DateTime 类型 - - - {name}: Failed to get resource {statistics} - - - {name}: An exception needs to be thrown - - - 错误的表达式格式 {column} - - - Chunk 功能之前不可使用 Select - - - 安全起见,请务必在事务开启之后,再使用 ForUpdate - - - 不能为 null - - - {name} 不能为 null - - - 无法匹配 {property} - - - {property} 无法解析为表达式树 - - - 参数 masterConnectionString 不可为空,请检查 UseConnectionString - - - 提交 - - - 连接失败,准备切换其他可用服务器 - - - 自定义表达式解析错误:类型 {exp3MethodDeclaringType} 需要定义 static ThreadLocal<ExpressionCallContext> 字段、字段、字段(重要三次提醒) - - - Custom { 反射信息 }不能为空,格式:{ 静态方法名 }{ 空格 }{ 反射信息 } - - - Custom { 静态方法名 }不能为空,格式:{ 静态方法名 }{ 空格 }{ 反射信息 } - - - Custom 对应的{{ 静态方法名 }}:{fiValueCustomArray} 未设置 [DynamicFilterCustomAttribute] 特性 - - - Custom 要求 Field 应该空格分割,并且长度为 2,格式:{ 静态方法名 }{ 空格 }{ 反射信息 } - - - 操作的数据类型({dataDisplayCsharp}) 与 AsType({tableTypeDisplayCsharp}) 不一致,请检查。 - - - DateRange 要求 Value 应该逗号分割,并且长度为 2 - - - DateRange 要求 Value[1] 格式必须为:yyyy、yyyy-MM、yyyy-MM-dd、yyyy-MM-dd HH、yyyy、yyyy-MM-dd HH:mm - - - 记录可能不存在,或者【行级乐观锁】版本过旧,更新数量{sourceCount},影响的行数{affrows}。 - - - SlaveConnectionString 数量与 SlaveWeights 不相同 - - - ColumnAttribute.Name {colattrName} 重复存在,请检查(注意:不区分大小写) - - - 属性名 {pName} 重复存在,请检查(注意:不区分大小写) - - - {function} 功能要求实体类 {tableCsName} 必须有主键 - - - {tbTypeFullName} 是父子关系,但是 MySql 8.0 以下版本中不支持组合多主键 - - - {tbTypeFullName} 不是父子关系,无法使用该功能 - - - 这个特别的子查询不能解析 - - - 表达式错误,它的顶级对象不是 ParameterExpression:{exp} - - - 表达式错误,它不是连续的 MemberAccess 类型:{exp} - - - ExpressionTree 转换类型错误,值({value}),类型({valueTypeFullName}),目标类型({typeFullName}),{exMessage} - - - 未能解析分表字段值 {sqlWhere} - - - AsTable 未实现的功能 {asTable} - - - GBase 暂时不支持逗号以外的分割符 - - - tableName:{tableName} 生成了相同的分表名 - - - GetPrimarys 传递的参数 "{primary}" 不正确,它不属于字典数据的键名 - - - 已经指定了 {first},不能再指定 {second} - - - {tb2DbName}.{mp2MemberName} 被忽略,请检查 IsIgnore 设置,确认 get/set 为 public - - - Include 参数类型错误 - - - Include 参数类型错误,集合属性请使用 IncludeMany - - - Include 参数类型错误,表达式类型应该为 MemberAccess - - - IncludeMany 类型 {tbTypeDisplayCsharp} 的属性 {collMemMemberName} 不是有效的导航属性,提示:IsIgnore = true 不会成为导航属性 - - - IncludeMany {navigateSelector} 参数错误,Select 只可以使用一个参数的方法,正确格式:.Select(t =>new TNavigate {{}}) - - - IncludeMany {navigateSelector} 参数错误,Select lambda参数返回值必须和 {collMemElementType} 类型一致 - - - IncludeMany 参数1 类型错误,表达式类型应该为 MemberAccess - - - IncludeMany {navigateSelector} 参数类型错误,正确格式: a.collections.Take(1).Where(c =>c.aid == a.id).Select(a=> new TNavigate{{}}) - - - ISelect.InsertInto() 未选择属性: {displayCsharp} - - - ISelect.InsertInto() 类型错误: {displayCsharp} - - - InsertOrUpdate 功能执行 merge into 要求实体类 {CsName} 必须有主键 - - - InsertOrUpdate<>的泛型参数 不支持 {typeofT1},请传递您的实体类 - - - 【延时加载】功能需要安装 FreeSql.Extensions.LazyLoading.dll,可前往 nuget 下载 - - - 【延时加载】{trytbTypeName} 编译错误:{exMessage}\r\n\r\n{cscode} - - - 【延时加载】实体类型 {trytbTypeName} 必须声明为 public - - - ManyToMany 导航属性 .AsSelect() 暂时不可用于 Sum/Avg/Max/Min/First/ToOne/ToList 方法 - - - 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 在 {tbmidCsName} 中没有找到对应的字段,如:{midTypePropsTrytbName}{findtrytbPkCsName}、{midTypePropsTrytbName}_{findtrytbPkCsName} - - - 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {tbrefTypeName} 缺少主键标识,[Column(IsPrimary = true)] - - - 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {tbrefTypeName} 必须存在对应的 [Navigate(ManyToMany = x)] 集合属性 - - - 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,{tbmidCsName}.{trycolCsName} 和 {trytbCsName}.{trytbPrimarysCsName} 类型不一致 - - - 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,中间类 {tbmidCsName}.{midTypePropsTrytbName} 错误:{exMessage} - - - 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,中间类 {tbmidCsName}.{midTypePropsTrytbName} 导航属性不是【ManyToOne】或【OneToOne】 - - - 映射异常:{name} 没有一个属性名相同 - - - Ado.MasterPool 值为 null,该操作无法自启用事务,请显式传递【事务对象】解决 - - - 缺少 FreeSql 数据库实现包:FreeSql.Provider.{Provider}.dll,可前往 nuget 下载 - - - 缺少 FreeSql 数据库实现包:{dll},可前往 nuget 下载;如果存在 {dll} 依然报错(原因是环境问题导致反射不到类型),请在 UseConnectionString/UseConnectionFactory 第三个参数手工传入 typeof({providerType}) - - - 导航属性 {trytbTypeName}.{pnvName} 特性 [Navigate] Bind 数目({bindColumnsCount}) 与 外部主键数目({tbrefPrimarysLength}) 不相同 - - - {tb2DbName}.{mp2MemberName} 导航属性集合忘了 .AsSelect() 吗?如果在 ToList(a => a.{mp2MemberName}) 中使用,请移步参考 IncludeMany 文档。 - - - 【导航属性】{trytbTypeDisplayCsharp}.{pName} 缺少 set 属性 - - - 导航属性 {trytbTypeName}.{pnvName} 没有找到对应的字段,如:{pnvName}{findtbrefPkCsName}、{pnvName}_{findtbrefPkCsName}。或者使用 [Navigate] 特性指定关系映射。 - - - 导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {trytcTypeName} 缺少主键标识,[Column(IsPrimary = true)] - - - 导航属性 {trytbTypeName}.{pnvName} 解析错误,{trytbCsName}.{trycolCsName} 和 {tbrefCsName}.{tbrefPrimarysCsName} 类型不一致 - - - 导航属性 {trytbTypeName}.{pnvName} 特性 [Navigate] 解析错误,在 {tbrefTypeName} 未找到属性:{bi} - - - {tableTypeDisplayCsharp} 没有定义主键,无法使用 SetSource,请尝试 SetDto 或者 SetSource 指定临时主键 - - - 没有定义属性 - - - 未实现 - - - 未实现函数表达式 {exp} 解析 - - - 未实现函数表达式 {exp} 解析,参数 {expArguments} 必须为常量 - - - 未实现函数表达式 {exp} 解析,如果正在操作导航属性集合,请使用 .AsSelect().{exp3MethodName}({exp3ArgumentsCount}) - - - 未实现 MemberAccess 下的 Constant - - - 未实现 {name} - - - 不支持 - - - {dataType} 不支持 OrderByRandom 随机排序 - - - {property} 不是有效的导航属性 - - - {dbName} 找不到列 {memberName} - - - 找不到 {CsName} 对应的列 - - - 找不到属性:{memberName} - - - 找不到属性名 {proto} - - - Custom 找不到对应的{{ 反射信息 }}:{fiValueCustomArray} - - - Custom 找不到对应的{{ 静态方法名 }}:{fiValueCustomArray} - - - [Table(AsTable = xx)] 设置的属性名 {atmGroupsValue} 不存在 - - - 未指定 UseConnectionString 或者 UseConnectionFactory - - - 【{policyName}】ObjectPool.{GetName}() timeout {totalSeconds} seconds, see: https://github.com/dotnetcore/FreeSql/discussions/1081 - - - 【{policyName}】ObjectPool.GetAsync() The queue is too long. Policy.AsyncGetCapacity = {asyncGetCapacity} - - - 【OneToMany】导航属性 {trytbTypeName}.{pnvName} 在 {tbrefCsName} 中没有找到对应的字段,如:{findtrytb}{findtrytbPkCsName}、{findtrytb}_{findtrytbPkCsName} - - - 【OneToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,{trytbCsName}.{trytbPrimarysCsName} 和 {tbrefCsName}.{trycolCsName} 类型不一致 - - - 、{refpropName}{findtrytbPkCsName}、{refpropName}_{findtrytbPkCsName}。或者使用 [Navigate] 特性指定关系映射。 - - - 参数 field 未指定 - - - {property} 参数错误,它不是集合属性,必须为 IList<T> 或者 ICollection<T> - - - {property} 参数错误,它不是有效的导航属性 - - - {where} 参数错误,{keyval} 不是有效的属性名,在实体类 {reftbTypeDisplayCsharp} 无法找到 - - - {property} 参数错误,格式 "TopicId=Id,多组使用逗号连接" - - - 解析失败 {callExpMethodName} {message} - - - 【{policyName}】The ObjectPool has been disposed, see: https://github.com/dotnetcore/FreeSql/discussions/1079 - - - 【{policyName}】状态不可用,等待后台检查程序恢复方可使用。{UnavailableExceptionMessage} - - - 属性{trytbVersionColumnCsName} 被标注为行锁(乐观锁)(IsVersion),但其必须为数字类型 或者 byte[] 或者 string,并且不可为 Nullable - - - properties 参数不能为空 - - - {property} 属性名无法找到 - - - Range 要求 Value 应该逗号分割,并且长度为 2 - - - 回滚 - - - 运行时错误,反射获取 IncludeMany 方法失败 - - - 蛋疼的 Access 插入只能一条一条执行,不支持 values(..),(..) 也不支持 select .. UNION ALL select .. - Providers - - - BaseEntity.Initialization 初始化错误,获取到 IFreeSql 是 null - Extensions - - - 【{thisName}】Block access and wait for recovery: {exMessage} - Providers - - - 无法将 IQueryable<{typeofName}> 转换为 ISelect<{typeofName}>,因为他的实现不是 FreeSql.Extensions.Linq.QueryableProvider - Extensions - - - 连接字符串错误 - Providers - - - 【{thisName}】连接字符串错误,请检查。 - Providers - - - 连接字符串错误,或者检查项目属性 > 生成 > 目标平台:x86 | x64,或者改用 FreeSql.Provider.SqliteCore 访问 arm 平台 - Providers - - - 【{thisName}】连接字符串错误,请检查。或者检查项目属性 > 生成 > 目标平台:x86 | x64,或者改用 FreeSql.Provider.SqliteCore 访问 arm 平台 - Providers - - - FreeSql.Provider.CustomAdapter 无法使用 CreateCommand - Providers - - - FreeSql.Provider.CustomAdapter 仅支持 UseConnectionFactory 方式构建 IFreeSql - Providers - - - 达梦 CodeFirst 不支持代码创建 tablespace 与 schemas {tbname} - Providers - - - -DB 参数错误,未提供 ConnectionString - Extensions - - - -DB 参数错误,格式为:MySql,ConnectionString - Extensions - - - -DB 参数错误,不支持的类型:"{dbargs}" - Extensions - - - {method} 是 FreeSql.Provider.{provider} 特有的功能 - Providers - - - fsql.InsertOrUpdate Sqlite 无法完成 UpdateColumns 操作 - Providers - - - 主库 - Providers - - - MygisGeometry.Parse 未实现 "{wkt}" - Providers - - - -NameOptions 参数错误,格式为:0,0,0,0 - Extensions - - - 未实现该功能 - Providers - - - 未实现错误,请反馈给作者 - Providers - - - 找不到 {name} - Providers - - - FreeSql.Provider.{providerName} 未实现 Skip/Offset 功能,如果需要分页请使用判断上一次 id - Providers - - - 对象池 - Providers - - - 旧表(OldName):{tboldname} 存在,数据库已存在 {tbname} 表,无法改名 - Providers - - - OnConflictDoUpdate 功能要求实体类必须设置 IsPrimary 属性 - Providers - - - Oracle CodeFirst 不支持代码创建 tablespace 与 schemas {tbname} - Providers - - - 解析失败 {callExpMethodName} {message},提示:可以使用扩展方法 IQueryable.RestoreToSelect() 还原为 ISelect 再查询 - Extensions - - - fsql.InsertOrUpdate + IfExistsDoNothing + {providerName}要求实体类 {tableCsName} 必须有主键 - Providers - - - SelectMany 错误的类型:{typeFullName} - Extensions - - - 从库 - Providers - - - 类型 {objentityTypeFullName} 不可迁移 - Providers - - - 类型 {objentityTypeFullName} 不可迁移,可迁移属性0个 - Providers - - - 未实现 {columnDbTypeTextFull} 类型映射 - Providers - - - 错误的参数设置:{args} - Extensions - - - {qoteSql} is NULL,除非设置特性 [Column(IsNullable = false)] - - - 分表字段值 "{dt}" 不能小于 "{beginTime} " - - - 分表字段值不能为 null - - - 分表字段值 "{columnValue}" 不能转化成 DateTime - - - 分表字段值 "{dt}" 未匹配到分表名 - - - T2 类型错误 - - - tableName 格式错误,示例:“log_{yyyyMMdd}” - - - {Type}.AsType 参数错误,请传入正确的实体类型 - - - {thatFullName} 类型无法访问构造函数 - - - {name} 类型错误 - - - {Type}.AsType 参数不支持指定为 object - - - 类型 {typeofFullName} 错误,不能使用 IncludeMany - - - 无法解析表达式:{exp} - - - 无法解析表达式方法 {exp3tmpCallMethodName} - - - 请使用 fsql.InsertDict(dict) 方法插入字典数据 - - \ No newline at end of file diff --git a/FreeSql/Properties/Resources.tt b/FreeSql/Properties/Resources.tt deleted file mode 100644 index 935558b84..000000000 --- a/FreeSql/Properties/Resources.tt +++ /dev/null @@ -1,281 +0,0 @@ -<#@ template hostspecific="true" #> -<#@ assembly name="System.Core" #> -<#@ assembly name="EnvDTE" #> -<#@ assembly name="System.Windows.Forms" #> -<#@ import namespace="System.Collections" #> -<#@ import namespace="System.Collections.Generic" #> -<#@ import namespace="System.ComponentModel.Design" #> -<#@ import namespace="System.IO" #> -<#@ import namespace="System.Linq" #> -<#@ import namespace="System.Resources" #> -<#@ import namespace="System.Text.RegularExpressions" #> -<#@ import namespace="EnvDTE" #> -<#@ import namespace="System.IO" #> -<#@ import namespace="Microsoft.VisualStudio.TextTemplating" #> - -<# - var model = LoadResources(); -#> -// - -using System; -using System.Reflection; -using System.Resources; -using System.Globalization; -<# - if (!model.NoDiagnostics) - { -#> -using System.Threading; -<# - } -#> - -namespace <#= model.Namespace #> -{ -<# - if (model.Namespace.EndsWith("Internal") - || model.AccessModifier == "internal") - { -#> - /// - /// This is an internal API that supports the FreeSql infrastructure and not subject to - /// the same compatibility standards as public APIs. It may be changed or removed without notice in - /// any release. You should only use it directly in your code with extreme caution and knowing that - /// doing so can result in application failures when updating to a new FreeSql release. - /// -<# - } - else - { -#> - /// - /// - /// String resources used in FreeSql exceptions, etc. - /// - /// - /// These strings are exposed publicly for use by database providers and extensions. - /// It is unusual for application code to need these strings. - /// - /// -<# - } -#> - <#= model.AccessModifier #> static class <#= model.Class #> - { - private static readonly ResourceManager _resourceManager = new ResourceManager("<#= model.ResourceName #>", typeof(<#= model.Class #>).Assembly); - - private static CultureInfo _resourceCulture; - - /// - /// 重写当前线程的 CurrentUICulture 属性,对 - /// 使用此强类型资源类的所有资源查找执行重写。 - /// - public static CultureInfo Culture - { - get - { - return _resourceCulture; - } - set - { - _resourceCulture = value; - } - } -<# - foreach (var resource in model.Resources) - { -#> - - /// -<# - foreach (var line in Lines(resource.Value)) - { -#> - /// <#= Xml(line) #> -<# - } -#> - /// -<# - if (resource.Obsolete) - { -#> - [Obsolete] -<# - } - - if (resource.Parameters.Any()) - { -#> - public static string <#= resource.Name #>(<#= List("object ", resource.Parameters.Select(e => e.ParamString)) #>) - => string.Format( - GetString("<#= resource.Name #>", <#= List(resource.Parameters.Select(e => e.NameOfString)) #>), - <#= List(resource.Parameters.Select(e => e.ParamString)) #>); -<# - } - else - { -#> - public static string <#= resource.Name #> - => GetString("<#= resource.Name #>"); -<# - } - } -#> - - private static string GetString(string name, params string[] formatterNames) - { - var value = _resourceManager.GetString(name,_resourceCulture); - for (var i = 0; i < formatterNames.Length; i++) - { - value = value.Replace("{" + formatterNames[i] + "}", "{" + i + "}"); - } - - return value; - } - } -} - -<#+ - ResourceFile LoadResources() - { - var result = new ResourceFile(); - - if (Session.ContainsKey("AccessModifier")) - { - result.AccessModifier = (string)Session["AccessModifier"]; - }; - - var services = (IServiceProvider)Host; - var dte = (DTE)services.GetCOMService(typeof(DTE)); - if (!Session.TryGetValue("NoDiagnostics", out var noDiagnostics)) - { - noDiagnostics = false; - } - - result.NoDiagnostics = (bool)noDiagnostics; - - var resourceFile = (string)Session["ResourceFile"]; - if (!Path.IsPathRooted(resourceFile)) - { - resourceFile = Host.ResolvePath(resourceFile); - } - - var resourceProjectItem = dte.Solution.FindProjectItem(resourceFile); - var templateProjectItem = dte.Solution.FindProjectItem(Host.TemplateFile); - var project = templateProjectItem.ContainingProject; - var rootNamespace = (string)project.Properties.Item("RootNamespace").Value; - var resourceDir = Path.GetDirectoryName(resourceFile); - var projectDir = (string)project.Properties.Item("FullPath").Value; - var resourceNamespace = rootNamespace + "." + resourceDir.Substring(projectDir.Length) - .Replace(Path.DirectorySeparatorChar, '.'); - - result.Namespace = (string)resourceProjectItem.Properties.Item("CustomToolNamespace")?.Value; - if (string.IsNullOrEmpty(result.Namespace)) - { - result.Namespace = resourceNamespace; - } - - result.Class = Path.GetFileNameWithoutExtension(resourceFile); - - result.ResourceName = resourceNamespace + "." + result.Class; - if(File.Exists(resourceFile.Replace(".resx", ".zh-Hans.resx"))) - { - resourceFile = resourceFile.Replace(".resx", ".zh-Hans.resx"); - } - List sortedResources; - using (var reader = new ResXResourceReader(resourceFile)) - { - reader.UseResXDataNodes = true; - sortedResources = Enumerable.ToList( - from DictionaryEntry r in reader - orderby r.Key - select (ResXDataNode)r.Value); - - result.Resources = sortedResources - .Select(r => new Resource(r)) - .ToList(); - } - - using (var writer = new ResXResourceWriter(resourceFile)) - { - foreach (var node in sortedResources) - writer.AddResource(node); - - writer.Generate(); - } - - return result; - } - - IEnumerable Lines(string value) - => value.Split(new[] { Environment.NewLine }, StringSplitOptions.None); - - string Xml(string value) - => value.Replace("<", "<").Replace(">", ">"); - - string List(IEnumerable items) - => List(null, items); - - string List(string prefix, IEnumerable items, string suffix = null) - => string.Join(", ", items.Select(i => prefix + i + suffix)); - - class ResourceFile - { - public string Namespace { get; set; } - public string AccessModifier { get; set; } = "public"; - public string Class { get; set; } - public string ResourceName { get; set; } - public IEnumerable Resources { get; set; } - public bool NoDiagnostics { get; set; } - } - - class Resource - { - public Resource(ResXDataNode node) - { - Name = node.Name; - Value = (string)node.GetValue((ITypeResolutionService)null); - var parameters = Regex.Matches(Value, @"\{(\w+)\}") - .Cast() - .Select(m => m.Groups[1].Value) - .Distinct() - .Select(n => ("nameof(" + n + ")", n)) - .ToList(); - - foreach (var parameter in parameters.ToList()) - { - var rawString = parameter.Item2; - var underscoreIndex = rawString.IndexOf('_'); - if (underscoreIndex > 0) - { - var newIndex = int.Parse(rawString.Substring(0, underscoreIndex)); - parameters[newIndex] = ("\"" + rawString + "\"", rawString.Substring(underscoreIndex + 1)); - } - } - - Parameters = parameters; - - var eventInfo = node.Comment.Split(' '); - var argumentsRead = 0; - if (eventInfo.FirstOrDefault() == "Obsolete") - { - Obsolete = true; - argumentsRead++; - } - - Level = eventInfo.Skip(argumentsRead++).FirstOrDefault() ?? "BadLevel"; - EventId = eventInfo.Skip(argumentsRead++).FirstOrDefault() ?? "BadEventId"; - Types = eventInfo.Skip(argumentsRead++).ToList(); - } - - public string Name { get; } - public string Value { get; } - public string EventId { get; } - public string Level { get; } - public bool Obsolete { get; } - public IEnumerable<(string NameOfString, string ParamString)> Parameters { get; } - public IEnumerable Types { get; } - } -#> \ No newline at end of file diff --git a/Providers/FreeSql.Provider.ClickHouse/ClickHouseAdo/ClickHouseAdo.cs b/Providers/FreeSql.Provider.ClickHouse/ClickHouseAdo/ClickHouseAdo.cs index 2bd3ebd09..806beac12 100644 --- a/Providers/FreeSql.Provider.ClickHouse/ClickHouseAdo/ClickHouseAdo.cs +++ b/Providers/FreeSql.Provider.ClickHouse/ClickHouseAdo/ClickHouseAdo.cs @@ -30,14 +30,14 @@ namespace FreeSql.ClickHouse if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length); if (!string.IsNullOrEmpty(masterConnectionString)) MasterPool = isAdoPool ? - new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new ClickHouseConnection(masterConnectionString)) as IObjectPool : - new ClickHouseConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); + new DbConnectionStringPool(base.DataType, CoreErrorStrings.S_MasterDatabase, () => new ClickHouseConnection(masterConnectionString)) as IObjectPool : + new ClickHouseConnectionPool(CoreErrorStrings.S_MasterDatabase, masterConnectionString, null, null); slaveConnectionStrings?.ToList().ForEach(slaveConnectionString => { var slavePool = isAdoPool ? - new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new ClickHouseConnection(slaveConnectionString)) as IObjectPool : - new ClickHouseConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); + new DbConnectionStringPool(base.DataType, $"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new ClickHouseConnection(slaveConnectionString)) as IObjectPool : + new ClickHouseConnectionPool($"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); SlavePools.Add(slavePool); }); } diff --git a/Providers/FreeSql.Provider.ClickHouse/ClickHouseAdo/ClickHouseConnectionPool.cs b/Providers/FreeSql.Provider.ClickHouse/ClickHouseAdo/ClickHouseConnectionPool.cs index 62f8983b5..3c696259a 100644 --- a/Providers/FreeSql.Provider.ClickHouse/ClickHouseAdo/ClickHouseConnectionPool.cs +++ b/Providers/FreeSql.Provider.ClickHouse/ClickHouseAdo/ClickHouseConnectionPool.cs @@ -57,7 +57,7 @@ namespace FreeSql.ClickHouse { internal ClickHouseConnectionPool _pool; - public string Name { get; set; } = $"ClickHouse ClickHouseConnection {CoreStrings.S_ObjectPool}"; + public string Name { get; set; } = $"ClickHouse ClickHouseConnection {CoreErrorStrings.S_ObjectPool}"; public int PoolSize { get; set; } = 100; public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); @@ -131,8 +131,8 @@ namespace FreeSql.ClickHouse { if (obj.Value == null) { - _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + _pool.SetUnavailable(new Exception(CoreErrorStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false) @@ -161,8 +161,8 @@ namespace FreeSql.ClickHouse { if (obj.Value == null) { - _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + _pool.SetUnavailable(new Exception(CoreErrorStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) diff --git a/Providers/FreeSql.Provider.ClickHouse/ClickHouseCodeFirst.cs b/Providers/FreeSql.Provider.ClickHouse/ClickHouseCodeFirst.cs index 16282cabd..642ee15fd 100644 --- a/Providers/FreeSql.Provider.ClickHouse/ClickHouseCodeFirst.cs +++ b/Providers/FreeSql.Provider.ClickHouse/ClickHouseCodeFirst.cs @@ -173,9 +173,9 @@ namespace FreeSql.ClickHouse sb.Append("\r\n"); var tb = obj.tableSchema; if (tb == null) - throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); + throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); if (tb.Columns.Any() == false) - throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); + throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { database, tbname[0] }; diff --git a/Providers/FreeSql.Provider.ClickHouse/ClickHouseExpression.cs b/Providers/FreeSql.Provider.ClickHouse/ClickHouseExpression.cs index d66028146..0938d2b1e 100644 --- a/Providers/FreeSql.Provider.ClickHouse/ClickHouseExpression.cs +++ b/Providers/FreeSql.Provider.ClickHouse/ClickHouseExpression.cs @@ -299,7 +299,7 @@ namespace FreeSql.ClickHouse return _common.StringConcat(concatNewArrExp.Expressions.Select(a => getExp(a)).ToArray(), null); return _common.StringConcat(exp.Arguments.Select(a => getExp(a)).ToArray(), null); case "Format": - if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); + if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreErrorStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); if (exp.Arguments.Count == 1) return ExpressionLambdaToSql(exp.Arguments[0], tsc); var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ? (exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0); diff --git a/Providers/FreeSql.Provider.ClickHouse/Curd/ClickHouseDelete.cs b/Providers/FreeSql.Provider.ClickHouse/Curd/ClickHouseDelete.cs index 933253c5f..bc9e2f048 100644 --- a/Providers/FreeSql.Provider.ClickHouse/Curd/ClickHouseDelete.cs +++ b/Providers/FreeSql.Provider.ClickHouse/Curd/ClickHouseDelete.cs @@ -17,7 +17,7 @@ namespace FreeSql.ClickHouse.Curd { } - public override List ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreStrings.S_Not_Implemented_Feature}"); + public override List ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreErrorStrings.S_Not_Implemented_Feature}"); public override string ToSql() { @@ -59,7 +59,7 @@ namespace FreeSql.ClickHouse.Curd #if net40 #else - public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreStrings.S_Not_Implemented_Feature}"); + public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreErrorStrings.S_Not_Implemented_Feature}"); async public override Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default) { diff --git a/Providers/FreeSql.Provider.ClickHouse/Curd/ClickHouseUpdate.cs b/Providers/FreeSql.Provider.ClickHouse/Curd/ClickHouseUpdate.cs index d6654acad..4aa31bfad 100644 --- a/Providers/FreeSql.Provider.ClickHouse/Curd/ClickHouseUpdate.cs +++ b/Providers/FreeSql.Provider.ClickHouse/Curd/ClickHouseUpdate.cs @@ -30,7 +30,7 @@ namespace FreeSql.ClickHouse.Curd public override int ExecuteAffrows() => SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); protected override List ExecuteUpdated(IEnumerable columns) => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns); - protected override List RawExecuteUpdated(IEnumerable columns) => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreStrings.S_Not_Implemented_Feature}"); + protected override List RawExecuteUpdated(IEnumerable columns) => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreErrorStrings.S_Not_Implemented_Feature}"); protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) { @@ -280,7 +280,7 @@ namespace FreeSql.ClickHouse.Curd public override Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken); protected override Task> ExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns, cancellationToken); - protected override Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreStrings.S_Not_Implemented_Feature}"); + protected override Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreErrorStrings.S_Not_Implemented_Feature}"); async protected override Task SplitExecuteAsync(int valuesLimit, int parameterLimit, string traceName, Func executeAsync, CancellationToken cancellationToken = default) { diff --git a/Providers/FreeSql.Provider.Custom/Curd/CustomDelete.cs b/Providers/FreeSql.Provider.Custom/Curd/CustomDelete.cs index c5da7864c..67fbcdd39 100644 --- a/Providers/FreeSql.Provider.Custom/Curd/CustomDelete.cs +++ b/Providers/FreeSql.Provider.Custom/Curd/CustomDelete.cs @@ -16,11 +16,11 @@ namespace FreeSql.Custom { } - public override List ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}"); + public override List ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreErrorStrings.S_Not_Implemented_Feature}"); #if net40 #else - public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}"); + public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreErrorStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.Custom/Curd/CustomInsert.cs b/Providers/FreeSql.Provider.Custom/Curd/CustomInsert.cs index 63fce94d4..0957e264a 100644 --- a/Providers/FreeSql.Provider.Custom/Curd/CustomInsert.cs +++ b/Providers/FreeSql.Provider.Custom/Curd/CustomInsert.cs @@ -62,7 +62,7 @@ namespace FreeSql.Custom return ret; } - protected override List RawExecuteInserted() => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}"); + protected override List RawExecuteInserted() => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreErrorStrings.S_Not_Implemented_Feature}"); #if net40 #else @@ -107,7 +107,7 @@ namespace FreeSql.Custom } return ret; } - protected override Task> RawExecuteInsertedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}"); + protected override Task> RawExecuteInsertedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreErrorStrings.S_Not_Implemented_Feature}"); #endif } } \ No newline at end of file diff --git a/Providers/FreeSql.Provider.Custom/Curd/CustomSelect.cs b/Providers/FreeSql.Provider.Custom/Curd/CustomSelect.cs index d8dadbdb5..7379a1a9e 100644 --- a/Providers/FreeSql.Provider.Custom/Curd/CustomSelect.cs +++ b/Providers/FreeSql.Provider.Custom/Curd/CustomSelect.cs @@ -38,7 +38,7 @@ namespace FreeSql.Custom if (_limit > 0 && _utils.Adapter.SelectTopStyle == CustomAdapter.SelecTopStyle.Top) sb.Append("TOP ").Append(_skip + _limit).Append(" "); sb.Append(field); if (_skip > 0 && _utils.Adapter.SelectTopStyle == CustomAdapter.SelecTopStyle.Top) - throw new NotImplementedException(CoreStrings.S_NotImplementSkipOffset("Custom")); + throw new NotImplementedException(CoreErrorStrings.S_NotImplementSkipOffset("Custom")); sb.Append(" \r\nFROM "); var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray(); diff --git a/Providers/FreeSql.Provider.Custom/Curd/CustomUpdate.cs b/Providers/FreeSql.Provider.Custom/Curd/CustomUpdate.cs index ee0f30d3a..d7cc5bee2 100644 --- a/Providers/FreeSql.Provider.Custom/Curd/CustomUpdate.cs +++ b/Providers/FreeSql.Provider.Custom/Curd/CustomUpdate.cs @@ -23,7 +23,7 @@ namespace FreeSql.Custom public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255); protected override List ExecuteUpdated(IEnumerable columns) => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, columns); - protected override List RawExecuteUpdated(IEnumerable columns) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}"); + protected override List RawExecuteUpdated(IEnumerable columns) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreErrorStrings.S_Not_Implemented_Feature}"); protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) { @@ -65,7 +65,7 @@ namespace FreeSql.Custom public override Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken); protected override Task> ExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, columns, cancellationToken); - protected override Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}"); + protected override Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreErrorStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.Custom/CustomAdo/CustomAdo.cs b/Providers/FreeSql.Provider.Custom/CustomAdo/CustomAdo.cs index fa00d2fdd..2ffb15940 100644 --- a/Providers/FreeSql.Provider.Custom/CustomAdo/CustomAdo.cs +++ b/Providers/FreeSql.Provider.Custom/CustomAdo/CustomAdo.cs @@ -24,7 +24,7 @@ namespace FreeSql.Custom _CreateParameterCommand = CreateCommand(); return; } - throw new Exception(CoreStrings.S_CustomAdapter_OnlySuppport_UseConnectionFactory); + throw new Exception(CoreErrorStrings.S_CustomAdapter_OnlySuppport_UseConnectionFactory); } CustomAdapter Adapter => (_util == null ? FreeSqlCustomAdapterGlobalExtensions.DefaultAdapter : _util._orm.GetCustomAdapter()); @@ -68,7 +68,7 @@ namespace FreeSql.Custom cmd.Connection = null; return cmd; } - throw new Exception(CoreStrings.S_CustomAdapter_Cannot_Use_CreateCommand); + throw new Exception(CoreErrorStrings.S_CustomAdapter_Cannot_Use_CreateCommand); } public DbParameter CreateParameter() { diff --git a/Providers/FreeSql.Provider.Custom/CustomCodeFirst.cs b/Providers/FreeSql.Provider.Custom/CustomCodeFirst.cs index 1dc024c53..22d53754d 100644 --- a/Providers/FreeSql.Provider.Custom/CustomCodeFirst.cs +++ b/Providers/FreeSql.Provider.Custom/CustomCodeFirst.cs @@ -90,6 +90,6 @@ namespace FreeSql.Custom return null; } - protected override string GetComparisonDDLStatements(params TypeSchemaAndName[] objects) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}"); + protected override string GetComparisonDDLStatements(params TypeSchemaAndName[] objects) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreErrorStrings.S_Not_Implemented_Feature}"); } } \ No newline at end of file diff --git a/Providers/FreeSql.Provider.Custom/CustomProvider.cs b/Providers/FreeSql.Provider.Custom/CustomProvider.cs index ce223f39a..db54cecb7 100644 --- a/Providers/FreeSql.Provider.Custom/CustomProvider.cs +++ b/Providers/FreeSql.Provider.Custom/CustomProvider.cs @@ -18,9 +18,9 @@ namespace FreeSql.Custom public override IInsert CreateInsertProvider() => new CustomInsert(this, this.InternalCommonUtils, this.InternalCommonExpression); public override IUpdate CreateUpdateProvider(object dywhere) => new CustomUpdate(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere); public override IDelete CreateDeleteProvider(object dywhere) => new CustomDelete(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere); - public override IInsertOrUpdate CreateInsertOrUpdateProvider() => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}"); + public override IInsertOrUpdate CreateInsertOrUpdateProvider() => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreErrorStrings.S_Not_Implemented_Feature}"); - public override IDbFirst DbFirst => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}"); + public override IDbFirst DbFirst => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreErrorStrings.S_Not_Implemented_Feature}"); public CustomProvider(string masterConnectionString, string[] slaveConnectionString, Func connectionFactory = null) { diff --git a/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlInsertOrUpdate.cs b/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlInsertOrUpdate.cs index bc6f4dc75..a645a8684 100644 --- a/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlInsertOrUpdate.cs @@ -86,7 +86,7 @@ namespace FreeSql.Custom.MySql } else { - if (_tempPrimarys.Any() == false) throw new Exception(CoreStrings.Entity_Must_Primary_Key("fsql.InsertOrUpdate + IfExistsDoNothing + MySql ", _table.CsName)); + if (_tempPrimarys.Any() == false) throw new Exception(CoreErrorStrings.Entity_Must_Primary_Key("fsql.InsertOrUpdate + IfExistsDoNothing + MySql ", _table.CsName)); sql = insert.ToSqlValuesOrSelectUnionAll(); if (sql?.StartsWith("INSERT INTO ") == true) sql = $"INSERT IGNORE INTO {sql.Substring(12)}"; diff --git a/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlOnDuplicateKeyUpdate.cs b/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlOnDuplicateKeyUpdate.cs index 3af6c7e11..495e306dc 100644 --- a/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlOnDuplicateKeyUpdate.cs +++ b/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlOnDuplicateKeyUpdate.cs @@ -17,7 +17,7 @@ namespace FreeSql.Custom.MySql public CustomMySqlOnDuplicateKeyUpdate(IInsert insert) { _mysqlInsert = insert as CustomMySqlInsert; - if (_mysqlInsert == null) throw new Exception(CoreStrings.S_Features_Unique("OnDuplicateKeyUpdate", "Odbc/MySql")); + if (_mysqlInsert == null) throw new Exception(CoreErrorStrings.S_Features_Unique("OnDuplicateKeyUpdate", "Odbc/MySql")); if (_mysqlInsert._noneParameterFlag == "c") _mysqlInsert._noneParameterFlag = "cu"; } diff --git a/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlAdo/CustomMySqlAdo.cs b/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlAdo/CustomMySqlAdo.cs index 21f794f31..9dc1516d9 100644 --- a/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlAdo/CustomMySqlAdo.cs +++ b/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlAdo/CustomMySqlAdo.cs @@ -24,7 +24,7 @@ namespace FreeSql.Custom.MySql MasterPool = pool; return; } - throw new Exception(CoreStrings.S_CustomAdapter_OnlySuppport_UseConnectionFactory); + throw new Exception(CoreErrorStrings.S_CustomAdapter_OnlySuppport_UseConnectionFactory); } public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) { diff --git a/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlCodeFirst.cs b/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlCodeFirst.cs index 1ecf43ef4..155ceccc6 100644 --- a/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlCodeFirst.cs +++ b/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlCodeFirst.cs @@ -89,8 +89,8 @@ namespace FreeSql.Custom.MySql { if (sb.Length > 0) sb.Append("\r\n"); var tb = obj.tableSchema; - if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); - if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); + if (tb == null) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { database, tbname[0] }; diff --git a/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlExpression.cs b/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlExpression.cs index 702301d96..7076d9710 100644 --- a/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlExpression.cs +++ b/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlExpression.cs @@ -250,7 +250,7 @@ namespace FreeSql.Custom.MySql return _common.StringConcat(concatNewArrExp.Expressions.Select(a => getExp(a)).ToArray(), null); return _common.StringConcat(exp.Arguments.Select(a => getExp(a)).ToArray(), null); case "Format": - if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); + if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreErrorStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); if (exp.Arguments.Count == 1) return ExpressionLambdaToSql(exp.Arguments[0], tsc); var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ? (exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0); diff --git a/Providers/FreeSql.Provider.Custom/Oracle/Curd/CustomOracleDelete.cs b/Providers/FreeSql.Provider.Custom/Oracle/Curd/CustomOracleDelete.cs index cb0774591..bcc0191c7 100644 --- a/Providers/FreeSql.Provider.Custom/Oracle/Curd/CustomOracleDelete.cs +++ b/Providers/FreeSql.Provider.Custom/Oracle/Curd/CustomOracleDelete.cs @@ -16,11 +16,11 @@ namespace FreeSql.Custom.Oracle { } - public override List ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Odbc.Oracle {CoreStrings.S_Not_Implemented_Feature}"); + public override List ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Odbc.Oracle {CoreErrorStrings.S_Not_Implemented_Feature}"); #if net40 #else - public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Oracle {CoreStrings.S_Not_Implemented_Feature}"); + public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Oracle {CoreErrorStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.Custom/Oracle/Curd/CustomOracleInsertOrUpdate.cs b/Providers/FreeSql.Provider.Custom/Oracle/Curd/CustomOracleInsertOrUpdate.cs index 696fd8e53..98005f3b5 100644 --- a/Providers/FreeSql.Provider.Custom/Oracle/Curd/CustomOracleInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.Custom/Oracle/Curd/CustomOracleInsertOrUpdate.cs @@ -32,7 +32,7 @@ namespace FreeSql.Custom.Oracle string getMergeSql(List data) { - if (_tempPrimarys.Any() == false) throw new Exception(CoreStrings.InsertOrUpdate_Must_Primary_Key(_table.CsName)); + if (_tempPrimarys.Any() == false) throw new Exception(CoreErrorStrings.InsertOrUpdate_Must_Primary_Key(_table.CsName)); var tempPrimaryIsIdentity = _tempPrimarys.Any(b => b.Attribute.IsIdentity); var sb = new StringBuilder().Append("MERGE INTO ").Append(_commonUtils.QuoteSqlName(TableRuleInvoke())).Append(" t1 \r\nUSING ("); diff --git a/Providers/FreeSql.Provider.Custom/Oracle/Curd/CustomOracleUpdate.cs b/Providers/FreeSql.Provider.Custom/Oracle/Curd/CustomOracleUpdate.cs index 73cbdd2c3..bfaf317fc 100644 --- a/Providers/FreeSql.Provider.Custom/Oracle/Curd/CustomOracleUpdate.cs +++ b/Providers/FreeSql.Provider.Custom/Oracle/Curd/CustomOracleUpdate.cs @@ -22,7 +22,7 @@ namespace FreeSql.Custom.Oracle public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); protected override List ExecuteUpdated(IEnumerable columns) => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, columns); - protected override List RawExecuteUpdated(IEnumerable columns) => throw new NotImplementedException($"FreeSql.Custom.Oracle {CoreStrings.S_Not_Implemented_Feature}"); + protected override List RawExecuteUpdated(IEnumerable columns) => throw new NotImplementedException($"FreeSql.Custom.Oracle {CoreErrorStrings.S_Not_Implemented_Feature}"); protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) { @@ -68,7 +68,7 @@ namespace FreeSql.Custom.Oracle public override Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); protected override Task> ExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, columns, cancellationToken); - protected override Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Custom.Oracle {CoreStrings.S_Not_Implemented_Feature}"); + protected override Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Custom.Oracle {CoreErrorStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleAdo/CustomOracleAdo.cs b/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleAdo/CustomOracleAdo.cs index b58c3f41c..5bfd83d7f 100644 --- a/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleAdo/CustomOracleAdo.cs +++ b/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleAdo/CustomOracleAdo.cs @@ -27,7 +27,7 @@ namespace FreeSql.Custom.Oracle UserId = CustomOracleAdo.GetUserId(conn.Value.ConnectionString); return; } - throw new Exception(CoreStrings.S_CustomAdapter_OnlySuppport_UseConnectionFactory); + throw new Exception(CoreErrorStrings.S_CustomAdapter_OnlySuppport_UseConnectionFactory); } internal string UserId { get; set; } diff --git a/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleCodeFirst.cs b/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleCodeFirst.cs index 19a7f8e0b..645062265 100644 --- a/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleCodeFirst.cs +++ b/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleCodeFirst.cs @@ -91,8 +91,8 @@ namespace FreeSql.Custom.Oracle { if (sb.Length > 0) sb.Append("\r\n"); var tb = obj.tableSchema; - if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); - if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); + if (tb == null) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { userId, tbname[0] }; @@ -113,7 +113,7 @@ namespace FreeSql.Custom.Oracle //codefirst 不支持表名中带 . if (string.Compare(tbname[0], userId) != 0 && _orm.Ado.ExecuteScalar(CommandType.Text, _commonUtils.FormatSql(" select 1 from sys.dba_users where username={0}", tbname[0])) == null) //创建数据库 - throw new NotImplementedException(CoreStrings.S_Oracle_NotSupport_TablespaceSchemas(tbname[0])); + throw new NotImplementedException(CoreErrorStrings.S_Oracle_NotSupport_TablespaceSchemas(tbname[0])); var sbalter = new StringBuilder(); var istmpatler = false; //创建临时表,导入数据,删除旧表,修改 diff --git a/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleDbFirst.cs b/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleDbFirst.cs index e3a9efc66..f7fc68553 100644 --- a/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleDbFirst.cs +++ b/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleDbFirst.cs @@ -112,7 +112,7 @@ namespace FreeSql.Custom.Oracle if (dbfull != null) _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]); return DbType.String; } - throw new NotImplementedException(CoreStrings.S_TypeMappingNotImplemented(column.DbTypeTextFull)); + throw new NotImplementedException(CoreErrorStrings.S_TypeMappingNotImplemented(column.DbTypeTextFull)); } static ConcurrentDictionary _dicDbToCs = new ConcurrentDictionary(StringComparer.CurrentCultureIgnoreCase); diff --git a/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleExpression.cs b/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleExpression.cs index 90821040d..603f8944e 100644 --- a/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleExpression.cs +++ b/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleExpression.cs @@ -254,7 +254,7 @@ namespace FreeSql.Custom.Oracle return _common.StringConcat(concatNewArrExp.Expressions.Select(a => getExp(a)).ToArray(), null); return _common.StringConcat(exp.Arguments.Select(a => getExp(a)).ToArray(), null); case "Format": - if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); + if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreErrorStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ? (exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0); //3个 {} 时,Arguments 解析出来是分开的 diff --git a/Providers/FreeSql.Provider.Custom/PostgreSQL/Curd/CustomPostgreSQLOnConflictDoUpdate.cs b/Providers/FreeSql.Provider.Custom/PostgreSQL/Curd/CustomPostgreSQLOnConflictDoUpdate.cs index c81d5b512..e064982e1 100644 --- a/Providers/FreeSql.Provider.Custom/PostgreSQL/Curd/CustomPostgreSQLOnConflictDoUpdate.cs +++ b/Providers/FreeSql.Provider.Custom/PostgreSQL/Curd/CustomPostgreSQLOnConflictDoUpdate.cs @@ -24,7 +24,7 @@ namespace FreeSql.Custom.PostgreSQL public CustomPostgreSQLOnConflictDoUpdate(IInsert insert, Expression> columns = null) { _pgsqlInsert = insert as CustomPostgreSQLInsert; - if (_pgsqlInsert == null) throw new Exception(CoreStrings.S_Features_Unique("OnConflictDoUpdate", "Custom/PostgreSQL")); + if (_pgsqlInsert == null) throw new Exception(CoreErrorStrings.S_Features_Unique("OnConflictDoUpdate", "Custom/PostgreSQL")); if (_pgsqlInsert._noneParameterFlag == "c") _pgsqlInsert._noneParameterFlag = "cu"; if (columns != null) @@ -38,7 +38,7 @@ namespace FreeSql.Custom.PostgreSQL } if (_tempPrimarys == null || _tempPrimarys.Any() == false) _tempPrimarys = _pgsqlInsert.InternalTable.Primarys; - if (_tempPrimarys.Any() == false) throw new Exception(CoreStrings.S_OnConflictDoUpdate_MustIsPrimary); + if (_tempPrimarys.Any() == false) throw new Exception(CoreErrorStrings.S_OnConflictDoUpdate_MustIsPrimary); } protected void ClearData() diff --git a/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLAdo/CustomPostgreSQLAdo.cs b/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLAdo/CustomPostgreSQLAdo.cs index 47c2c3c93..9e2506fc5 100644 --- a/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLAdo/CustomPostgreSQLAdo.cs +++ b/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLAdo/CustomPostgreSQLAdo.cs @@ -25,7 +25,7 @@ namespace FreeSql.Custom.PostgreSQL MasterPool = pool; return; } - throw new Exception(CoreStrings.S_CustomAdapter_OnlySuppport_UseConnectionFactory); + throw new Exception(CoreErrorStrings.S_CustomAdapter_OnlySuppport_UseConnectionFactory); } public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) diff --git a/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLCodeFirst.cs b/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLCodeFirst.cs index bff35665e..eca1b76ba 100644 --- a/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLCodeFirst.cs +++ b/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLCodeFirst.cs @@ -92,8 +92,8 @@ namespace FreeSql.Custom.PostgreSQL { if (sb.Length > 0) sb.Append("\r\n"); var tb = obj.tableSchema; - if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); - if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); + if (tb == null) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { "public", tbname[0] }; diff --git a/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLExpression.cs b/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLExpression.cs index eac9daef5..5453fbf04 100644 --- a/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLExpression.cs +++ b/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLExpression.cs @@ -338,7 +338,7 @@ namespace FreeSql.Custom.PostgreSQL return _common.StringConcat(concatNewArrExp.Expressions.Select(a => getExp(a)).ToArray(), null); return _common.StringConcat(exp.Arguments.Select(a => getExp(a)).ToArray(), null); case "Format": - if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); + if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreErrorStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ? (exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0); //3个 {} 时,Arguments 解析出来是分开的 diff --git a/Providers/FreeSql.Provider.Custom/SqlServer/Curd/CustomSqlServerDelete.cs b/Providers/FreeSql.Provider.Custom/SqlServer/Curd/CustomSqlServerDelete.cs index 939a20ae8..a904ba0f2 100644 --- a/Providers/FreeSql.Provider.Custom/SqlServer/Curd/CustomSqlServerDelete.cs +++ b/Providers/FreeSql.Provider.Custom/SqlServer/Curd/CustomSqlServerDelete.cs @@ -40,7 +40,7 @@ namespace FreeSql.Custom.SqlServer } var sql = sb.ToString(); var validx = sql.IndexOf(" WHERE "); - if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("WHERE")); + if (validx == -1) throw new ArgumentException(CoreErrorStrings.S_NotFound_Name("WHERE")); sql = sb.Clear().Append(sql.Substring(0, validx)) .Append(sbret) .Append(sql.Substring(validx)).ToString(); @@ -97,7 +97,7 @@ namespace FreeSql.Custom.SqlServer } var sql = sb.ToString(); var validx = sql.IndexOf(" WHERE "); - if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("WHERE")); + if (validx == -1) throw new ArgumentException(CoreErrorStrings.S_NotFound_Name("WHERE")); sql = sb.Clear().Append(sql.Substring(0, validx)) .Append(sbret) .Append(sql.Substring(validx)).ToString(); diff --git a/Providers/FreeSql.Provider.Custom/SqlServer/Curd/CustomSqlServerInsert.cs b/Providers/FreeSql.Provider.Custom/SqlServer/Curd/CustomSqlServerInsert.cs index 65d846896..0ad68699e 100644 --- a/Providers/FreeSql.Provider.Custom/SqlServer/Curd/CustomSqlServerInsert.cs +++ b/Providers/FreeSql.Provider.Custom/SqlServer/Curd/CustomSqlServerInsert.cs @@ -69,14 +69,14 @@ namespace FreeSql.Custom.SqlServer if ((_commonUtils as CustomSqlServerUtils).ServerVersion > 10) { var validx = sql.IndexOf(") VALUES"); - if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("VALUES")); + if (validx == -1) throw new ArgumentException(CoreErrorStrings.S_NotFound_Name("VALUES")); sb.Insert(0, sql.Substring(0, validx + 1)); sb.Append(sql.Substring(validx + 1)); } else { var validx = sql.IndexOf(") SELECT "); - if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("SELECT")); + if (validx == -1) throw new ArgumentException(CoreErrorStrings.S_NotFound_Name("SELECT")); sb.Insert(0, sql.Substring(0, validx + 1)); sb.Append(sql.Substring(validx + 1)); } @@ -153,14 +153,14 @@ namespace FreeSql.Custom.SqlServer if ((_commonUtils as CustomSqlServerUtils).ServerVersion > 10) { var validx = sql.IndexOf(") VALUES"); - if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("VALUES")); + if (validx == -1) throw new ArgumentException(CoreErrorStrings.S_NotFound_Name("VALUES")); sb.Insert(0, sql.Substring(0, validx + 1)); sb.Append(sql.Substring(validx + 1)); } else { var validx = sql.IndexOf(") SELECT "); - if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("SELECT")); + if (validx == -1) throw new ArgumentException(CoreErrorStrings.S_NotFound_Name("SELECT")); sb.Insert(0, sql.Substring(0, validx + 1)); sb.Append(sql.Substring(validx + 1)); } diff --git a/Providers/FreeSql.Provider.Custom/SqlServer/Curd/CustomSqlServerInsertOrUpdate.cs b/Providers/FreeSql.Provider.Custom/SqlServer/Curd/CustomSqlServerInsertOrUpdate.cs index d862228a9..165a78438 100644 --- a/Providers/FreeSql.Provider.Custom/SqlServer/Curd/CustomSqlServerInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.Custom/SqlServer/Curd/CustomSqlServerInsertOrUpdate.cs @@ -32,7 +32,7 @@ namespace FreeSql.Custom.SqlServer string getMergeSql(List data) { - if (_tempPrimarys.Any() == false) throw new Exception(CoreStrings.InsertOrUpdate_Must_Primary_Key(_table.CsName)); + if (_tempPrimarys.Any() == false) throw new Exception(CoreErrorStrings.InsertOrUpdate_Must_Primary_Key(_table.CsName)); var tempPrimaryIsIdentity = _tempPrimarys.Any(b => b.Attribute.IsIdentity); var sb = new StringBuilder(); diff --git a/Providers/FreeSql.Provider.Custom/SqlServer/Curd/CustomSqlServerUpdate.cs b/Providers/FreeSql.Provider.Custom/SqlServer/Curd/CustomSqlServerUpdate.cs index 3811c04d8..48b50b4de 100644 --- a/Providers/FreeSql.Provider.Custom/SqlServer/Curd/CustomSqlServerUpdate.cs +++ b/Providers/FreeSql.Provider.Custom/SqlServer/Curd/CustomSqlServerUpdate.cs @@ -46,7 +46,7 @@ namespace FreeSql.Custom.SqlServer } var sql = sb.ToString(); var validx = sql.IndexOf(" \r\nWHERE "); - if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("WHERE")); + if (validx == -1) throw new ArgumentException(CoreErrorStrings.S_NotFound_Name("WHERE")); sql = sb.Clear().Append(sql.Substring(0, validx)) .Append(sbret) .Append(sql.Substring(validx)).ToString(); @@ -140,7 +140,7 @@ namespace FreeSql.Custom.SqlServer } var sql = sb.ToString(); var validx = sql.IndexOf(" \r\nWHERE "); - if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("WHERE")); + if (validx == -1) throw new ArgumentException(CoreErrorStrings.S_NotFound_Name("WHERE")); sql = sb.Clear().Append(sql.Substring(0, validx)) .Append(sbret) .Append(sql.Substring(validx)).ToString(); diff --git a/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerAdo/CustomSqlServerAdo.cs b/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerAdo/CustomSqlServerAdo.cs index 72129f251..4b4014cef 100644 --- a/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerAdo/CustomSqlServerAdo.cs +++ b/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerAdo/CustomSqlServerAdo.cs @@ -25,7 +25,7 @@ namespace FreeSql.Custom.SqlServer MasterPool = pool; return; } - throw new Exception(CoreStrings.S_CustomAdapter_OnlySuppport_UseConnectionFactory); + throw new Exception(CoreErrorStrings.S_CustomAdapter_OnlySuppport_UseConnectionFactory); } string[] ncharDbTypes = new[] { "NVARCHAR", "NCHAR", "NTEXT" }; diff --git a/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerCodeFirst.cs b/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerCodeFirst.cs index 33a6525e6..47d07847b 100644 --- a/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerCodeFirst.cs +++ b/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerCodeFirst.cs @@ -149,8 +149,8 @@ ELSE { if (sb.Length > 0) sb.Append("\r\n"); var tb = obj.tableSchema; - if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); - if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); + if (tb == null) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { database, "dbo", tbname[0] }; if (tbname?.Length == 2) tbname = new[] { database, tbname[0], tbname[1] }; diff --git a/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerExpression.cs b/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerExpression.cs index c9a37d419..97e829e86 100644 --- a/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerExpression.cs +++ b/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerExpression.cs @@ -260,7 +260,7 @@ namespace FreeSql.Custom.SqlServer return _common.StringConcat(concatNewArrExp.Expressions.Select(a => getExp(a)).ToArray(), concatNewArrExp.Expressions.Select(a => a.Type).ToArray()); return _common.StringConcat(exp.Arguments.Select(a => getExp(a)).ToArray(), exp.Arguments.Select(a => a.Type).ToArray()); case "Format": - if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); + if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreErrorStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); var expArgs0 = ExpressionLambdaToSql(exp.Arguments[0], tsc); if (exp.Arguments.Count == 1) return expArgs0; var nchar = expArgs0.StartsWith("N'") ? "N" : ""; diff --git a/Providers/FreeSql.Provider.Dameng/Curd/DamengDelete.cs b/Providers/FreeSql.Provider.Dameng/Curd/DamengDelete.cs index f9b81fcaf..562e43758 100644 --- a/Providers/FreeSql.Provider.Dameng/Curd/DamengDelete.cs +++ b/Providers/FreeSql.Provider.Dameng/Curd/DamengDelete.cs @@ -16,11 +16,11 @@ namespace FreeSql.Dameng.Curd { } - public override List ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.Dameng {CoreStrings.S_Not_Implemented_Feature}"); + public override List ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.Dameng {CoreErrorStrings.S_Not_Implemented_Feature}"); #if net40 #else - public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Dameng {CoreStrings.S_Not_Implemented_Feature}"); + public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Dameng {CoreErrorStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.Dameng/Curd/DamengInsertOrUpdate.cs b/Providers/FreeSql.Provider.Dameng/Curd/DamengInsertOrUpdate.cs index 1436b6fca..1c88bbc47 100644 --- a/Providers/FreeSql.Provider.Dameng/Curd/DamengInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.Dameng/Curd/DamengInsertOrUpdate.cs @@ -32,7 +32,7 @@ namespace FreeSql.Dameng.Curd string getMergeSql(List data) { - if (_tempPrimarys.Any() == false) throw new Exception(CoreStrings.InsertOrUpdate_Must_Primary_Key(_table.CsName)); + if (_tempPrimarys.Any() == false) throw new Exception(CoreErrorStrings.InsertOrUpdate_Must_Primary_Key(_table.CsName)); var tempPrimaryIsIdentity = _tempPrimarys.Any(b => b.Attribute.IsIdentity); var sb = new StringBuilder().Append("MERGE INTO ").Append(_commonUtils.QuoteSqlName(TableRuleInvoke())).Append(" t1 \r\nUSING ("); diff --git a/Providers/FreeSql.Provider.Dameng/Curd/DamengUpdate.cs b/Providers/FreeSql.Provider.Dameng/Curd/DamengUpdate.cs index 17c0afd0d..a507dfaa8 100644 --- a/Providers/FreeSql.Provider.Dameng/Curd/DamengUpdate.cs +++ b/Providers/FreeSql.Provider.Dameng/Curd/DamengUpdate.cs @@ -21,7 +21,7 @@ namespace FreeSql.Dameng.Curd public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); protected override List ExecuteUpdated(IEnumerable columns) => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, columns); - protected override List RawExecuteUpdated(IEnumerable columns) => throw new NotImplementedException($"FreeSql.Provider.Dameng {CoreStrings.S_Not_Implemented_Feature}"); + protected override List RawExecuteUpdated(IEnumerable columns) => throw new NotImplementedException($"FreeSql.Provider.Dameng {CoreErrorStrings.S_Not_Implemented_Feature}"); protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) { @@ -65,7 +65,7 @@ namespace FreeSql.Dameng.Curd public override Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); protected override Task> ExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, columns, cancellationToken); - protected override Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Dameng {CoreStrings.S_Not_Implemented_Feature}"); + protected override Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Dameng {CoreErrorStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengAdo.cs b/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengAdo.cs index 9497451fe..182c9246f 100644 --- a/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengAdo.cs +++ b/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengAdo.cs @@ -29,14 +29,14 @@ namespace FreeSql.Dameng if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length); if (!string.IsNullOrEmpty(masterConnectionString)) MasterPool = isAdoPool ? - new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new DmConnection(masterConnectionString)) as IObjectPool : - new DamengConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); + new DbConnectionStringPool(base.DataType, CoreErrorStrings.S_MasterDatabase, () => new DmConnection(masterConnectionString)) as IObjectPool : + new DamengConnectionPool(CoreErrorStrings.S_MasterDatabase, masterConnectionString, null, null); slaveConnectionStrings?.ToList().ForEach(slaveConnectionString => { var slavePool = isAdoPool ? - new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new DmConnection(slaveConnectionString)) as IObjectPool : - new DamengConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); + new DbConnectionStringPool(base.DataType, $"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new DmConnection(slaveConnectionString)) as IObjectPool : + new DamengConnectionPool($"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); SlavePools.Add(slavePool); }); } diff --git a/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengConnectionPool.cs b/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengConnectionPool.cs index 11a515317..07c8b7389 100644 --- a/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengConnectionPool.cs +++ b/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengConnectionPool.cs @@ -54,7 +54,7 @@ namespace FreeSql.Dameng { internal DamengConnectionPool _pool; - public string Name { get; set; } = $"Dameng DmConnection {CoreStrings.S_ObjectPool}"; + public string Name { get; set; } = $"Dameng DmConnection {CoreErrorStrings.S_ObjectPool}"; public int PoolSize { get; set; } = 100; public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); @@ -130,8 +130,8 @@ namespace FreeSql.Dameng { if (obj.Value == null) { - _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + _pool.SetUnavailable(new Exception(CoreErrorStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false) @@ -160,8 +160,8 @@ namespace FreeSql.Dameng { if (obj.Value == null) { - _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + _pool.SetUnavailable(new Exception(CoreErrorStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) diff --git a/Providers/FreeSql.Provider.Dameng/DamengCodeFirst.cs b/Providers/FreeSql.Provider.Dameng/DamengCodeFirst.cs index 73a29ee57..664ddb376 100644 --- a/Providers/FreeSql.Provider.Dameng/DamengCodeFirst.cs +++ b/Providers/FreeSql.Provider.Dameng/DamengCodeFirst.cs @@ -92,8 +92,8 @@ namespace FreeSql.Dameng { if (sb.Length > 0) sb.Append("\r\n"); var tb = obj.tableSchema; - if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); - if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); + if (tb == null) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { userId, tbname[0] }; @@ -114,7 +114,7 @@ namespace FreeSql.Dameng //codefirst 不支持表名中带 . if (string.Compare(tbname[0], userId) != 0 && _orm.Ado.ExecuteScalar(CommandType.Text, _commonUtils.FormatSql(" select 1 from sys.dba_users where username={0}", tbname[0])) == null) //创建数据库 - throw new NotImplementedException(CoreStrings.S_Dameng_NotSupport_TablespaceSchemas(tbname[0])); + throw new NotImplementedException(CoreErrorStrings.S_Dameng_NotSupport_TablespaceSchemas(tbname[0])); var sbalter = new StringBuilder(); var istmpatler = false; //创建临时表,导入数据,删除旧表,修改 diff --git a/Providers/FreeSql.Provider.Dameng/DamengDbFirst.cs b/Providers/FreeSql.Provider.Dameng/DamengDbFirst.cs index d48d4219e..74e777e9c 100644 --- a/Providers/FreeSql.Provider.Dameng/DamengDbFirst.cs +++ b/Providers/FreeSql.Provider.Dameng/DamengDbFirst.cs @@ -165,7 +165,7 @@ namespace FreeSql.Dameng if (dbfull != null) _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]); return DmDbType.VarChar; } - throw new NotImplementedException(CoreStrings.S_TypeMappingNotImplemented(column.DbTypeTextFull)); + throw new NotImplementedException(CoreErrorStrings.S_TypeMappingNotImplemented(column.DbTypeTextFull)); } static ConcurrentDictionary _dicDbToCs = new ConcurrentDictionary(StringComparer.CurrentCultureIgnoreCase); diff --git a/Providers/FreeSql.Provider.Dameng/DamengExpression.cs b/Providers/FreeSql.Provider.Dameng/DamengExpression.cs index 8e2dbf577..f4b6c444b 100644 --- a/Providers/FreeSql.Provider.Dameng/DamengExpression.cs +++ b/Providers/FreeSql.Provider.Dameng/DamengExpression.cs @@ -254,7 +254,7 @@ namespace FreeSql.Dameng return _common.StringConcat(concatNewArrExp.Expressions.Select(a => getExp(a)).ToArray(), null); return _common.StringConcat(exp.Arguments.Select(a => getExp(a)).ToArray(), null); case "Format": - if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); + if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreErrorStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ? (exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0); //3个 {} 时,Arguments 解析出来是分开的 diff --git a/Providers/FreeSql.Provider.Dameng/DamengExtensions.cs b/Providers/FreeSql.Provider.Dameng/DamengExtensions.cs index ebaa869db..62153bc82 100644 --- a/Providers/FreeSql.Provider.Dameng/DamengExtensions.cs +++ b/Providers/FreeSql.Provider.Dameng/DamengExtensions.cs @@ -133,7 +133,7 @@ public static partial class FreeSqlDamengGlobalExtensions public static void ExecuteDmBulkCopy(this IInsert that, DmBulkCopyOptions copyOptions = DmBulkCopyOptions.Default, int? batchSize = null, int? bulkCopyTimeout = null) where T : class { var insert = that as FreeSql.Dameng.Curd.DamengInsert; - if (insert == null) throw new Exception(CoreStrings.S_Features_Unique("ExecuteDmBulkCopy", "Dameng")); + if (insert == null) throw new Exception(CoreErrorStrings.S_Features_Unique("ExecuteDmBulkCopy", "Dameng")); var dt = that.ToDataTable(); if (dt.Rows.Count == 0) return; @@ -199,7 +199,7 @@ public static partial class FreeSqlDamengGlobalExtensions } else { - throw new NotImplementedException($"ExecuteDmBulkCopy {CoreStrings.S_Not_Implemented_FeedBack}"); + throw new NotImplementedException($"ExecuteDmBulkCopy {CoreErrorStrings.S_Not_Implemented_FeedBack}"); } } finally diff --git a/Providers/FreeSql.Provider.Duckdb/Curd/DuckdbDelete.cs b/Providers/FreeSql.Provider.Duckdb/Curd/DuckdbDelete.cs index 851d58a3b..03a46b3bf 100644 --- a/Providers/FreeSql.Provider.Duckdb/Curd/DuckdbDelete.cs +++ b/Providers/FreeSql.Provider.Duckdb/Curd/DuckdbDelete.cs @@ -16,11 +16,11 @@ namespace FreeSql.Duckdb.Curd { } - public override List ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.Duckdb {CoreStrings.S_Not_Implemented_Feature}"); + public override List ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.Duckdb {CoreErrorStrings.S_Not_Implemented_Feature}"); #if net40 #else - public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Duckdb {CoreStrings.S_Not_Implemented_Feature}"); + public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Duckdb {CoreErrorStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.Duckdb/Curd/DuckdbUpdate.cs b/Providers/FreeSql.Provider.Duckdb/Curd/DuckdbUpdate.cs index 4451f8e4e..5426fe631 100644 --- a/Providers/FreeSql.Provider.Duckdb/Curd/DuckdbUpdate.cs +++ b/Providers/FreeSql.Provider.Duckdb/Curd/DuckdbUpdate.cs @@ -30,7 +30,7 @@ namespace FreeSql.Duckdb.Curd public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); protected override List ExecuteUpdated(IEnumerable columns) => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns); - protected override List RawExecuteUpdated(IEnumerable columns) => throw new NotImplementedException($"FreeSql.Provider.Duckdb {CoreStrings.S_Not_Implemented_Feature}"); + protected override List RawExecuteUpdated(IEnumerable columns) => throw new NotImplementedException($"FreeSql.Provider.Duckdb {CoreErrorStrings.S_Not_Implemented_Feature}"); protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) { @@ -89,7 +89,7 @@ namespace FreeSql.Duckdb.Curd #else public override Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken); protected override Task> ExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns, cancellationToken); - protected override Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Duckdb {CoreStrings.S_Not_Implemented_Feature}"); + protected override Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Duckdb {CoreErrorStrings.S_Not_Implemented_Feature}"); #endif } diff --git a/Providers/FreeSql.Provider.Duckdb/Curd/OnConflictDoUpdate.cs b/Providers/FreeSql.Provider.Duckdb/Curd/OnConflictDoUpdate.cs index 4df112d90..451d9ea36 100644 --- a/Providers/FreeSql.Provider.Duckdb/Curd/OnConflictDoUpdate.cs +++ b/Providers/FreeSql.Provider.Duckdb/Curd/OnConflictDoUpdate.cs @@ -24,7 +24,7 @@ namespace FreeSql.Duckdb.Curd public OnConflictDoUpdate(IInsert insert, Expression> columns = null) { _duckdbInsert = insert as DuckdbInsert; - if (_duckdbInsert == null) throw new Exception(CoreStrings.S_Features_Unique("OnConflictDoUpdate", "Duckdb")); + if (_duckdbInsert == null) throw new Exception(CoreErrorStrings.S_Features_Unique("OnConflictDoUpdate", "Duckdb")); if (_duckdbInsert._noneParameterFlag == "c") _duckdbInsert._noneParameterFlag = "cu"; if (columns != null) @@ -38,7 +38,7 @@ namespace FreeSql.Duckdb.Curd } if (_tempPrimarys == null || _tempPrimarys.Any() == false) _tempPrimarys = _duckdbInsert.InternalTable.Primarys; - if (_tempPrimarys.Any() == false) throw new Exception(CoreStrings.S_OnConflictDoUpdate_MustIsPrimary); + if (_tempPrimarys.Any() == false) throw new Exception(CoreErrorStrings.S_OnConflictDoUpdate_MustIsPrimary); } protected void ClearData() diff --git a/Providers/FreeSql.Provider.Duckdb/DuckdbAdo/DuckdbAdo.cs b/Providers/FreeSql.Provider.Duckdb/DuckdbAdo/DuckdbAdo.cs index 5bb64a5ae..ae55f5817 100644 --- a/Providers/FreeSql.Provider.Duckdb/DuckdbAdo/DuckdbAdo.cs +++ b/Providers/FreeSql.Provider.Duckdb/DuckdbAdo/DuckdbAdo.cs @@ -32,14 +32,14 @@ namespace FreeSql.Duckdb if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length); if (!string.IsNullOrEmpty(masterConnectionString)) MasterPool = isAdoPool ? - new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => DuckdbConnectionPool.CreateConnection(masterConnectionString)) as IObjectPool : - new DuckdbConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); + new DbConnectionStringPool(base.DataType, CoreErrorStrings.S_MasterDatabase, () => DuckdbConnectionPool.CreateConnection(masterConnectionString)) as IObjectPool : + new DuckdbConnectionPool(CoreErrorStrings.S_MasterDatabase, masterConnectionString, null, null); slaveConnectionStrings?.ToList().ForEach(slaveConnectionString => { var slavePool = isAdoPool ? - new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => DuckdbConnectionPool.CreateConnection(slaveConnectionString)) as IObjectPool : - new DuckdbConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); + new DbConnectionStringPool(base.DataType, $"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => DuckdbConnectionPool.CreateConnection(slaveConnectionString)) as IObjectPool : + new DuckdbConnectionPool($"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); SlavePools.Add(slavePool); }); } diff --git a/Providers/FreeSql.Provider.Duckdb/DuckdbAdo/DuckdbConnectionPool.cs b/Providers/FreeSql.Provider.Duckdb/DuckdbAdo/DuckdbConnectionPool.cs index fd76a13dc..040474d77 100644 --- a/Providers/FreeSql.Provider.Duckdb/DuckdbAdo/DuckdbConnectionPool.cs +++ b/Providers/FreeSql.Provider.Duckdb/DuckdbAdo/DuckdbConnectionPool.cs @@ -48,7 +48,7 @@ namespace FreeSql.Duckdb { internal DuckdbConnectionPool _pool; - public string Name { get; set; } = $"Duckdb DuckDBConnection {CoreStrings.S_ObjectPool}"; + public string Name { get; set; } = $"Duckdb DuckDBConnection {CoreErrorStrings.S_ObjectPool}"; public int PoolSize { get; set; } = 1; public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.Zero; @@ -117,7 +117,7 @@ namespace FreeSql.Duckdb if (_pool.IsAvailable) { if (obj.Value == null) - throw new Exception(CoreStrings.S_ConnectionStringError_CheckProjectConnection(this.Name)); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_CheckProjectConnection(this.Name)); if (obj.Value.State != ConnectionState.Open) obj.Value.OpenAndAttach(Attaches); @@ -132,7 +132,7 @@ namespace FreeSql.Duckdb if (_pool.IsAvailable) { if (obj.Value == null) - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); if (obj.Value.State != ConnectionState.Open) await obj.Value.OpenAndAttachAsync(Attaches); diff --git a/Providers/FreeSql.Provider.Duckdb/DuckdbCodeFirst.cs b/Providers/FreeSql.Provider.Duckdb/DuckdbCodeFirst.cs index 597b26fa3..54176e6a9 100644 --- a/Providers/FreeSql.Provider.Duckdb/DuckdbCodeFirst.cs +++ b/Providers/FreeSql.Provider.Duckdb/DuckdbCodeFirst.cs @@ -120,8 +120,8 @@ namespace FreeSql.Duckdb { if (sb.Length > 0) sb.Append("\r\n"); var tb = obj.tableSchema; - if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); - if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); + if (tb == null) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { "main", tbname[0] }; diff --git a/Providers/FreeSql.Provider.Duckdb/DuckdbExpression.cs b/Providers/FreeSql.Provider.Duckdb/DuckdbExpression.cs index 29b978781..07a8bc34c 100644 --- a/Providers/FreeSql.Provider.Duckdb/DuckdbExpression.cs +++ b/Providers/FreeSql.Provider.Duckdb/DuckdbExpression.cs @@ -314,7 +314,7 @@ namespace FreeSql.Duckdb return _common.StringConcat(concatNewArrExp.Expressions.Select(a => getExp(a)).ToArray(), null); return _common.StringConcat(exp.Arguments.Select(a => getExp(a)).ToArray(), null); case "Format": - if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreStrings.Not_Implemented_Expression_ParameterUseConstant(exp, exp.Arguments[0])); + if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreErrorStrings.Not_Implemented_Expression_ParameterUseConstant(exp, exp.Arguments[0])); var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ? (exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0); //3个 {} 时,Arguments 解析出来是分开的 diff --git a/Providers/FreeSql.Provider.Firebird/Curd/FirebirdInsertOrUpdate.cs b/Providers/FreeSql.Provider.Firebird/Curd/FirebirdInsertOrUpdate.cs index c2ffe8145..b2169067c 100644 --- a/Providers/FreeSql.Provider.Firebird/Curd/FirebirdInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.Firebird/Curd/FirebirdInsertOrUpdate.cs @@ -32,7 +32,7 @@ namespace FreeSql.Firebird.Curd string getMergeSql(List data) { - if (_tempPrimarys.Any() == false) throw new Exception(CoreStrings.InsertOrUpdate_Must_Primary_Key(_table.CsName)); + if (_tempPrimarys.Any() == false) throw new Exception(CoreErrorStrings.InsertOrUpdate_Must_Primary_Key(_table.CsName)); var tempPrimaryIsIdentity = _tempPrimarys.Any(b => b.Attribute.IsIdentity); var sb = new StringBuilder().Append("MERGE INTO ").Append(_commonUtils.QuoteSqlName(TableRuleInvoke())).Append(" t1 \r\nUSING ("); diff --git a/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdAdo.cs b/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdAdo.cs index b1e889f03..8e0f68be8 100644 --- a/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdAdo.cs +++ b/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdAdo.cs @@ -31,14 +31,14 @@ namespace FreeSql.Firebird if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length); if (!string.IsNullOrEmpty(masterConnectionString)) MasterPool = isAdoPool ? - new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new FbConnection(masterConnectionString)) as IObjectPool : - new FirebirdConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); + new DbConnectionStringPool(base.DataType, CoreErrorStrings.S_MasterDatabase, () => new FbConnection(masterConnectionString)) as IObjectPool : + new FirebirdConnectionPool(CoreErrorStrings.S_MasterDatabase, masterConnectionString, null, null); slaveConnectionStrings?.ToList().ForEach(slaveConnectionString => { var slavePool = isAdoPool ? - new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new FbConnection(slaveConnectionString)) as IObjectPool : - new FirebirdConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); + new DbConnectionStringPool(base.DataType, $"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new FbConnection(slaveConnectionString)) as IObjectPool : + new FirebirdConnectionPool($"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); SlavePools.Add(slavePool); }); } diff --git a/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdConnectionPool.cs b/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdConnectionPool.cs index c674a45e1..8be15c361 100644 --- a/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdConnectionPool.cs +++ b/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdConnectionPool.cs @@ -40,7 +40,7 @@ namespace FreeSql.Firebird { internal FirebirdConnectionPool _pool; - public string Name { get; set; } = $"Firebird FbConnection {CoreStrings.S_ObjectPool}"; + public string Name { get; set; } = $"Firebird FbConnection {CoreErrorStrings.S_ObjectPool}"; public int PoolSize { get; set; } = 100; public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); @@ -115,7 +115,7 @@ namespace FreeSql.Firebird if (_pool.IsAvailable) { if (obj.Value == null) - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); if (obj.Value.State != ConnectionState.Open) obj.Value.Open(); @@ -130,7 +130,7 @@ namespace FreeSql.Firebird if (_pool.IsAvailable) { if (obj.Value == null) - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); if (obj.Value.State != ConnectionState.Open) await obj.Value.OpenAsync(); diff --git a/Providers/FreeSql.Provider.Firebird/FirebirdCodeFirst.cs b/Providers/FreeSql.Provider.Firebird/FirebirdCodeFirst.cs index 0a2d624a6..9994cc0cd 100644 --- a/Providers/FreeSql.Provider.Firebird/FirebirdCodeFirst.cs +++ b/Providers/FreeSql.Provider.Firebird/FirebirdCodeFirst.cs @@ -89,8 +89,8 @@ namespace FreeSql.Firebird { if (sb.Length > 0) sb.Append("\r\n"); var tb = obj.tableSchema; - if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); - if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); + if (tb == null) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); var tbname = tb.DbName; var tboldname = tb.DbOldName; //旧表名 if (string.IsNullOrEmpty(obj.tableName) == false) diff --git a/Providers/FreeSql.Provider.Firebird/FirebirdExpression.cs b/Providers/FreeSql.Provider.Firebird/FirebirdExpression.cs index 59a4f1780..17a86f775 100644 --- a/Providers/FreeSql.Provider.Firebird/FirebirdExpression.cs +++ b/Providers/FreeSql.Provider.Firebird/FirebirdExpression.cs @@ -241,7 +241,7 @@ namespace FreeSql.Firebird return _common.StringConcat(concatNewArrExp.Expressions.Select(a => getExp(a)).ToArray(), null); return _common.StringConcat(exp.Arguments.Select(a => getExp(a)).ToArray(), null); case "Format": - if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); + if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreErrorStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ? (exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0); //3个 {} 时,Arguments 解析出来是分开的 diff --git a/Providers/FreeSql.Provider.GBase/Curd/GBaseDelete.cs b/Providers/FreeSql.Provider.GBase/Curd/GBaseDelete.cs index d47b3e2b5..3040ff3c4 100644 --- a/Providers/FreeSql.Provider.GBase/Curd/GBaseDelete.cs +++ b/Providers/FreeSql.Provider.GBase/Curd/GBaseDelete.cs @@ -16,11 +16,11 @@ namespace FreeSql.GBase.Curd { } - public override List ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.GBase {CoreStrings.S_Not_Implemented_Feature}"); + public override List ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.GBase {CoreErrorStrings.S_Not_Implemented_Feature}"); #if net40 #else - public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.GBase {CoreStrings.S_Not_Implemented_Feature}"); + public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.GBase {CoreErrorStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.GBase/Curd/GBaseInsert.cs b/Providers/FreeSql.Provider.GBase/Curd/GBaseInsert.cs index d0b130f7d..880474745 100644 --- a/Providers/FreeSql.Provider.GBase/Curd/GBaseInsert.cs +++ b/Providers/FreeSql.Provider.GBase/Curd/GBaseInsert.cs @@ -28,7 +28,7 @@ namespace FreeSql.GBase.Curd if (_source?.Count <= 1) return base.ToSqlValuesOrSelectUnionAll(); var sql = base.ToSqlValuesOrSelectUnionAllExtension102(false, null, (rowd, idx, sb) => sb.Append(" FROM dual")); var validx = sql.IndexOf(") SELECT "); - if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("SELECT")); + if (validx == -1) throw new ArgumentException(CoreErrorStrings.S_NotFound_Name("SELECT")); return new StringBuilder() .Insert(0, sql.Substring(0, validx + 1)) .Append("\r\nSELECT * FROM (\r\n") diff --git a/Providers/FreeSql.Provider.GBase/Curd/GBaseInsertOrUpdate.cs b/Providers/FreeSql.Provider.GBase/Curd/GBaseInsertOrUpdate.cs index 66719f42d..ec3ddfe1a 100644 --- a/Providers/FreeSql.Provider.GBase/Curd/GBaseInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.GBase/Curd/GBaseInsertOrUpdate.cs @@ -32,7 +32,7 @@ namespace FreeSql.GBase.Curd string getMergeSql(List data) { - if (_tempPrimarys.Any() == false) throw new Exception(CoreStrings.InsertOrUpdate_Must_Primary_Key(_table.CsName)); + if (_tempPrimarys.Any() == false) throw new Exception(CoreErrorStrings.InsertOrUpdate_Must_Primary_Key(_table.CsName)); var tempPrimaryIsIdentity = _tempPrimarys.Any(b => b.Attribute.IsIdentity); var sb = new StringBuilder().Append("MERGE INTO ").Append(_commonUtils.QuoteSqlName(TableRuleInvoke())).Append(" t1 \r\nUSING ("); diff --git a/Providers/FreeSql.Provider.GBase/Curd/GBaseUpdate.cs b/Providers/FreeSql.Provider.GBase/Curd/GBaseUpdate.cs index 4ec6d1dec..dcda0853d 100644 --- a/Providers/FreeSql.Provider.GBase/Curd/GBaseUpdate.cs +++ b/Providers/FreeSql.Provider.GBase/Curd/GBaseUpdate.cs @@ -22,7 +22,7 @@ namespace FreeSql.GBase.Curd public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); protected override List ExecuteUpdated(IEnumerable columns) => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, columns); - protected override List RawExecuteUpdated(IEnumerable columns) => throw new NotImplementedException($"FreeSql.Provider.GBase {CoreStrings.S_Not_Implemented_Feature}"); + protected override List RawExecuteUpdated(IEnumerable columns) => throw new NotImplementedException($"FreeSql.Provider.GBase {CoreErrorStrings.S_Not_Implemented_Feature}"); protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) { @@ -66,7 +66,7 @@ namespace FreeSql.GBase.Curd public override Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); protected override Task> ExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, columns, cancellationToken); - protected override Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.GBase {CoreStrings.S_Not_Implemented_Feature}"); + protected override Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.GBase {CoreErrorStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseAdo.cs b/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseAdo.cs index adbb21985..9baac766c 100644 --- a/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseAdo.cs +++ b/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseAdo.cs @@ -31,14 +31,14 @@ namespace FreeSql.GBase if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length); if (!string.IsNullOrEmpty(masterConnectionString)) MasterPool = isAdoPool ? - new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new OdbcConnection(masterConnectionString)) as IObjectPool : - new GBaseConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); + new DbConnectionStringPool(base.DataType, CoreErrorStrings.S_MasterDatabase, () => new OdbcConnection(masterConnectionString)) as IObjectPool : + new GBaseConnectionPool(CoreErrorStrings.S_MasterDatabase, masterConnectionString, null, null); slaveConnectionStrings?.ToList().ForEach(slaveConnectionString => { var slavePool = isAdoPool ? - new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool : - new GBaseConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); + new DbConnectionStringPool(base.DataType, $"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool : + new GBaseConnectionPool($"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); SlavePools.Add(slavePool); }); } diff --git a/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseConnectionPool.cs b/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseConnectionPool.cs index 266eaa266..79ca7e75a 100644 --- a/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseConnectionPool.cs +++ b/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseConnectionPool.cs @@ -45,7 +45,7 @@ namespace FreeSql.GBase { internal GBaseConnectionPool _pool; - public string Name { get; set; } = $"GBase IfxConnection {CoreStrings.S_ObjectPool}"; + public string Name { get; set; } = $"GBase IfxConnection {CoreErrorStrings.S_ObjectPool}"; public int PoolSize { get; set; } = 100; public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); @@ -120,8 +120,8 @@ namespace FreeSql.GBase { if (obj.Value == null) { - _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + _pool.SetUnavailable(new Exception(CoreErrorStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false) @@ -150,8 +150,8 @@ namespace FreeSql.GBase { if (obj.Value == null) { - _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + _pool.SetUnavailable(new Exception(CoreErrorStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) diff --git a/Providers/FreeSql.Provider.GBase/GBaseCodeFirst.cs b/Providers/FreeSql.Provider.GBase/GBaseCodeFirst.cs index 53c02d105..349126340 100644 --- a/Providers/FreeSql.Provider.GBase/GBaseCodeFirst.cs +++ b/Providers/FreeSql.Provider.GBase/GBaseCodeFirst.cs @@ -92,8 +92,8 @@ namespace FreeSql.GBase { if (sb.Length > 0) sb.Append("\r\n"); var tb = obj.tableSchema; - if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); - if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); + if (tb == null) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { database, tbname[0] }; diff --git a/Providers/FreeSql.Provider.GBase/GBaseExpression.cs b/Providers/FreeSql.Provider.GBase/GBaseExpression.cs index 573858421..8a77e2524 100644 --- a/Providers/FreeSql.Provider.GBase/GBaseExpression.cs +++ b/Providers/FreeSql.Provider.GBase/GBaseExpression.cs @@ -241,7 +241,7 @@ namespace FreeSql.GBase return _common.StringConcat(concatNewArrExp.Expressions.Select(a => getExp(a)).ToArray(), null); return _common.StringConcat(exp.Arguments.Select(a => getExp(a)).ToArray(), null); case "Format": - if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); + if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreErrorStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ? (exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0); //3个 {} 时,Arguments 解析出来是分开的 diff --git a/Providers/FreeSql.Provider.KingbaseES/Curd/KingbaseESOnConflictDoUpdate.cs b/Providers/FreeSql.Provider.KingbaseES/Curd/KingbaseESOnConflictDoUpdate.cs index ebe991fa6..fa99bfd47 100644 --- a/Providers/FreeSql.Provider.KingbaseES/Curd/KingbaseESOnConflictDoUpdate.cs +++ b/Providers/FreeSql.Provider.KingbaseES/Curd/KingbaseESOnConflictDoUpdate.cs @@ -24,7 +24,7 @@ namespace FreeSql.KingbaseES public KingbaseESOnConflictDoUpdate(IInsert insert, Expression> columns = null) { _insert = insert as KingbaseESInsert; - if (_insert == null) throw new Exception(CoreStrings.S_Features_Unique("OnConflictDoUpdate", "KingbaseES")); + if (_insert == null) throw new Exception(CoreErrorStrings.S_Features_Unique("OnConflictDoUpdate", "KingbaseES")); if (_insert._noneParameterFlag == "c") _insert._noneParameterFlag = "cu"; if (columns != null) @@ -38,7 +38,7 @@ namespace FreeSql.KingbaseES } if (_tempPrimarys == null || _tempPrimarys.Any() == false) _tempPrimarys = _insert.InternalTable.Primarys; - if (_tempPrimarys.Any() == false) throw new Exception(CoreStrings.S_OnConflictDoUpdate_MustIsPrimary); + if (_tempPrimarys.Any() == false) throw new Exception(CoreErrorStrings.S_OnConflictDoUpdate_MustIsPrimary); } protected void ClearData() diff --git a/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESAdo.cs b/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESAdo.cs index 1668fcf93..a59bd52d7 100644 --- a/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESAdo.cs +++ b/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESAdo.cs @@ -32,14 +32,14 @@ namespace FreeSql.KingbaseES if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length); if (!string.IsNullOrEmpty(masterConnectionString)) MasterPool = isAdoPool ? - new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new KdbndpConnection(masterConnectionString)) as IObjectPool : - new KingbaseESConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); + new DbConnectionStringPool(base.DataType, CoreErrorStrings.S_MasterDatabase, () => new KdbndpConnection(masterConnectionString)) as IObjectPool : + new KingbaseESConnectionPool(CoreErrorStrings.S_MasterDatabase, masterConnectionString, null, null); slaveConnectionStrings?.ToList().ForEach(slaveConnectionString => { var slavePool = isAdoPool ? - new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new KdbndpConnection(slaveConnectionString)) as IObjectPool : - new KingbaseESConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); + new DbConnectionStringPool(base.DataType, $"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new KdbndpConnection(slaveConnectionString)) as IObjectPool : + new KingbaseESConnectionPool($"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); SlavePools.Add(slavePool); }); } diff --git a/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESConnectionPool.cs b/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESConnectionPool.cs index 1a439a5b3..902739411 100644 --- a/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESConnectionPool.cs +++ b/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESConnectionPool.cs @@ -56,7 +56,7 @@ namespace FreeSql.KingbaseES { internal KingbaseESConnectionPool _pool; - public string Name { get; set; } = $"KingbaseES KdbndpConnection {CoreStrings.S_ObjectPool}"; + public string Name { get; set; } = $"KingbaseES KdbndpConnection {CoreErrorStrings.S_ObjectPool}"; public int PoolSize { get; set; } = 100; public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); @@ -131,8 +131,8 @@ namespace FreeSql.KingbaseES { if (obj.Value == null) { - _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + _pool.SetUnavailable(new Exception(CoreErrorStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false) @@ -161,8 +161,8 @@ namespace FreeSql.KingbaseES { if (obj.Value == null) { - _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + _pool.SetUnavailable(new Exception(CoreErrorStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) diff --git a/Providers/FreeSql.Provider.KingbaseES/KingbaseESCodeFirst.cs b/Providers/FreeSql.Provider.KingbaseES/KingbaseESCodeFirst.cs index b8919a2cf..3a29fa8ee 100644 --- a/Providers/FreeSql.Provider.KingbaseES/KingbaseESCodeFirst.cs +++ b/Providers/FreeSql.Provider.KingbaseES/KingbaseESCodeFirst.cs @@ -152,8 +152,8 @@ namespace FreeSql.KingbaseES { if (sb.Length > 0) sb.Append("\r\n"); var tb = obj.tableSchema; - if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); - if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); + if (tb == null) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { public_, tbname[0] }; diff --git a/Providers/FreeSql.Provider.KingbaseES/KingbaseESExpression.cs b/Providers/FreeSql.Provider.KingbaseES/KingbaseESExpression.cs index d17c761f0..f67b7559f 100644 --- a/Providers/FreeSql.Provider.KingbaseES/KingbaseESExpression.cs +++ b/Providers/FreeSql.Provider.KingbaseES/KingbaseESExpression.cs @@ -369,7 +369,7 @@ namespace FreeSql.KingbaseES return _common.StringConcat(concatNewArrExp.Expressions.Select(a => getExp(a)).ToArray(), null); return _common.StringConcat(exp.Arguments.Select(a => getExp(a)).ToArray(), null); case "Format": - if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreStrings.Not_Implemented_Expression_ParameterUseConstant(exp, exp.Arguments[0])); + if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreErrorStrings.Not_Implemented_Expression_ParameterUseConstant(exp, exp.Arguments[0])); var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ? (exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0); //3个 {} 时,Arguments 解析出来是分开的 diff --git a/Providers/FreeSql.Provider.KingbaseES/KingbaseESExtensions.cs b/Providers/FreeSql.Provider.KingbaseES/KingbaseESExtensions.cs index 372ba1116..998d63ca0 100644 --- a/Providers/FreeSql.Provider.KingbaseES/KingbaseESExtensions.cs +++ b/Providers/FreeSql.Provider.KingbaseES/KingbaseESExtensions.cs @@ -142,7 +142,7 @@ public static partial class FreeSqlKingbaseESGlobalExtensions public static void ExecuteKdbCopy(this IInsert that) where T : class { var insert = that as FreeSql.KingbaseES.KingbaseESInsert; - if (insert == null) throw new Exception(CoreStrings.S_Features_Unique("ExecuteKdbCopy", "KingbaseES")); + if (insert == null) throw new Exception(CoreErrorStrings.S_Features_Unique("ExecuteKdbCopy", "KingbaseES")); var dt = that.ToDataTable(); if (dt.Rows.Count == 0) return; @@ -200,7 +200,7 @@ public static partial class FreeSqlKingbaseESGlobalExtensions } else { - throw new NotImplementedException($"ExecuteKdbCopy {CoreStrings.S_Not_Implemented_FeedBack}"); + throw new NotImplementedException($"ExecuteKdbCopy {CoreErrorStrings.S_Not_Implemented_FeedBack}"); } } finally diff --git a/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessDelete.cs b/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessDelete.cs index fa822e8a5..ceb5a9f8f 100644 --- a/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessDelete.cs +++ b/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessDelete.cs @@ -16,11 +16,11 @@ namespace FreeSql.MsAccess.Curd { } - public override List ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.MsAccess {CoreStrings.S_Not_Implemented_Feature}"); + public override List ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.MsAccess {CoreErrorStrings.S_Not_Implemented_Feature}"); #if net40 #else - public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.MsAccess {CoreStrings.S_Not_Implemented_Feature}"); + public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.MsAccess {CoreErrorStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessInsert.cs b/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessInsert.cs index 606c2b081..c5c9111a9 100644 --- a/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessInsert.cs +++ b/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessInsert.cs @@ -26,7 +26,7 @@ namespace FreeSql.MsAccess.Curd public override List ExecuteInserted() => base.SplitExecuteInserted(1, 1000); public override IInsert BatchOptions(int valuesLimit, int parameterLimit, bool autoTransaction = true) => - throw new NotImplementedException(CoreStrings.S_Access_InsertOnlyOneAtTime); + throw new NotImplementedException(CoreErrorStrings.S_Access_InsertOnlyOneAtTime); protected override int RawExecuteAffrows() { diff --git a/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessSelect.cs b/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessSelect.cs index b12fa6661..c7ad51033 100644 --- a/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessSelect.cs +++ b/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessSelect.cs @@ -39,7 +39,7 @@ namespace FreeSql.MsAccess.Curd if (_limit > 0) sb.Append("TOP ").Append(_skip + _limit).Append(" "); sb.Append(field); if (_skip > 0) - throw new NotImplementedException(CoreStrings.S_NotImplementSkipOffset("MsAccess")); + throw new NotImplementedException(CoreErrorStrings.S_NotImplementSkipOffset("MsAccess")); sb.Append(" \r\nFROM "); var fromIndex = sb.Length; var ioinCounter = 0; diff --git a/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessUpdate.cs b/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessUpdate.cs index e9c35db9d..657d08aef 100644 --- a/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessUpdate.cs +++ b/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessUpdate.cs @@ -20,12 +20,12 @@ namespace FreeSql.MsAccess.Curd _batchAutoTransaction = false; } - public override IUpdate BatchOptions(int rowsLimit, int parameterLimit, bool autoTransaction = true) => throw new NotImplementedException(CoreStrings.S_Access_InsertOnlyOneAtTime); + public override IUpdate BatchOptions(int rowsLimit, int parameterLimit, bool autoTransaction = true) => throw new NotImplementedException(CoreErrorStrings.S_Access_InsertOnlyOneAtTime); //蛋疼的 access 更新只能一条一条执行,不支持 case .. when .. then .. end,也不支持事务 public override int ExecuteAffrows() => base.SplitExecuteAffrows(1, 1000); protected override List ExecuteUpdated(IEnumerable columns) => base.SplitExecuteUpdated(1, 1000, columns); - protected override List RawExecuteUpdated(IEnumerable columns) => throw new NotImplementedException($"FreeSql.Provider.MsAccess {CoreStrings.S_Not_Implemented_Feature}"); + protected override List RawExecuteUpdated(IEnumerable columns) => throw new NotImplementedException($"FreeSql.Provider.MsAccess {CoreErrorStrings.S_Not_Implemented_Feature}"); protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) { @@ -67,7 +67,7 @@ namespace FreeSql.MsAccess.Curd public override Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(1, 1000, cancellationToken); protected override Task> ExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(1, 1000, columns, cancellationToken); - protected override Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.MsAccess {CoreStrings.S_Not_Implemented_Feature}"); + protected override Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.MsAccess {CoreErrorStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessAdo.cs b/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessAdo.cs index 8b484e280..deff747a6 100644 --- a/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessAdo.cs +++ b/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessAdo.cs @@ -29,14 +29,14 @@ namespace FreeSql.MsAccess if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length); if (!string.IsNullOrEmpty(masterConnectionString)) MasterPool = isAdoPool ? - new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new OleDbConnection(masterConnectionString)) as IObjectPool : - new MsAccessConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); + new DbConnectionStringPool(base.DataType, CoreErrorStrings.S_MasterDatabase, () => new OleDbConnection(masterConnectionString)) as IObjectPool : + new MsAccessConnectionPool(CoreErrorStrings.S_MasterDatabase, masterConnectionString, null, null); slaveConnectionStrings?.ToList().ForEach(slaveConnectionString => { var slavePool = isAdoPool ? - new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OleDbConnection(slaveConnectionString)) as IObjectPool : - new MsAccessConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); + new DbConnectionStringPool(base.DataType, $"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OleDbConnection(slaveConnectionString)) as IObjectPool : + new MsAccessConnectionPool($"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); SlavePools.Add(slavePool); }); } diff --git a/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessConnectionPool.cs b/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessConnectionPool.cs index 3a432163e..ba5cade0d 100644 --- a/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessConnectionPool.cs +++ b/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessConnectionPool.cs @@ -40,7 +40,7 @@ namespace FreeSql.MsAccess { internal MsAccessConnectionPool _pool; - public string Name { get; set; } = $"Microsoft Access OleDbConnection {CoreStrings.S_ObjectPool}"; + public string Name { get; set; } = $"Microsoft Access OleDbConnection {CoreErrorStrings.S_ObjectPool}"; public int PoolSize { get; set; } = 100; public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(30); public TimeSpan IdleTimeout { get; set; } = TimeSpan.Zero; @@ -114,7 +114,7 @@ namespace FreeSql.MsAccess { if (obj.Value == null) - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); if (obj.Value.State != ConnectionState.Open) obj.Value.Open(); @@ -130,7 +130,7 @@ namespace FreeSql.MsAccess { if (obj.Value == null) - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); if (obj.Value.State != ConnectionState.Open) await obj.Value.OpenAsync(); diff --git a/Providers/FreeSql.Provider.MsAccess/MsAccessCodeFirst.cs b/Providers/FreeSql.Provider.MsAccess/MsAccessCodeFirst.cs index 39b60da2e..fd9ec101f 100644 --- a/Providers/FreeSql.Provider.MsAccess/MsAccessCodeFirst.cs +++ b/Providers/FreeSql.Provider.MsAccess/MsAccessCodeFirst.cs @@ -80,8 +80,8 @@ namespace FreeSql.MsAccess { if (sb.Length > 0) sb.Append("\r\n"); var tb = obj.tableSchema; - if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); - if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); + if (tb == null) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); var tbname = tb.DbName; var tboldname = tb.DbOldName; //旧表名 if (string.Compare(tbname, tboldname, true) == 0) tboldname = null; @@ -177,7 +177,7 @@ namespace FreeSql.MsAccess istmpatler = true; } if (tboldname != null && isexistsTb == true) - throw new Exception(CoreStrings.S_OldTableExists(tboldname, tbname)); + throw new Exception(CoreErrorStrings.S_OldTableExists(tboldname, tbname)); DataTable schemaColumns = null; DataTable schemaDataTypes = null; diff --git a/Providers/FreeSql.Provider.MsAccess/MsAccessExpression.cs b/Providers/FreeSql.Provider.MsAccess/MsAccessExpression.cs index e878986c5..ec66c329a 100644 --- a/Providers/FreeSql.Provider.MsAccess/MsAccessExpression.cs +++ b/Providers/FreeSql.Provider.MsAccess/MsAccessExpression.cs @@ -224,7 +224,7 @@ namespace FreeSql.MsAccess return _common.StringConcat(concatNewArrExp.Expressions.Select(a => getExp(a)).ToArray(), concatNewArrExp.Expressions.Select(a => a.Type).ToArray()); return _common.StringConcat(exp.Arguments.Select(a => getExp(a)).ToArray(), exp.Arguments.Select(a => a.Type).ToArray()); case "Format": - if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); + if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreErrorStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ? (exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0); //3个 {} 时,Arguments 解析出来是分开的 diff --git a/Providers/FreeSql.Provider.MsAccess/MsAccessProvider.cs b/Providers/FreeSql.Provider.MsAccess/MsAccessProvider.cs index 28ea24747..45f40a13d 100644 --- a/Providers/FreeSql.Provider.MsAccess/MsAccessProvider.cs +++ b/Providers/FreeSql.Provider.MsAccess/MsAccessProvider.cs @@ -15,7 +15,7 @@ namespace FreeSql.MsAccess public override IDelete CreateDeleteProvider(object dywhere) => new MsAccessDelete(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere); public override IInsertOrUpdate CreateInsertOrUpdateProvider() => throw new NotImplementedException(); - public override IDbFirst DbFirst => throw new NotImplementedException($"FreeSql.Provider.MsAccess {CoreStrings.S_Not_Implemented_Feature}"); + public override IDbFirst DbFirst => throw new NotImplementedException($"FreeSql.Provider.MsAccess {CoreErrorStrings.S_Not_Implemented_Feature}"); public MsAccessProvider(string masterConnectionString, string[] slaveConnectionString, Func connectionFactory = null) { this.InternalCommonUtils = new MsAccessUtils(this); diff --git a/Providers/FreeSql.Provider.MySql/Curd/MySqlInsertOrUpdate.cs b/Providers/FreeSql.Provider.MySql/Curd/MySqlInsertOrUpdate.cs index 1a4a0c651..ab9e227d1 100644 --- a/Providers/FreeSql.Provider.MySql/Curd/MySqlInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.MySql/Curd/MySqlInsertOrUpdate.cs @@ -86,7 +86,7 @@ namespace FreeSql.MySql.Curd } else { - if (_tempPrimarys.Any() == false) throw new Exception(CoreStrings.Entity_Must_Primary_Key("fsql.InsertOrUpdate + IfExistsDoNothing + MySql ", _table.CsName)); + if (_tempPrimarys.Any() == false) throw new Exception(CoreErrorStrings.Entity_Must_Primary_Key("fsql.InsertOrUpdate + IfExistsDoNothing + MySql ", _table.CsName)); sql = insert.ToSqlValuesOrSelectUnionAll(); if (sql?.StartsWith("INSERT INTO ") == true) sql = $"INSERT IGNORE INTO {sql.Substring(12)}"; diff --git a/Providers/FreeSql.Provider.MySql/Curd/OnDuplicateKeyUpdate.cs b/Providers/FreeSql.Provider.MySql/Curd/OnDuplicateKeyUpdate.cs index 5cdccc178..83ea687ef 100644 --- a/Providers/FreeSql.Provider.MySql/Curd/OnDuplicateKeyUpdate.cs +++ b/Providers/FreeSql.Provider.MySql/Curd/OnDuplicateKeyUpdate.cs @@ -17,7 +17,7 @@ namespace FreeSql.MySql.Curd public OnDuplicateKeyUpdate(IInsert insert) { _mysqlInsert = insert as MySqlInsert; - if (_mysqlInsert == null) throw new Exception(CoreStrings.S_Features_Unique("OnDuplicateKeyUpdate", "MySql/FreeSql.Provider.MySqlConnector")); + if (_mysqlInsert == null) throw new Exception(CoreErrorStrings.S_Features_Unique("OnDuplicateKeyUpdate", "MySql/FreeSql.Provider.MySqlConnector")); if (_mysqlInsert._noneParameterFlag == "c") _mysqlInsert._noneParameterFlag = "cu"; } diff --git a/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs b/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs index 5c36ffd0d..831f74b5d 100644 --- a/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs +++ b/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs @@ -34,14 +34,14 @@ namespace FreeSql.MySql if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length); if (!string.IsNullOrEmpty(masterConnectionString)) MasterPool = isAdoPool ? - new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new MySqlConnection(masterConnectionString)) as IObjectPool : - new MySqlConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); + new DbConnectionStringPool(base.DataType, CoreErrorStrings.S_MasterDatabase, () => new MySqlConnection(masterConnectionString)) as IObjectPool : + new MySqlConnectionPool(CoreErrorStrings.S_MasterDatabase, masterConnectionString, null, null); slaveConnectionStrings?.ToList().ForEach(slaveConnectionString => { var slavePool = isAdoPool ? - new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new MySqlConnection(slaveConnectionString)) as IObjectPool : - new MySqlConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); + new DbConnectionStringPool(base.DataType, $"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new MySqlConnection(slaveConnectionString)) as IObjectPool : + new MySqlConnectionPool($"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); SlavePools.Add(slavePool); }); } diff --git a/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlConnectionPool.cs b/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlConnectionPool.cs index e4488b584..4a8d42d24 100644 --- a/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlConnectionPool.cs +++ b/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlConnectionPool.cs @@ -49,7 +49,7 @@ namespace FreeSql.MySql { internal MySqlConnectionPool _pool; - public string Name { get; set; } = $"MySql MySqlConnection {CoreStrings.S_ObjectPool}"; + public string Name { get; set; } = $"MySql MySqlConnection {CoreErrorStrings.S_ObjectPool}"; public int PoolSize { get; set; } = 100; public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); @@ -125,8 +125,8 @@ namespace FreeSql.MySql { if (obj.Value == null) { - _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + _pool.SetUnavailable(new Exception(CoreErrorStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false) @@ -155,8 +155,8 @@ namespace FreeSql.MySql { if (obj.Value == null) { - _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + _pool.SetUnavailable(new Exception(CoreErrorStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) diff --git a/Providers/FreeSql.Provider.MySql/MySqlAdo/MygisTypes.cs b/Providers/FreeSql.Provider.MySql/MySqlAdo/MygisTypes.cs index 338a68d89..abfa42d88 100644 --- a/Providers/FreeSql.Provider.MySql/MySqlAdo/MygisTypes.cs +++ b/Providers/FreeSql.Provider.MySql/MySqlAdo/MygisTypes.cs @@ -72,7 +72,7 @@ public abstract class MygisGeometry else if (wkt.StartsWith("multipoint", StringComparison.CurrentCultureIgnoreCase)) return new MygisMultiPoint(ParseLineString(wkt.Substring(10).Trim('(', ')'))); else if (wkt.StartsWith("multilinestring", StringComparison.CurrentCultureIgnoreCase)) return new MygisMultiLineString(ParseMultiLineString(wkt.Substring(15).Trim('(', ')'))); else if (wkt.StartsWith("multipolygon", StringComparison.CurrentCultureIgnoreCase)) return new MygisMultiPolygon(ParseMultiPolygon(wkt.Substring(12).Trim('(', ')'))); - throw new NotImplementedException(CoreStrings.S_MygisGeometry_NotImplement(wkt)); + throw new NotImplementedException(CoreErrorStrings.S_MygisGeometry_NotImplement(wkt)); } static MygisPoint ParsePoint(string str) { diff --git a/Providers/FreeSql.Provider.MySql/MySqlCodeFirst.cs b/Providers/FreeSql.Provider.MySql/MySqlCodeFirst.cs index 046f5602f..ade0e6533 100644 --- a/Providers/FreeSql.Provider.MySql/MySqlCodeFirst.cs +++ b/Providers/FreeSql.Provider.MySql/MySqlCodeFirst.cs @@ -106,8 +106,8 @@ namespace FreeSql.MySql { if (sb.Length > 0) sb.Append("\r\n"); var tb = obj.tableSchema; - if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); - if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); + if (tb == null) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { database, tbname[0] }; diff --git a/Providers/FreeSql.Provider.MySql/MySqlExpression.cs b/Providers/FreeSql.Provider.MySql/MySqlExpression.cs index 4800911d5..c92eb7206 100644 --- a/Providers/FreeSql.Provider.MySql/MySqlExpression.cs +++ b/Providers/FreeSql.Provider.MySql/MySqlExpression.cs @@ -252,7 +252,7 @@ namespace FreeSql.MySql return _common.StringConcat(concatNewArrExp.Expressions.Select(a => getExp(a)).ToArray(), null); return _common.StringConcat(exp.Arguments.Select(a => getExp(a)).ToArray(), null); case "Format": - if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); + if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreErrorStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); if (exp.Arguments.Count == 1) return ExpressionLambdaToSql(exp.Arguments[0], tsc); var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ? (exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0); diff --git a/Providers/FreeSql.Provider.MySql/MySqlExtensions.cs b/Providers/FreeSql.Provider.MySql/MySqlExtensions.cs index 48a72c1c8..32ad25937 100644 --- a/Providers/FreeSql.Provider.MySql/MySqlExtensions.cs +++ b/Providers/FreeSql.Provider.MySql/MySqlExtensions.cs @@ -32,7 +32,7 @@ public static partial class FreeSqlMySqlGlobalExtensions public static IInsert MySqlIgnoreInto(this IInsert that) where T1 : class { var _mysqlInsert = that as MySqlInsert; - if (_mysqlInsert == null) throw new Exception(CoreStrings.S_Features_Unique("MySqlIgnoreInto", "MySql/FreeSql.Provider.MySqlConnector")); + if (_mysqlInsert == null) throw new Exception(CoreErrorStrings.S_Features_Unique("MySqlIgnoreInto", "MySql/FreeSql.Provider.MySqlConnector")); _mysqlInsert.InternalIsIgnoreInto = true; return that; } diff --git a/Providers/FreeSql.Provider.MySqlConnector/FreeSqlMySqlConnectorGlobalExtensions.cs b/Providers/FreeSql.Provider.MySqlConnector/FreeSqlMySqlConnectorGlobalExtensions.cs index 57a4706fc..58c2e8629 100644 --- a/Providers/FreeSql.Provider.MySqlConnector/FreeSqlMySqlConnectorGlobalExtensions.cs +++ b/Providers/FreeSql.Provider.MySqlConnector/FreeSqlMySqlConnectorGlobalExtensions.cs @@ -138,7 +138,7 @@ public static class FreeSqlMySqlConnectorGlobalExtensions public static void ExecuteMySqlBulkCopy(this IInsert that, int? bulkCopyTimeout = null) where T : class { var insert = that as FreeSql.MySql.Curd.MySqlInsert; - if (insert == null) throw new Exception(CoreStrings.S_Features_Unique("ExecuteMySqlBulkCopy", "MySqlConnector")); + if (insert == null) throw new Exception(CoreErrorStrings.S_Features_Unique("ExecuteMySqlBulkCopy", "MySqlConnector")); var dt = that.ToDataTable(); if (dt.Rows.Count == 0) return; @@ -187,7 +187,7 @@ public static class FreeSqlMySqlConnectorGlobalExtensions } else { - throw new NotImplementedException($"ExecuteMySqlBulkCopy {CoreStrings.S_Not_Implemented_FeedBack}"); + throw new NotImplementedException($"ExecuteMySqlBulkCopy {CoreErrorStrings.S_Not_Implemented_FeedBack}"); } } finally @@ -214,7 +214,7 @@ public static class FreeSqlMySqlConnectorGlobalExtensions async public static Task ExecuteMySqlBulkCopyAsync(this IInsert that, int? bulkCopyTimeout = null, CancellationToken cancellationToken = default) where T : class { var insert = that as FreeSql.MySql.Curd.MySqlInsert; - if (insert == null) throw new Exception(CoreStrings.S_Features_Unique("ExecuteMySqlBulkCopyAsync", "MySqlConnector")); + if (insert == null) throw new Exception(CoreErrorStrings.S_Features_Unique("ExecuteMySqlBulkCopyAsync", "MySqlConnector")); var dt = that.ToDataTable(); if (dt.Rows.Count == 0) return; @@ -263,7 +263,7 @@ public static class FreeSqlMySqlConnectorGlobalExtensions } else { - throw new NotImplementedException($"ExecuteMySqlBulkCopyAsync {CoreStrings.S_Not_Implemented_FeedBack}"); + throw new NotImplementedException($"ExecuteMySqlBulkCopyAsync {CoreErrorStrings.S_Not_Implemented_FeedBack}"); } } finally diff --git a/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcDelete.cs b/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcDelete.cs index 671564ff7..0e0af7222 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcDelete.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcDelete.cs @@ -16,11 +16,11 @@ namespace FreeSql.Odbc.Default { } - public override List ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreStrings.S_Not_Implemented_Feature}"); + public override List ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreErrorStrings.S_Not_Implemented_Feature}"); #if net40 #else - public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreStrings.S_Not_Implemented_Feature}"); + public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreErrorStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcInsert.cs b/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcInsert.cs index 681362cb8..c6f517e1b 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcInsert.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcInsert.cs @@ -62,7 +62,7 @@ namespace FreeSql.Odbc.Default return ret; } - protected override List RawExecuteInserted() => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreStrings.S_Not_Implemented_Feature}"); + protected override List RawExecuteInserted() => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreErrorStrings.S_Not_Implemented_Feature}"); #if net40 #else @@ -107,7 +107,7 @@ namespace FreeSql.Odbc.Default } return ret; } - protected override Task> RawExecuteInsertedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreStrings.S_Not_Implemented_Feature}"); + protected override Task> RawExecuteInsertedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreErrorStrings.S_Not_Implemented_Feature}"); #endif } } \ No newline at end of file diff --git a/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcSelect.cs b/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcSelect.cs index b966c2f49..1f88f4d5f 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcSelect.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcSelect.cs @@ -38,7 +38,7 @@ namespace FreeSql.Odbc.Default if (_limit > 0 && _utils.Adapter.SelectTopStyle == OdbcAdapter.SelecTopStyle.Top) sb.Append("TOP ").Append(_skip + _limit).Append(" "); sb.Append(field); if (_skip > 0 && _utils.Adapter.SelectTopStyle == OdbcAdapter.SelecTopStyle.Top) - throw new NotImplementedException(CoreStrings.S_NotImplementSkipOffset("Default")); + throw new NotImplementedException(CoreErrorStrings.S_NotImplementSkipOffset("Default")); sb.Append(" \r\nFROM "); var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray(); diff --git a/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcUpdate.cs b/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcUpdate.cs index 41f84c879..d6adc612b 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcUpdate.cs @@ -23,7 +23,7 @@ namespace FreeSql.Odbc.Default public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255); protected override List ExecuteUpdated(IEnumerable columns) => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, columns); - protected override List RawExecuteUpdated(IEnumerable columns) => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreStrings.S_Not_Implemented_Feature}"); + protected override List RawExecuteUpdated(IEnumerable columns) => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreErrorStrings.S_Not_Implemented_Feature}"); protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) { @@ -65,7 +65,7 @@ namespace FreeSql.Odbc.Default public override Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken); protected override Task> ExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, columns, cancellationToken); - protected override Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreStrings.S_Not_Implemented_Feature}"); + protected override Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreErrorStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcAdo.cs b/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcAdo.cs index 8875e6549..1ee450783 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcAdo.cs @@ -30,14 +30,14 @@ namespace FreeSql.Odbc.Default if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length); if (!string.IsNullOrEmpty(masterConnectionString)) MasterPool = isAdoPool ? - new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new OdbcConnection(masterConnectionString)) as IObjectPool : - new OdbcConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); + new DbConnectionStringPool(base.DataType, CoreErrorStrings.S_MasterDatabase, () => new OdbcConnection(masterConnectionString)) as IObjectPool : + new OdbcConnectionPool(CoreErrorStrings.S_MasterDatabase, masterConnectionString, null, null); slaveConnectionStrings?.ToList().ForEach(slaveConnectionString => { var slavePool = isAdoPool ? - new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool : - new OdbcConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); + new DbConnectionStringPool(base.DataType, $"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool : + new OdbcConnectionPool($"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); SlavePools.Add(slavePool); }); } diff --git a/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcConnectionPool.cs b/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcConnectionPool.cs index ad43c4062..721fd9004 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcConnectionPool.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcConnectionPool.cs @@ -45,7 +45,7 @@ namespace FreeSql.Odbc.Default { internal OdbcConnectionPool _pool; - public string Name { get; set; } = $"Default OdbcConnection {CoreStrings.S_ObjectPool}"; + public string Name { get; set; } = $"Default OdbcConnection {CoreErrorStrings.S_ObjectPool}"; public int PoolSize { get; set; } = 100; public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); @@ -121,8 +121,8 @@ namespace FreeSql.Odbc.Default if (obj.Value == null) { - _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + _pool.SetUnavailable(new Exception(CoreErrorStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false) @@ -152,8 +152,8 @@ namespace FreeSql.Odbc.Default if (obj.Value == null) { - _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + _pool.SetUnavailable(new Exception(CoreErrorStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) diff --git a/Providers/FreeSql.Provider.Odbc/Default/OdbcCodeFirst.cs b/Providers/FreeSql.Provider.Odbc/Default/OdbcCodeFirst.cs index 6f7c5de5f..b463c8646 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/OdbcCodeFirst.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/OdbcCodeFirst.cs @@ -90,6 +90,6 @@ namespace FreeSql.Odbc.Default return null; } - protected override string GetComparisonDDLStatements(params TypeSchemaAndName[] objects) => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreStrings.S_Not_Implemented_Feature}"); + protected override string GetComparisonDDLStatements(params TypeSchemaAndName[] objects) => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreErrorStrings.S_Not_Implemented_Feature}"); } } \ No newline at end of file diff --git a/Providers/FreeSql.Provider.Odbc/Default/OdbcProvider.cs b/Providers/FreeSql.Provider.Odbc/Default/OdbcProvider.cs index 152b5e018..af4992204 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/OdbcProvider.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/OdbcProvider.cs @@ -20,7 +20,7 @@ namespace FreeSql.Odbc.Default public override IDelete CreateDeleteProvider(object dywhere) => new OdbcDelete(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere); public override IInsertOrUpdate CreateInsertOrUpdateProvider() => throw new NotImplementedException(); - public override IDbFirst DbFirst => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreStrings.S_Not_Implemented_Feature}"); + public override IDbFirst DbFirst => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreErrorStrings.S_Not_Implemented_Feature}"); /// /// 生成一个普通访问功能的 IFreeSql 对象,用来访问 odbc diff --git a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlInsertOrUpdate.cs b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlInsertOrUpdate.cs index f7bad9d63..3c7c2b94b 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlInsertOrUpdate.cs @@ -86,7 +86,7 @@ namespace FreeSql.Odbc.MySql } else { - if (_tempPrimarys.Any() == false) throw new Exception(CoreStrings.Entity_Must_Primary_Key("fsql.InsertOrUpdate + IfExistsDoNothing + MySql ", _table.CsName)); + if (_tempPrimarys.Any() == false) throw new Exception(CoreErrorStrings.Entity_Must_Primary_Key("fsql.InsertOrUpdate + IfExistsDoNothing + MySql ", _table.CsName)); sql = insert.ToSqlValuesOrSelectUnionAll(); if (sql?.StartsWith("INSERT INTO ") == true) sql = $"INSERT IGNORE INTO {sql.Substring(12)}"; diff --git a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlOnDuplicateKeyUpdate.cs b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlOnDuplicateKeyUpdate.cs index 79bec80f4..8d689597f 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlOnDuplicateKeyUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlOnDuplicateKeyUpdate.cs @@ -17,7 +17,7 @@ namespace FreeSql.Odbc.MySql public OdbcMySqlOnDuplicateKeyUpdate(IInsert insert) { _mysqlInsert = insert as OdbcMySqlInsert; - if (_mysqlInsert == null) throw new Exception(CoreStrings.S_Features_Unique("OnDuplicateKeyUpdate", "Odbc/MySql")); + if (_mysqlInsert == null) throw new Exception(CoreErrorStrings.S_Features_Unique("OnDuplicateKeyUpdate", "Odbc/MySql")); if (_mysqlInsert._noneParameterFlag == "c") _mysqlInsert._noneParameterFlag = "cu"; } diff --git a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs index 9cce6250d..618f3008c 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs @@ -31,14 +31,14 @@ namespace FreeSql.Odbc.MySql if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length); if (!string.IsNullOrEmpty(masterConnectionString)) MasterPool = isAdoPool ? - new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new OdbcConnection(masterConnectionString)) as IObjectPool : - new OdbcMySqlConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); + new DbConnectionStringPool(base.DataType, CoreErrorStrings.S_MasterDatabase, () => new OdbcConnection(masterConnectionString)) as IObjectPool : + new OdbcMySqlConnectionPool(CoreErrorStrings.S_MasterDatabase, masterConnectionString, null, null); slaveConnectionStrings?.ToList().ForEach(slaveConnectionString => { var slavePool = isAdoPool ? - new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool : - new OdbcMySqlConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); + new DbConnectionStringPool(base.DataType, $"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool : + new OdbcMySqlConnectionPool($"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); SlavePools.Add(slavePool); }); } diff --git a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlConnectionPool.cs b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlConnectionPool.cs index ee2854e54..99e946438 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlConnectionPool.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlConnectionPool.cs @@ -45,7 +45,7 @@ namespace FreeSql.Odbc.MySql { internal OdbcMySqlConnectionPool _pool; - public string Name { get; set; } = $"MySql OdbcConnection {CoreStrings.S_ObjectPool}"; + public string Name { get; set; } = $"MySql OdbcConnection {CoreErrorStrings.S_ObjectPool}"; public int PoolSize { get; set; } = 100; public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); @@ -120,8 +120,8 @@ namespace FreeSql.Odbc.MySql { if (obj.Value == null) { - _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + _pool.SetUnavailable(new Exception(CoreErrorStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false) @@ -150,8 +150,8 @@ namespace FreeSql.Odbc.MySql { if (obj.Value == null) { - _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + _pool.SetUnavailable(new Exception(CoreErrorStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) diff --git a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlCodeFirst.cs b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlCodeFirst.cs index 569b5f8fe..885c18253 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlCodeFirst.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlCodeFirst.cs @@ -90,8 +90,8 @@ namespace FreeSql.Odbc.MySql { if (sb.Length > 0) sb.Append("\r\n"); var tb = obj.tableSchema; - if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); - if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); + if (tb == null) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { database, tbname[0] }; diff --git a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs index a82cc4bfd..063f548b3 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs @@ -250,7 +250,7 @@ namespace FreeSql.Odbc.MySql return _common.StringConcat(concatNewArrExp.Expressions.Select(a => getExp(a)).ToArray(), null); return _common.StringConcat(exp.Arguments.Select(a => getExp(a)).ToArray(), null); case "Format": - if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); + if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreErrorStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); if (exp.Arguments.Count == 1) return ExpressionLambdaToSql(exp.Arguments[0], tsc); var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ? (exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0); diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleDelete.cs b/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleDelete.cs index daea93653..11e35f3db 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleDelete.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleDelete.cs @@ -16,11 +16,11 @@ namespace FreeSql.Odbc.Oracle { } - public override List ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Odbc.Oracle {CoreStrings.S_Not_Implemented_Feature}"); + public override List ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Odbc.Oracle {CoreErrorStrings.S_Not_Implemented_Feature}"); #if net40 #else - public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Oracle {CoreStrings.S_Not_Implemented_Feature}"); + public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Oracle {CoreErrorStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleInsertOrUpdate.cs b/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleInsertOrUpdate.cs index 72da5a972..fe9c8769d 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleInsertOrUpdate.cs @@ -32,7 +32,7 @@ namespace FreeSql.Odbc.Oracle string getMergeSql(List data) { - if (_tempPrimarys.Any() == false) throw new Exception(CoreStrings.InsertOrUpdate_Must_Primary_Key(_table.CsName)); + if (_tempPrimarys.Any() == false) throw new Exception(CoreErrorStrings.InsertOrUpdate_Must_Primary_Key(_table.CsName)); var tempPrimaryIsIdentity = _tempPrimarys.Any(b => b.Attribute.IsIdentity); var sb = new StringBuilder().Append("MERGE INTO ").Append(_commonUtils.QuoteSqlName(TableRuleInvoke())).Append(" t1 \r\nUSING ("); diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleUpdate.cs b/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleUpdate.cs index c03859260..8df04ab3d 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleUpdate.cs @@ -22,7 +22,7 @@ namespace FreeSql.Odbc.Oracle public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); protected override List ExecuteUpdated(IEnumerable columns) => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, columns); - protected override List RawExecuteUpdated(IEnumerable columns) => throw new NotImplementedException($"FreeSql.Odbc.Oracle {CoreStrings.S_Not_Implemented_Feature}"); + protected override List RawExecuteUpdated(IEnumerable columns) => throw new NotImplementedException($"FreeSql.Odbc.Oracle {CoreErrorStrings.S_Not_Implemented_Feature}"); protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) { @@ -68,7 +68,7 @@ namespace FreeSql.Odbc.Oracle public override Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); protected override Task> ExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, columns, cancellationToken); - protected override Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Oracle {CoreStrings.S_Not_Implemented_Feature}"); + protected override Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Oracle {CoreErrorStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleAdo.cs b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleAdo.cs index 789f96f4a..e5ec0a496 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleAdo.cs @@ -30,14 +30,14 @@ namespace FreeSql.Odbc.Oracle if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length); if (!string.IsNullOrEmpty(masterConnectionString)) MasterPool = isAdoPool ? - new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new OdbcConnection(masterConnectionString)) as IObjectPool : - new OdbcOracleConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); + new DbConnectionStringPool(base.DataType, CoreErrorStrings.S_MasterDatabase, () => new OdbcConnection(masterConnectionString)) as IObjectPool : + new OdbcOracleConnectionPool(CoreErrorStrings.S_MasterDatabase, masterConnectionString, null, null); slaveConnectionStrings?.ToList().ForEach(slaveConnectionString => { var slavePool = isAdoPool ? - new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool : - new OdbcOracleConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); + new DbConnectionStringPool(base.DataType, $"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool : + new OdbcOracleConnectionPool($"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); SlavePools.Add(slavePool); }); } diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleConnectionPool.cs b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleConnectionPool.cs index 30bc350c5..d279d94cd 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleConnectionPool.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleConnectionPool.cs @@ -56,7 +56,7 @@ namespace FreeSql.Odbc.Oracle { internal OdbcOracleConnectionPool _pool; - public string Name { get; set; } = $"Oracle OdbcConnection {CoreStrings.S_ObjectPool}"; + public string Name { get; set; } = $"Oracle OdbcConnection {CoreErrorStrings.S_ObjectPool}"; public int PoolSize { get; set; } = 100; public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); @@ -131,8 +131,8 @@ namespace FreeSql.Odbc.Oracle { if (obj.Value == null) { - _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + _pool.SetUnavailable(new Exception(CoreErrorStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false) @@ -161,8 +161,8 @@ namespace FreeSql.Odbc.Oracle { if (obj.Value == null) { - _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + _pool.SetUnavailable(new Exception(CoreErrorStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleCodeFirst.cs b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleCodeFirst.cs index 35fb0fd9b..3996e9a5a 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleCodeFirst.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleCodeFirst.cs @@ -93,8 +93,8 @@ namespace FreeSql.Odbc.Oracle { if (sb.Length > 0) sb.Append("\r\n"); var tb = obj.tableSchema; - if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); - if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); + if (tb == null) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { userId, tbname[0] }; @@ -115,7 +115,7 @@ namespace FreeSql.Odbc.Oracle //codefirst 不支持表名中带 . if (string.Compare(tbname[0], userId) != 0 && _orm.Ado.ExecuteScalar(CommandType.Text, _commonUtils.FormatSql(" select 1 from sys.dba_users where username={0}", tbname[0])) == null) //创建数据库 - throw new NotImplementedException(CoreStrings.S_Oracle_NotSupport_TablespaceSchemas(tbname[0])); + throw new NotImplementedException(CoreErrorStrings.S_Oracle_NotSupport_TablespaceSchemas(tbname[0])); var sbalter = new StringBuilder(); var istmpatler = false; //创建临时表,导入数据,删除旧表,修改 diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleDbFirst.cs b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleDbFirst.cs index 8037ee9e8..78fc7e913 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleDbFirst.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleDbFirst.cs @@ -113,7 +113,7 @@ namespace FreeSql.Odbc.Oracle if (dbfull != null) _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]); return OdbcType.NVarChar; } - throw new NotImplementedException(CoreStrings.S_TypeMappingNotImplemented(column.DbTypeTextFull)); + throw new NotImplementedException(CoreErrorStrings.S_TypeMappingNotImplemented(column.DbTypeTextFull)); } static ConcurrentDictionary _dicDbToCs = new ConcurrentDictionary(StringComparer.CurrentCultureIgnoreCase); diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs index dabb589a0..bd6a1c9c7 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs @@ -254,7 +254,7 @@ namespace FreeSql.Odbc.Oracle return _common.StringConcat(concatNewArrExp.Expressions.Select(a => getExp(a)).ToArray(), null); return _common.StringConcat(exp.Arguments.Select(a => getExp(a)).ToArray(), null); case "Format": - if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); + if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreErrorStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ? (exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0); //3个 {} 时,Arguments 解析出来是分开的 diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLOnConflictDoUpdate.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLOnConflictDoUpdate.cs index 23562c66a..416929922 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLOnConflictDoUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLOnConflictDoUpdate.cs @@ -24,7 +24,7 @@ namespace FreeSql.Odbc.PostgreSQL public OdbcPostgreSQLOnConflictDoUpdate(IInsert insert, Expression> columns = null) { _pgsqlInsert = insert as OdbcPostgreSQLInsert; - if (_pgsqlInsert == null) throw new Exception(CoreStrings.S_Features_Unique("OnConflictDoUpdate", "Odbc/PostgreSQL")); + if (_pgsqlInsert == null) throw new Exception(CoreErrorStrings.S_Features_Unique("OnConflictDoUpdate", "Odbc/PostgreSQL")); if (_pgsqlInsert._noneParameterFlag == "c") _pgsqlInsert._noneParameterFlag = "cu"; if (columns != null) @@ -38,7 +38,7 @@ namespace FreeSql.Odbc.PostgreSQL } if (_tempPrimarys == null || _tempPrimarys.Any() == false) _tempPrimarys = _pgsqlInsert.InternalTable.Primarys; - if (_tempPrimarys.Any() == false) throw new Exception(CoreStrings.S_OnConflictDoUpdate_MustIsPrimary); + if (_tempPrimarys.Any() == false) throw new Exception(CoreErrorStrings.S_OnConflictDoUpdate_MustIsPrimary); } protected void ClearData() diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs index d1052f7b0..859320a9b 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs @@ -31,14 +31,14 @@ namespace FreeSql.Odbc.PostgreSQL if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length); if (!string.IsNullOrEmpty(masterConnectionString)) MasterPool = isAdoPool ? - new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new OdbcConnection(masterConnectionString)) as IObjectPool : - new OdbcPostgreSQLConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); + new DbConnectionStringPool(base.DataType, CoreErrorStrings.S_MasterDatabase, () => new OdbcConnection(masterConnectionString)) as IObjectPool : + new OdbcPostgreSQLConnectionPool(CoreErrorStrings.S_MasterDatabase, masterConnectionString, null, null); slaveConnectionStrings?.ToList().ForEach(slaveConnectionString => { var slavePool = isAdoPool ? - new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool : - new OdbcPostgreSQLConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); + new DbConnectionStringPool(base.DataType, $"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool : + new OdbcPostgreSQLConnectionPool($"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); SlavePools.Add(slavePool); }); } diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLConnectionPool.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLConnectionPool.cs index b1797fba7..4154e7cac 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLConnectionPool.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLConnectionPool.cs @@ -46,7 +46,7 @@ namespace FreeSql.Odbc.PostgreSQL { internal OdbcPostgreSQLConnectionPool _pool; - public string Name { get; set; } = $"PostgreSQL OdbcConnection {CoreStrings.S_ObjectPool}"; + public string Name { get; set; } = $"PostgreSQL OdbcConnection {CoreErrorStrings.S_ObjectPool}"; public int PoolSize { get; set; } = 50; public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); @@ -121,8 +121,8 @@ namespace FreeSql.Odbc.PostgreSQL { if (obj.Value == null) { - _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + _pool.SetUnavailable(new Exception(CoreErrorStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false) @@ -151,8 +151,8 @@ namespace FreeSql.Odbc.PostgreSQL { if (obj.Value == null) { - _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + _pool.SetUnavailable(new Exception(CoreErrorStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLCodeFirst.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLCodeFirst.cs index 07ab82e9a..4e9284a91 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLCodeFirst.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLCodeFirst.cs @@ -93,8 +93,8 @@ namespace FreeSql.Odbc.PostgreSQL { if (sb.Length > 0) sb.Append("\r\n"); var tb = obj.tableSchema; - if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); - if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); + if (tb == null) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { "public", tbname[0] }; diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs index 4427a5a46..10b5ccf78 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs @@ -338,7 +338,7 @@ namespace FreeSql.Odbc.PostgreSQL return _common.StringConcat(concatNewArrExp.Expressions.Select(a => getExp(a)).ToArray(), null); return _common.StringConcat(exp.Arguments.Select(a => getExp(a)).ToArray(), null); case "Format": - if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); + if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreErrorStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ? (exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0); //3个 {} 时,Arguments 解析出来是分开的 diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerDelete.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerDelete.cs index 868f463b6..c3d63222e 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerDelete.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerDelete.cs @@ -40,7 +40,7 @@ namespace FreeSql.Odbc.SqlServer } var sql = sb.ToString(); var validx = sql.IndexOf(" WHERE "); - if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("WHERE")); + if (validx == -1) throw new ArgumentException(CoreErrorStrings.S_NotFound_Name("WHERE")); sql = sb.Clear().Append(sql.Substring(0, validx)) .Append(sbret) .Append(sql.Substring(validx)).ToString(); @@ -97,7 +97,7 @@ namespace FreeSql.Odbc.SqlServer } var sql = sb.ToString(); var validx = sql.IndexOf(" WHERE "); - if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("WHERE")); + if (validx == -1) throw new ArgumentException(CoreErrorStrings.S_NotFound_Name("WHERE")); sql = sb.Clear().Append(sql.Substring(0, validx)) .Append(sbret) .Append(sql.Substring(validx)).ToString(); diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerInsert.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerInsert.cs index e4650e9ea..325aa4aad 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerInsert.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerInsert.cs @@ -69,14 +69,14 @@ namespace FreeSql.Odbc.SqlServer if ((_commonUtils as OdbcSqlServerUtils).ServerVersion > 10) { var validx = sql.IndexOf(") VALUES"); - if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("VALUES")); + if (validx == -1) throw new ArgumentException(CoreErrorStrings.S_NotFound_Name("VALUES")); sb.Insert(0, sql.Substring(0, validx + 1)); sb.Append(sql.Substring(validx + 1)); } else { var validx = sql.IndexOf(") SELECT "); - if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("SELECT")); + if (validx == -1) throw new ArgumentException(CoreErrorStrings.S_NotFound_Name("SELECT")); sb.Insert(0, sql.Substring(0, validx + 1)); sb.Append(sql.Substring(validx + 1)); } @@ -153,14 +153,14 @@ namespace FreeSql.Odbc.SqlServer if ((_commonUtils as OdbcSqlServerUtils).ServerVersion > 10) { var validx = sql.IndexOf(") VALUES"); - if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("VALUES")); + if (validx == -1) throw new ArgumentException(CoreErrorStrings.S_NotFound_Name("VALUES")); sb.Insert(0, sql.Substring(0, validx + 1)); sb.Append(sql.Substring(validx + 1)); } else { var validx = sql.IndexOf(") SELECT "); - if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("SELECT")); + if (validx == -1) throw new ArgumentException(CoreErrorStrings.S_NotFound_Name("SELECT")); sb.Insert(0, sql.Substring(0, validx + 1)); sb.Append(sql.Substring(validx + 1)); } diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerInsertOrUpdate.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerInsertOrUpdate.cs index 8db1590f7..919c063fc 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerInsertOrUpdate.cs @@ -32,7 +32,7 @@ namespace FreeSql.Odbc.SqlServer string getMergeSql(List data) { - if (_tempPrimarys.Any() == false) throw new Exception(CoreStrings.InsertOrUpdate_Must_Primary_Key(_table.CsName)); + if (_tempPrimarys.Any() == false) throw new Exception(CoreErrorStrings.InsertOrUpdate_Must_Primary_Key(_table.CsName)); var tempPrimaryIsIdentity = _tempPrimarys.Any(b => b.Attribute.IsIdentity); var sb = new StringBuilder(); diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerUpdate.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerUpdate.cs index b131cf71a..43c9e5064 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerUpdate.cs @@ -46,7 +46,7 @@ namespace FreeSql.Odbc.SqlServer } var sql = sb.ToString(); var validx = sql.IndexOf(" \r\nWHERE "); - if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("WHERE")); + if (validx == -1) throw new ArgumentException(CoreErrorStrings.S_NotFound_Name("WHERE")); sql = sb.Clear().Append(sql.Substring(0, validx)) .Append(sbret) .Append(sql.Substring(validx)).ToString(); @@ -140,7 +140,7 @@ namespace FreeSql.Odbc.SqlServer } var sql = sb.ToString(); var validx = sql.IndexOf(" \r\nWHERE "); - if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("WHERE")); + if (validx == -1) throw new ArgumentException(CoreErrorStrings.S_NotFound_Name("WHERE")); sql = sb.Clear().Append(sql.Substring(0, validx)) .Append(sbret) .Append(sql.Substring(validx)).ToString(); diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerAdo.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerAdo.cs index e1aa4038a..931e6377b 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerAdo.cs @@ -30,14 +30,14 @@ namespace FreeSql.Odbc.SqlServer if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length); if (!string.IsNullOrEmpty(masterConnectionString)) MasterPool = isAdoPool ? - new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new OdbcConnection(masterConnectionString)) as IObjectPool : - new OdbcSqlServerConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); + new DbConnectionStringPool(base.DataType, CoreErrorStrings.S_MasterDatabase, () => new OdbcConnection(masterConnectionString)) as IObjectPool : + new OdbcSqlServerConnectionPool(CoreErrorStrings.S_MasterDatabase, masterConnectionString, null, null); slaveConnectionStrings?.ToList().ForEach(slaveConnectionString => { var slavePool = isAdoPool ? - new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool : - new OdbcSqlServerConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); + new DbConnectionStringPool(base.DataType, $"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool : + new OdbcSqlServerConnectionPool($"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); SlavePools.Add(slavePool); }); } diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerConnectionPool.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerConnectionPool.cs index 9b2e0a3cd..5474bddce 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerConnectionPool.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerConnectionPool.cs @@ -45,7 +45,7 @@ namespace FreeSql.Odbc.SqlServer { internal OdbcSqlServerConnectionPool _pool; - public string Name { get; set; } = $"SqlServer OdbcConnection {CoreStrings.S_ObjectPool}"; + public string Name { get; set; } = $"SqlServer OdbcConnection {CoreErrorStrings.S_ObjectPool}"; public int PoolSize { get; set; } = 100; public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); @@ -121,8 +121,8 @@ namespace FreeSql.Odbc.SqlServer if (obj.Value == null) { - _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + _pool.SetUnavailable(new Exception(CoreErrorStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false) @@ -152,8 +152,8 @@ namespace FreeSql.Odbc.SqlServer if (obj.Value == null) { - _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + _pool.SetUnavailable(new Exception(CoreErrorStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerCodeFirst.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerCodeFirst.cs index 470a30016..eca943764 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerCodeFirst.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerCodeFirst.cs @@ -150,8 +150,8 @@ ELSE { if (sb.Length > 0) sb.Append("\r\n"); var tb = obj.tableSchema; - if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); - if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); + if (tb == null) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { database, "dbo", tbname[0] }; if (tbname?.Length == 2) tbname = new[] { database, tbname[0], tbname[1] }; diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerExpression.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerExpression.cs index 6720d1c75..073a377f0 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerExpression.cs @@ -260,7 +260,7 @@ namespace FreeSql.Odbc.SqlServer return _common.StringConcat(concatNewArrExp.Expressions.Select(a => getExp(a)).ToArray(), concatNewArrExp.Expressions.Select(a => a.Type).ToArray()); return _common.StringConcat(exp.Arguments.Select(a => getExp(a)).ToArray(), exp.Arguments.Select(a => a.Type).ToArray()); case "Format": - if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); + if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreErrorStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); var expArgs0 = ExpressionLambdaToSql(exp.Arguments[0], tsc); if (exp.Arguments.Count == 1) return expArgs0; var nchar = expArgs0.StartsWith("N'") ? "N" : ""; diff --git a/Providers/FreeSql.Provider.Oracle/Curd/OracleDelete.cs b/Providers/FreeSql.Provider.Oracle/Curd/OracleDelete.cs index b823251ae..e0605a375 100644 --- a/Providers/FreeSql.Provider.Oracle/Curd/OracleDelete.cs +++ b/Providers/FreeSql.Provider.Oracle/Curd/OracleDelete.cs @@ -16,11 +16,11 @@ namespace FreeSql.Oracle.Curd { } - public override List ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.Oracle {CoreStrings.S_Not_Implemented_Feature}"); + public override List ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.Oracle {CoreErrorStrings.S_Not_Implemented_Feature}"); #if net40 #else - public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Oracle {CoreStrings.S_Not_Implemented_Feature}"); + public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Oracle {CoreErrorStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.Oracle/Curd/OracleInsertOrUpdate.cs b/Providers/FreeSql.Provider.Oracle/Curd/OracleInsertOrUpdate.cs index f2612dbbb..1b2e3147d 100644 --- a/Providers/FreeSql.Provider.Oracle/Curd/OracleInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.Oracle/Curd/OracleInsertOrUpdate.cs @@ -32,7 +32,7 @@ namespace FreeSql.Oracle.Curd string getMergeSql(List data) { - if (_tempPrimarys.Any() == false) throw new Exception(CoreStrings.InsertOrUpdate_Must_Primary_Key(_table.CsName)); + if (_tempPrimarys.Any() == false) throw new Exception(CoreErrorStrings.InsertOrUpdate_Must_Primary_Key(_table.CsName)); var tempPrimaryIsIdentity = _tempPrimarys.Any(b => b.Attribute.IsIdentity); var sb = new StringBuilder().Append("MERGE INTO ").Append(_commonUtils.QuoteSqlName(TableRuleInvoke())).Append(" t1 \r\nUSING ("); diff --git a/Providers/FreeSql.Provider.Oracle/Curd/OracleUpdate.cs b/Providers/FreeSql.Provider.Oracle/Curd/OracleUpdate.cs index 2ec4df710..c6afbe246 100644 --- a/Providers/FreeSql.Provider.Oracle/Curd/OracleUpdate.cs +++ b/Providers/FreeSql.Provider.Oracle/Curd/OracleUpdate.cs @@ -22,7 +22,7 @@ namespace FreeSql.Oracle.Curd public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); protected override List ExecuteUpdated(IEnumerable columns) => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, columns); - protected override List RawExecuteUpdated(IEnumerable columns) => throw new NotImplementedException($"FreeSql.Provider.Oracle {CoreStrings.S_Not_Implemented_Feature}"); + protected override List RawExecuteUpdated(IEnumerable columns) => throw new NotImplementedException($"FreeSql.Provider.Oracle {CoreErrorStrings.S_Not_Implemented_Feature}"); protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) { @@ -68,7 +68,7 @@ namespace FreeSql.Oracle.Curd public override Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); protected override Task> ExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, columns, cancellationToken); - protected override Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Oracle {CoreStrings.S_Not_Implemented_Feature}"); + protected override Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Oracle {CoreErrorStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleAdo.cs b/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleAdo.cs index d238df703..ec855a8ee 100644 --- a/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleAdo.cs +++ b/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleAdo.cs @@ -30,14 +30,14 @@ namespace FreeSql.Oracle if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length); if (!string.IsNullOrEmpty(masterConnectionString)) MasterPool = isAdoPool ? - new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => OracleConnectionPool.CreateConnection(masterConnectionString)) as IObjectPool : - new OracleConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); + new DbConnectionStringPool(base.DataType, CoreErrorStrings.S_MasterDatabase, () => OracleConnectionPool.CreateConnection(masterConnectionString)) as IObjectPool : + new OracleConnectionPool(CoreErrorStrings.S_MasterDatabase, masterConnectionString, null, null); slaveConnectionStrings?.ToList().ForEach(slaveConnectionString => { var slavePool = isAdoPool ? - new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => OracleConnectionPool.CreateConnection(slaveConnectionString)) as IObjectPool : - new OracleConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); + new DbConnectionStringPool(base.DataType, $"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => OracleConnectionPool.CreateConnection(slaveConnectionString)) as IObjectPool : + new OracleConnectionPool($"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); SlavePools.Add(slavePool); }); } diff --git a/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleConnectionPool.cs b/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleConnectionPool.cs index 628a0a6f2..f1dd621c9 100644 --- a/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleConnectionPool.cs +++ b/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleConnectionPool.cs @@ -66,7 +66,7 @@ namespace FreeSql.Oracle { internal OracleConnectionPool _pool; - public string Name { get; set; } = $"Oracle Connection {CoreStrings.S_ObjectPool}"; + public string Name { get; set; } = $"Oracle Connection {CoreErrorStrings.S_ObjectPool}"; public int PoolSize { get; set; } = 100; public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); @@ -141,8 +141,8 @@ namespace FreeSql.Oracle { if (obj.Value == null) { - _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + _pool.SetUnavailable(new Exception(CoreErrorStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false) @@ -171,8 +171,8 @@ namespace FreeSql.Oracle { if (obj.Value == null) { - _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + _pool.SetUnavailable(new Exception(CoreErrorStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) diff --git a/Providers/FreeSql.Provider.Oracle/OracleCodeFirst.cs b/Providers/FreeSql.Provider.Oracle/OracleCodeFirst.cs index c788b97da..ee0a77126 100644 --- a/Providers/FreeSql.Provider.Oracle/OracleCodeFirst.cs +++ b/Providers/FreeSql.Provider.Oracle/OracleCodeFirst.cs @@ -128,8 +128,8 @@ namespace FreeSql.Oracle { if (sb.Length > 0) sb.Append("\r\n"); var tb = obj.tableSchema; - if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); - if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); + if (tb == null) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { userId, tbname[0] }; @@ -150,7 +150,7 @@ namespace FreeSql.Oracle //codefirst 不支持表名中带 . if (string.Compare(tbname[0], userId) != 0 && _orm.Ado.ExecuteScalar(CommandType.Text, _commonUtils.FormatSql(" select 1 from sys.dba_users where username={0}", tbname[0])) == null) //创建数据库 - throw new NotImplementedException(CoreStrings.S_Oracle_NotSupport_TablespaceSchemas(tbname[0])); + throw new NotImplementedException(CoreErrorStrings.S_Oracle_NotSupport_TablespaceSchemas(tbname[0])); var sbalter = new StringBuilder(); var istmpatler = false; //创建临时表,导入数据,删除旧表,修改 diff --git a/Providers/FreeSql.Provider.Oracle/OracleDbFirst.cs b/Providers/FreeSql.Provider.Oracle/OracleDbFirst.cs index 98b7e57b6..18831dab9 100644 --- a/Providers/FreeSql.Provider.Oracle/OracleDbFirst.cs +++ b/Providers/FreeSql.Provider.Oracle/OracleDbFirst.cs @@ -118,7 +118,7 @@ namespace FreeSql.Oracle if (dbfull != null) _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]); return OleDbType.VarChar; } - throw new NotImplementedException(CoreStrings.S_TypeMappingNotImplemented(column.DbTypeTextFull)); + throw new NotImplementedException(CoreErrorStrings.S_TypeMappingNotImplemented(column.DbTypeTextFull)); } #else OracleDbType GetSqlDbType(DbColumnInfo column) @@ -209,7 +209,7 @@ namespace FreeSql.Oracle if (dbfull != null) _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]); return OracleDbType.NVarchar2; } - throw new NotImplementedException(CoreStrings.S_TypeMappingNotImplemented(column.DbTypeTextFull)); + throw new NotImplementedException(CoreErrorStrings.S_TypeMappingNotImplemented(column.DbTypeTextFull)); } #endif diff --git a/Providers/FreeSql.Provider.Oracle/OracleExpression.cs b/Providers/FreeSql.Provider.Oracle/OracleExpression.cs index 3d5535f5c..827e794b6 100644 --- a/Providers/FreeSql.Provider.Oracle/OracleExpression.cs +++ b/Providers/FreeSql.Provider.Oracle/OracleExpression.cs @@ -254,7 +254,7 @@ namespace FreeSql.Oracle return _common.StringConcat(concatNewArrExp.Expressions.Select(a => getExp(a)).ToArray(), null); return _common.StringConcat(exp.Arguments.Select(a => getExp(a)).ToArray(), null); case "Format": - if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); + if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreErrorStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ? (exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0); //3个 {} 时,Arguments 解析出来是分开的 diff --git a/Providers/FreeSql.Provider.Oracle/OracleExtensions.cs b/Providers/FreeSql.Provider.Oracle/OracleExtensions.cs index acf824a05..0077d879c 100644 --- a/Providers/FreeSql.Provider.Oracle/OracleExtensions.cs +++ b/Providers/FreeSql.Provider.Oracle/OracleExtensions.cs @@ -139,7 +139,7 @@ public static partial class FreeSqlOracleGlobalExtensions public static void ExecuteOracleBulkCopy(this IInsert that, OracleBulkCopyOptions copyOptions = OracleBulkCopyOptions.Default, int? batchSize = null, int? bulkCopyTimeout = null) where T : class { var insert = that as FreeSql.Oracle.Curd.OracleInsert; - if (insert == null) throw new Exception(CoreStrings.S_Features_Unique("ExecuteOracleBulkCopy", "Oracle")); + if (insert == null) throw new Exception(CoreErrorStrings.S_Features_Unique("ExecuteOracleBulkCopy", "Oracle")); var dt = that.ToDataTable(); if (dt.Rows.Count == 0) return; @@ -207,7 +207,7 @@ public static partial class FreeSqlOracleGlobalExtensions } else { - throw new NotImplementedException($"ExecuteOracleBulkCopy {CoreStrings.S_Not_Implemented_FeedBack}"); + throw new NotImplementedException($"ExecuteOracleBulkCopy {CoreErrorStrings.S_Not_Implemented_FeedBack}"); } } finally diff --git a/Providers/FreeSql.Provider.PostgreSQL/Curd/OnConflictDoUpdate.cs b/Providers/FreeSql.Provider.PostgreSQL/Curd/OnConflictDoUpdate.cs index 03113e000..230e056d2 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/Curd/OnConflictDoUpdate.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/Curd/OnConflictDoUpdate.cs @@ -24,7 +24,7 @@ namespace FreeSql.PostgreSQL.Curd public OnConflictDoUpdate(IInsert insert, Expression> columns = null) { _pgsqlInsert = insert as PostgreSQLInsert; - if (_pgsqlInsert == null) throw new Exception(CoreStrings.S_Features_Unique("OnConflictDoUpdate", "PostgreSQL")); + if (_pgsqlInsert == null) throw new Exception(CoreErrorStrings.S_Features_Unique("OnConflictDoUpdate", "PostgreSQL")); if (_pgsqlInsert._noneParameterFlag == "c") _pgsqlInsert._noneParameterFlag = "cu"; if (columns != null) @@ -38,7 +38,7 @@ namespace FreeSql.PostgreSQL.Curd } if (_tempPrimarys == null || _tempPrimarys.Any() == false) _tempPrimarys = _pgsqlInsert.InternalTable.Primarys; - if (_tempPrimarys.Any() == false) throw new Exception(CoreStrings.S_OnConflictDoUpdate_MustIsPrimary); + if (_tempPrimarys.Any() == false) throw new Exception(CoreErrorStrings.S_OnConflictDoUpdate_MustIsPrimary); } protected void ClearData() diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs index 7a22f98e9..feb748ce6 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs @@ -32,14 +32,14 @@ namespace FreeSql.PostgreSQL if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length); if (!string.IsNullOrEmpty(masterConnectionString)) MasterPool = isAdoPool ? - new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new NpgsqlConnection(masterConnectionString)) as IObjectPool : - new PostgreSQLConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); + new DbConnectionStringPool(base.DataType, CoreErrorStrings.S_MasterDatabase, () => new NpgsqlConnection(masterConnectionString)) as IObjectPool : + new PostgreSQLConnectionPool(CoreErrorStrings.S_MasterDatabase, masterConnectionString, null, null); slaveConnectionStrings?.ToList().ForEach(slaveConnectionString => { var slavePool = isAdoPool ? - new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new NpgsqlConnection(slaveConnectionString)) as IObjectPool : - new PostgreSQLConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); + new DbConnectionStringPool(base.DataType, $"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new NpgsqlConnection(slaveConnectionString)) as IObjectPool : + new PostgreSQLConnectionPool($"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); SlavePools.Add(slavePool); }); } diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLConnectionPool.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLConnectionPool.cs index 890b9bcd6..0845d2c71 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLConnectionPool.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLConnectionPool.cs @@ -46,7 +46,7 @@ namespace FreeSql.PostgreSQL { internal PostgreSQLConnectionPool _pool; - public string Name { get; set; } = $"PostgreSQL NpgsqlConnection {CoreStrings.S_ObjectPool}"; + public string Name { get; set; } = $"PostgreSQL NpgsqlConnection {CoreErrorStrings.S_ObjectPool}"; public int PoolSize { get; set; } = 50; public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); @@ -122,8 +122,8 @@ namespace FreeSql.PostgreSQL { if (obj.Value == null) { - _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + _pool.SetUnavailable(new Exception(CoreErrorStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false) @@ -152,8 +152,8 @@ namespace FreeSql.PostgreSQL { if (obj.Value == null) { - _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + _pool.SetUnavailable(new Exception(CoreErrorStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLCodeFirst.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLCodeFirst.cs index af3942fda..c51427084 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLCodeFirst.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLCodeFirst.cs @@ -148,8 +148,8 @@ namespace FreeSql.PostgreSQL { if (sb.Length > 0) sb.Append("\r\n"); var tb = obj.tableSchema; - if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); - if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); + if (tb == null) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { "public", tbname[0] }; diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs index 2e6927321..184b5a31e 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs @@ -369,7 +369,7 @@ namespace FreeSql.PostgreSQL return _common.StringConcat(concatNewArrExp.Expressions.Select(a => getExp(a)).ToArray(), null); return _common.StringConcat(exp.Arguments.Select(a => getExp(a)).ToArray(), null); case "Format": - if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); + if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreErrorStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ? (exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0); //3个 {} 时,Arguments 解析出来是分开的 diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExtensions.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExtensions.cs index 3007178f2..5256bfd8f 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExtensions.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExtensions.cs @@ -182,7 +182,7 @@ public static partial class FreeSqlPostgreSQLGlobalExtensions public static void ExecutePgCopy(this IInsert that) where T : class { var insert = that as FreeSql.PostgreSQL.Curd.PostgreSQLInsert; - if (insert == null) throw new Exception(CoreStrings.S_Features_Unique("ExecutePgCopy", "PostgreSQL")); + if (insert == null) throw new Exception(CoreErrorStrings.S_Features_Unique("ExecutePgCopy", "PostgreSQL")); var dt = that.ToDataTable(); if (dt.Rows.Count == 0) return; @@ -254,7 +254,7 @@ public static partial class FreeSqlPostgreSQLGlobalExtensions } else { - throw new NotImplementedException($"ExecutePgCopy {CoreStrings.S_Not_Implemented_FeedBack}"); + throw new NotImplementedException($"ExecutePgCopy {CoreErrorStrings.S_Not_Implemented_FeedBack}"); } } finally @@ -282,7 +282,7 @@ public static partial class FreeSqlPostgreSQLGlobalExtensions async public static Task ExecutePgCopyAsync(this IInsert that, CancellationToken cancellationToken = default) where T : class { var insert = that as FreeSql.PostgreSQL.Curd.PostgreSQLInsert; - if (insert == null) throw new Exception(CoreStrings.S_Features_Unique("ExecutePgCopyAsync", "PostgreSQL")); + if (insert == null) throw new Exception(CoreErrorStrings.S_Features_Unique("ExecutePgCopyAsync", "PostgreSQL")); var dt = that.ToDataTable(); if (dt.Rows.Count == 0) return; @@ -353,7 +353,7 @@ public static partial class FreeSqlPostgreSQLGlobalExtensions } else { - throw new NotImplementedException($"ExecutePgCopyAsync {CoreStrings.S_Not_Implemented_FeedBack}"); + throw new NotImplementedException($"ExecutePgCopyAsync {CoreErrorStrings.S_Not_Implemented_FeedBack}"); } } finally diff --git a/Providers/FreeSql.Provider.QuestDb/Curd/OnConflictDoUpdate.cs b/Providers/FreeSql.Provider.QuestDb/Curd/OnConflictDoUpdate.cs index 53ebe1a68..7a33faeb9 100644 --- a/Providers/FreeSql.Provider.QuestDb/Curd/OnConflictDoUpdate.cs +++ b/Providers/FreeSql.Provider.QuestDb/Curd/OnConflictDoUpdate.cs @@ -24,7 +24,7 @@ namespace FreeSql.QuestDb.Curd public OnConflictDoUpdate(IInsert insert, Expression> columns = null) { _pgsqlInsert = insert as QuestDbInsert; - if (_pgsqlInsert == null) throw new Exception(CoreStrings.S_Features_Unique("OnConflictDoUpdate", "QuestDb")); + if (_pgsqlInsert == null) throw new Exception(CoreErrorStrings.S_Features_Unique("OnConflictDoUpdate", "QuestDb")); if (_pgsqlInsert._noneParameterFlag == "c") _pgsqlInsert._noneParameterFlag = "cu"; if (columns != null) @@ -38,7 +38,7 @@ namespace FreeSql.QuestDb.Curd } if (_tempPrimarys == null || _tempPrimarys.Any() == false) _tempPrimarys = _pgsqlInsert.InternalTable.Primarys; - if (_tempPrimarys.Any() == false) throw new Exception(CoreStrings.S_OnConflictDoUpdate_MustIsPrimary); + if (_tempPrimarys.Any() == false) throw new Exception(CoreErrorStrings.S_OnConflictDoUpdate_MustIsPrimary); } protected void ClearData() diff --git a/Providers/FreeSql.Provider.QuestDb/QuestDbAdo/QuestDbAdo.cs b/Providers/FreeSql.Provider.QuestDb/QuestDbAdo/QuestDbAdo.cs index 90b8a4561..a9dd24252 100644 --- a/Providers/FreeSql.Provider.QuestDb/QuestDbAdo/QuestDbAdo.cs +++ b/Providers/FreeSql.Provider.QuestDb/QuestDbAdo/QuestDbAdo.cs @@ -32,14 +32,14 @@ namespace FreeSql.QuestDb if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length); if (!string.IsNullOrEmpty(masterConnectionString)) MasterPool = isAdoPool ? - new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new NpgsqlConnection(masterConnectionString)) as IObjectPool : - new QuestDbConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); + new DbConnectionStringPool(base.DataType, CoreErrorStrings.S_MasterDatabase, () => new NpgsqlConnection(masterConnectionString)) as IObjectPool : + new QuestDbConnectionPool(CoreErrorStrings.S_MasterDatabase, masterConnectionString, null, null); slaveConnectionStrings?.ToList().ForEach(slaveConnectionString => { var slavePool = isAdoPool ? - new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new NpgsqlConnection(slaveConnectionString)) as IObjectPool : - new QuestDbConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); + new DbConnectionStringPool(base.DataType, $"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new NpgsqlConnection(slaveConnectionString)) as IObjectPool : + new QuestDbConnectionPool($"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); SlavePools.Add(slavePool); }); } diff --git a/Providers/FreeSql.Provider.QuestDb/QuestDbAdo/QuestDbConnectionPool.cs b/Providers/FreeSql.Provider.QuestDb/QuestDbAdo/QuestDbConnectionPool.cs index 8308c677d..eeb544119 100644 --- a/Providers/FreeSql.Provider.QuestDb/QuestDbAdo/QuestDbConnectionPool.cs +++ b/Providers/FreeSql.Provider.QuestDb/QuestDbAdo/QuestDbConnectionPool.cs @@ -46,7 +46,7 @@ namespace FreeSql.QuestDb { internal QuestDbConnectionPool _pool; - public string Name { get; set; } = $"QuestDb NpgsqlConnection {CoreStrings.S_ObjectPool}"; + public string Name { get; set; } = $"QuestDb NpgsqlConnection {CoreErrorStrings.S_ObjectPool}"; public int PoolSize { get; set; } = 50; public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); @@ -122,8 +122,8 @@ namespace FreeSql.QuestDb { if (obj.Value == null) { - _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + _pool.SetUnavailable(new Exception(CoreErrorStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false) @@ -152,8 +152,8 @@ namespace FreeSql.QuestDb { if (obj.Value == null) { - _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + _pool.SetUnavailable(new Exception(CoreErrorStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) diff --git a/Providers/FreeSql.Provider.QuestDb/QuestDbCodeFirst.cs b/Providers/FreeSql.Provider.QuestDb/QuestDbCodeFirst.cs index 2bdc9a4b0..5e31497ef 100644 --- a/Providers/FreeSql.Provider.QuestDb/QuestDbCodeFirst.cs +++ b/Providers/FreeSql.Provider.QuestDb/QuestDbCodeFirst.cs @@ -88,9 +88,9 @@ namespace FreeSql.QuestDb { if (sb.Length > 0) sb.Append("\r\n"); var tb = obj.tableSchema; - if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); + if (tb == null) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); if (tb.Columns.Any() == false) - throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); + throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); var tbname = tb.DbName; var tboldname = tb.DbOldName; if (string.IsNullOrEmpty(obj.tableName) == false) diff --git a/Providers/FreeSql.Provider.QuestDb/QuestDbExpression.cs b/Providers/FreeSql.Provider.QuestDb/QuestDbExpression.cs index f1d85ec43..cbd1e2a8c 100644 --- a/Providers/FreeSql.Provider.QuestDb/QuestDbExpression.cs +++ b/Providers/FreeSql.Provider.QuestDb/QuestDbExpression.cs @@ -267,7 +267,7 @@ namespace FreeSql.QuestDb case "Format": if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception( - CoreStrings.Not_Implemented_Expression_ParameterUseConstant(exp, exp.Arguments[0])); + CoreErrorStrings.Not_Implemented_Expression_ParameterUseConstant(exp, exp.Arguments[0])); var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ? (exp.Arguments[1] as NewArrayExpression).Expressions diff --git a/Providers/FreeSql.Provider.ShenTong/Curd/ShenTongInsertOrUpdate.cs b/Providers/FreeSql.Provider.ShenTong/Curd/ShenTongInsertOrUpdate.cs index 009f3287c..ae055b05c 100644 --- a/Providers/FreeSql.Provider.ShenTong/Curd/ShenTongInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.ShenTong/Curd/ShenTongInsertOrUpdate.cs @@ -32,7 +32,7 @@ namespace FreeSql.ShenTong.Curd string getMergeSql(List data) { - if (_tempPrimarys.Any() == false) throw new Exception(CoreStrings.InsertOrUpdate_Must_Primary_Key(_table.CsName)); + if (_tempPrimarys.Any() == false) throw new Exception(CoreErrorStrings.InsertOrUpdate_Must_Primary_Key(_table.CsName)); var tempPrimaryIsIdentity = _tempPrimarys.Any(b => b.Attribute.IsIdentity); var sb = new StringBuilder().Append("MERGE INTO ").Append(_commonUtils.QuoteSqlName(TableRuleInvoke())).Append(" t1 \r\nUSING ("); diff --git a/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongAdo.cs b/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongAdo.cs index f60f52569..55fbd7b5b 100644 --- a/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongAdo.cs +++ b/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongAdo.cs @@ -29,14 +29,14 @@ namespace FreeSql.ShenTong if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length); if (!string.IsNullOrEmpty(masterConnectionString)) MasterPool = isAdoPool ? - new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new OscarConnection(masterConnectionString)) as IObjectPool : - new ShenTongConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); + new DbConnectionStringPool(base.DataType, CoreErrorStrings.S_MasterDatabase, () => new OscarConnection(masterConnectionString)) as IObjectPool : + new ShenTongConnectionPool(CoreErrorStrings.S_MasterDatabase, masterConnectionString, null, null); slaveConnectionStrings?.ToList().ForEach(slaveConnectionString => { var slavePool = isAdoPool ? - new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OscarConnection(slaveConnectionString)) as IObjectPool : - new ShenTongConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); + new DbConnectionStringPool(base.DataType, $"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OscarConnection(slaveConnectionString)) as IObjectPool : + new ShenTongConnectionPool($"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); SlavePools.Add(slavePool); }); } diff --git a/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongConnectionPool.cs b/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongConnectionPool.cs index c7f8ab7f4..fc556e2d5 100644 --- a/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongConnectionPool.cs +++ b/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongConnectionPool.cs @@ -44,7 +44,7 @@ namespace FreeSql.ShenTong { internal ShenTongConnectionPool _pool; - public string Name { get; set; } = $"ShenTong OscarConnection {CoreStrings.S_ObjectPool}"; + public string Name { get; set; } = $"ShenTong OscarConnection {CoreErrorStrings.S_ObjectPool}"; public int PoolSize { get; set; } = 50; public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); @@ -120,8 +120,8 @@ namespace FreeSql.ShenTong { if (obj.Value == null) { - _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + _pool.SetUnavailable(new Exception(CoreErrorStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false) @@ -150,8 +150,8 @@ namespace FreeSql.ShenTong { if (obj.Value == null) { - _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + _pool.SetUnavailable(new Exception(CoreErrorStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) diff --git a/Providers/FreeSql.Provider.ShenTong/ShenTongCodeFirst.cs b/Providers/FreeSql.Provider.ShenTong/ShenTongCodeFirst.cs index de8b0e01a..0cd73fc0c 100644 --- a/Providers/FreeSql.Provider.ShenTong/ShenTongCodeFirst.cs +++ b/Providers/FreeSql.Provider.ShenTong/ShenTongCodeFirst.cs @@ -95,8 +95,8 @@ namespace FreeSql.ShenTong { if (sb.Length > 0) sb.Append("\r\n"); var tb = obj.tableSchema; - if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); - if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); + if (tb == null) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { "PUBLIC", tbname[0] }; diff --git a/Providers/FreeSql.Provider.ShenTong/ShenTongExpression.cs b/Providers/FreeSql.Provider.ShenTong/ShenTongExpression.cs index 26b22e3d6..f256dbc63 100644 --- a/Providers/FreeSql.Provider.ShenTong/ShenTongExpression.cs +++ b/Providers/FreeSql.Provider.ShenTong/ShenTongExpression.cs @@ -298,7 +298,7 @@ namespace FreeSql.ShenTong return _common.StringConcat(concatNewArrExp.Expressions.Select(a => getExp(a)).ToArray(), null); return _common.StringConcat(exp.Arguments.Select(a => getExp(a)).ToArray(), null); case "Format": - if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); + if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreErrorStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ? (exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0); //3个 {} 时,Arguments 解析出来是分开的 diff --git a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerDelete.cs b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerDelete.cs index 7882a9475..ea5618c4f 100644 --- a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerDelete.cs +++ b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerDelete.cs @@ -40,7 +40,7 @@ namespace FreeSql.SqlServer.Curd } var sql = sb.ToString(); var validx = sql.IndexOf(" WHERE "); - if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("WHERE")); + if (validx == -1) throw new ArgumentException(CoreErrorStrings.S_NotFound_Name("WHERE")); sql = sb.Clear().Append(sql.Substring(0, validx)) .Append(sbret) .Append(sql.Substring(validx)).ToString(); @@ -97,7 +97,7 @@ namespace FreeSql.SqlServer.Curd } var sql = sb.ToString(); var validx = sql.IndexOf(" WHERE "); - if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("WHERE")); + if (validx == -1) throw new ArgumentException(CoreErrorStrings.S_NotFound_Name("WHERE")); sql = sb.Clear().Append(sql.Substring(0, validx)) .Append(sbret) .Append(sql.Substring(validx)).ToString(); diff --git a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerInsert.cs b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerInsert.cs index 798c3b594..495719686 100644 --- a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerInsert.cs +++ b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerInsert.cs @@ -74,14 +74,14 @@ namespace FreeSql.SqlServer.Curd if ((_commonUtils as SqlServerUtils).ServerVersion > 10) { var validx = sql.IndexOf(") VALUES"); - if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("VALUES")); + if (validx == -1) throw new ArgumentException(CoreErrorStrings.S_NotFound_Name("VALUES")); sb.Insert(0, sql.Substring(0, validx + 1)); sb.Append(sql.Substring(validx + 1)); } else { var validx = sql.IndexOf(") SELECT "); - if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("SELECT")); + if (validx == -1) throw new ArgumentException(CoreErrorStrings.S_NotFound_Name("SELECT")); sb.Insert(0, sql.Substring(0, validx + 1)); sb.Append(sql.Substring(validx + 1)); } @@ -158,14 +158,14 @@ namespace FreeSql.SqlServer.Curd if ((_commonUtils as SqlServerUtils).ServerVersion > 10) { var validx = sql.IndexOf(") VALUES"); - if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("VALUES")); + if (validx == -1) throw new ArgumentException(CoreErrorStrings.S_NotFound_Name("VALUES")); sb.Insert(0, sql.Substring(0, validx + 1)); sb.Append(sql.Substring(validx + 1)); } else { var validx = sql.IndexOf(") SELECT "); - if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("SELECT")); + if (validx == -1) throw new ArgumentException(CoreErrorStrings.S_NotFound_Name("SELECT")); sb.Insert(0, sql.Substring(0, validx + 1)); sb.Append(sql.Substring(validx + 1)); } diff --git a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerInsertOrUpdate.cs b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerInsertOrUpdate.cs index 37fa76da7..16b50ec57 100644 --- a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerInsertOrUpdate.cs @@ -32,7 +32,7 @@ namespace FreeSql.SqlServer.Curd string getMergeSql(List data) { - if (_tempPrimarys.Any() == false) throw new Exception(CoreStrings.InsertOrUpdate_Must_Primary_Key(_table.CsName)); + if (_tempPrimarys.Any() == false) throw new Exception(CoreErrorStrings.InsertOrUpdate_Must_Primary_Key(_table.CsName)); var tempPrimaryIsIdentity = _tempPrimarys.Any(b => b.Attribute.IsIdentity); var sb = new StringBuilder(); diff --git a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerUpdate.cs b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerUpdate.cs index ae4710db4..56870842a 100644 --- a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerUpdate.cs +++ b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerUpdate.cs @@ -46,7 +46,7 @@ namespace FreeSql.SqlServer.Curd } var sql = sb.ToString(); var validx = sql.IndexOf(" \r\nWHERE "); - if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("WHERE")); + if (validx == -1) throw new ArgumentException(CoreErrorStrings.S_NotFound_Name("WHERE")); sql = sb.Clear().Append(sql.Substring(0, validx)) .Append(sbret) .Append(sql.Substring(validx)).ToString(); @@ -140,7 +140,7 @@ namespace FreeSql.SqlServer.Curd } var sql = sb.ToString(); var validx = sql.IndexOf(" \r\nWHERE "); - if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("WHERE")); + if (validx == -1) throw new ArgumentException(CoreErrorStrings.S_NotFound_Name("WHERE")); sql = sb.Clear().Append(sql.Substring(0, validx)) .Append(sbret) .Append(sql.Substring(validx)).ToString(); diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerAdo.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerAdo.cs index aa1b52380..40353e17c 100644 --- a/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerAdo.cs +++ b/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerAdo.cs @@ -34,14 +34,14 @@ namespace FreeSql.SqlServer if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length); if (!string.IsNullOrEmpty(masterConnectionString)) MasterPool = isAdoPool ? - new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new SqlConnection(masterConnectionString)) as IObjectPool : - new SqlServerConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); + new DbConnectionStringPool(base.DataType, CoreErrorStrings.S_MasterDatabase, () => new SqlConnection(masterConnectionString)) as IObjectPool : + new SqlServerConnectionPool(CoreErrorStrings.S_MasterDatabase, masterConnectionString, null, null); slaveConnectionStrings?.ToList().ForEach(slaveConnectionString => { var slavePool = isAdoPool ? - new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new SqlConnection(slaveConnectionString)) as IObjectPool : - new SqlServerConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); + new DbConnectionStringPool(base.DataType, $"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new SqlConnection(slaveConnectionString)) as IObjectPool : + new SqlServerConnectionPool($"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); SlavePools.Add(slavePool); }); } diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerConnectionPool.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerConnectionPool.cs index dc75463ae..b1d6d5d11 100644 --- a/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerConnectionPool.cs +++ b/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerConnectionPool.cs @@ -49,7 +49,7 @@ namespace FreeSql.SqlServer { internal SqlServerConnectionPool _pool; - public string Name { get; set; } = $"SqlServer SqlConnection {CoreStrings.S_ObjectPool}"; + public string Name { get; set; } = $"SqlServer SqlConnection {CoreErrorStrings.S_ObjectPool}"; public int PoolSize { get; set; } = 100; public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); @@ -126,8 +126,8 @@ namespace FreeSql.SqlServer if (obj.Value == null) { - _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + _pool.SetUnavailable(new Exception(CoreErrorStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false) @@ -156,8 +156,8 @@ namespace FreeSql.SqlServer if (obj.Value == null) { - _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + _pool.SetUnavailable(new Exception(CoreErrorStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerCodeFirst.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerCodeFirst.cs index cecfc3c45..ee528f2c8 100644 --- a/Providers/FreeSql.Provider.SqlServer/SqlServerCodeFirst.cs +++ b/Providers/FreeSql.Provider.SqlServer/SqlServerCodeFirst.cs @@ -153,8 +153,8 @@ ELSE { if (sb.Length > 0) sb.Append("\r\n"); var tb = obj.tableSchema; - if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); - if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); + if (tb == null) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { database, "dbo", tbname[0] }; if (tbname?.Length == 2) tbname = new[] { database, tbname[0], tbname[1] }; diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerExpression.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerExpression.cs index 97c47b8dc..c7ce2a3cf 100644 --- a/Providers/FreeSql.Provider.SqlServer/SqlServerExpression.cs +++ b/Providers/FreeSql.Provider.SqlServer/SqlServerExpression.cs @@ -259,7 +259,7 @@ namespace FreeSql.SqlServer return _common.StringConcat(concatNewArrExp.Expressions.Select(a => getExp(a)).ToArray(), concatNewArrExp.Expressions.Select(a => a.Type).ToArray()); return _common.StringConcat(exp.Arguments.Select(a => getExp(a)).ToArray(), exp.Arguments.Select(a => a.Type).ToArray()); case "Format": - if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); + if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreErrorStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); var expArgs0 = ExpressionLambdaToSql(exp.Arguments[0], tsc); if (exp.Arguments.Count == 1) return expArgs0; var nchar = expArgs0.StartsWith("N'") ? "N" : ""; diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerExtensions.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerExtensions.cs index 27bd0bb63..0548927e3 100644 --- a/Providers/FreeSql.Provider.SqlServer/SqlServerExtensions.cs +++ b/Providers/FreeSql.Provider.SqlServer/SqlServerExtensions.cs @@ -246,7 +246,7 @@ public static partial class FreeSqlSqlServerGlobalExtensions public static void ExecuteSqlBulkCopy(this IInsert that, SqlBulkCopyOptions copyOptions = SqlBulkCopyOptions.Default, int? batchSize = null, int? bulkCopyTimeout = null) where T : class { var insert = that as FreeSql.SqlServer.Curd.SqlServerInsert; - if (insert == null) throw new Exception(CoreStrings.S_Features_Unique("ExecuteSqlBulkCopy", "SqlServer")); + if (insert == null) throw new Exception(CoreErrorStrings.S_Features_Unique("ExecuteSqlBulkCopy", "SqlServer")); if (insert._insertIdentity) copyOptions = copyOptions | SqlBulkCopyOptions.KeepIdentity; var dt = that.ToDataTable(); @@ -313,7 +313,7 @@ public static partial class FreeSqlSqlServerGlobalExtensions } else { - throw new NotImplementedException($"ExecuteSqlBulkCopy {CoreStrings.S_Not_Implemented_FeedBack}"); + throw new NotImplementedException($"ExecuteSqlBulkCopy {CoreErrorStrings.S_Not_Implemented_FeedBack}"); } } finally @@ -340,7 +340,7 @@ public static partial class FreeSqlSqlServerGlobalExtensions async public static Task ExecuteSqlBulkCopyAsync(this IInsert that, SqlBulkCopyOptions copyOptions = SqlBulkCopyOptions.Default, int? batchSize = null, int? bulkCopyTimeout = null, CancellationToken cancellationToken = default) where T : class { var insert = that as FreeSql.SqlServer.Curd.SqlServerInsert; - if (insert == null) throw new Exception(CoreStrings.S_Features_Unique("ExecuteSqlBulkCopyAsync", "SqlServer")); + if (insert == null) throw new Exception(CoreErrorStrings.S_Features_Unique("ExecuteSqlBulkCopyAsync", "SqlServer")); if (insert._insertIdentity) copyOptions = copyOptions | SqlBulkCopyOptions.KeepIdentity; var dt = that.ToDataTable(); @@ -407,7 +407,7 @@ public static partial class FreeSqlSqlServerGlobalExtensions } else { - throw new NotImplementedException($"ExecuteSqlBulkCopyAsync {CoreStrings.S_Not_Implemented_FeedBack}"); + throw new NotImplementedException($"ExecuteSqlBulkCopyAsync {CoreErrorStrings.S_Not_Implemented_FeedBack}"); } } finally diff --git a/Providers/FreeSql.Provider.Sqlite/Curd/SqliteDelete.cs b/Providers/FreeSql.Provider.Sqlite/Curd/SqliteDelete.cs index 8ae3fd62e..2d5c1bc94 100644 --- a/Providers/FreeSql.Provider.Sqlite/Curd/SqliteDelete.cs +++ b/Providers/FreeSql.Provider.Sqlite/Curd/SqliteDelete.cs @@ -16,11 +16,11 @@ namespace FreeSql.Sqlite.Curd { } - public override List ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.Sqlite {CoreStrings.S_Not_Implemented_Feature}"); + public override List ExecuteDeleted() => throw new NotImplementedException($"FreeSql.Provider.Sqlite {CoreErrorStrings.S_Not_Implemented_Feature}"); #if net40 #else - public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Sqlite {CoreStrings.S_Not_Implemented_Feature}"); + public override Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Sqlite {CoreErrorStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.Sqlite/Curd/SqliteInsertOrUpdate.cs b/Providers/FreeSql.Provider.Sqlite/Curd/SqliteInsertOrUpdate.cs index cb0824b40..be7480091 100644 --- a/Providers/FreeSql.Provider.Sqlite/Curd/SqliteInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.Sqlite/Curd/SqliteInsertOrUpdate.cs @@ -56,14 +56,14 @@ namespace FreeSql.Sqlite.Curd insert.InsertIdentity(); if (_doNothing == false) { - if (_updateIgnore.Any()) throw new Exception(CoreStrings.S_InsertOrUpdate_Unable_UpdateColumns); + if (_updateIgnore.Any()) throw new Exception(CoreErrorStrings.S_InsertOrUpdate_Unable_UpdateColumns); sql = insert.ToSql(); if (sql?.StartsWith("INSERT INTO ") == true) sql = $"INSERT OR REPLACE INTO {sql.Substring(12)}"; } else { - if (_tempPrimarys.Any() == false) throw new Exception(CoreStrings.Entity_Must_Primary_Key("fsql.InsertOrUpdate + IfExistsDoNothing + Sqlite ", _table.CsName)); + if (_tempPrimarys.Any() == false) throw new Exception(CoreErrorStrings.Entity_Must_Primary_Key("fsql.InsertOrUpdate + IfExistsDoNothing + Sqlite ", _table.CsName)); sql = insert.ToSql(); if (sql?.StartsWith("INSERT INTO ") == true) sql = $"INSERT OR IGNORE INTO {sql.Substring(12)}"; diff --git a/Providers/FreeSql.Provider.Sqlite/Curd/SqliteUpdate.cs b/Providers/FreeSql.Provider.Sqlite/Curd/SqliteUpdate.cs index 062d30a84..084f6c6be 100644 --- a/Providers/FreeSql.Provider.Sqlite/Curd/SqliteUpdate.cs +++ b/Providers/FreeSql.Provider.Sqlite/Curd/SqliteUpdate.cs @@ -22,7 +22,7 @@ namespace FreeSql.Sqlite.Curd public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); protected override List ExecuteUpdated(IEnumerable columns) => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, columns); - protected override List RawExecuteUpdated(IEnumerable columns) => throw new NotImplementedException($"FreeSql.Provider.Sqlite {CoreStrings.S_Not_Implemented_Feature}"); + protected override List RawExecuteUpdated(IEnumerable columns) => throw new NotImplementedException($"FreeSql.Provider.Sqlite {CoreErrorStrings.S_Not_Implemented_Feature}"); protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) { @@ -66,7 +66,7 @@ namespace FreeSql.Sqlite.Curd public override Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); protected override Task> ExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, columns, cancellationToken); - protected override Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Sqlite {CoreStrings.S_Not_Implemented_Feature}"); + protected override Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Sqlite {CoreErrorStrings.S_Not_Implemented_Feature}"); #endif } } diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs b/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs index 10c37d115..1228901bd 100644 --- a/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs +++ b/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs @@ -35,14 +35,14 @@ namespace FreeSql.Sqlite if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length); if (!string.IsNullOrEmpty(masterConnectionString)) MasterPool = isAdoPool ? - new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => SqliteConnectionPool.CreateConnection(masterConnectionString)) as IObjectPool : - new SqliteConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); + new DbConnectionStringPool(base.DataType, CoreErrorStrings.S_MasterDatabase, () => SqliteConnectionPool.CreateConnection(masterConnectionString)) as IObjectPool : + new SqliteConnectionPool(CoreErrorStrings.S_MasterDatabase, masterConnectionString, null, null); slaveConnectionStrings?.ToList().ForEach(slaveConnectionString => { var slavePool = isAdoPool ? - new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => SqliteConnectionPool.CreateConnection(slaveConnectionString)) as IObjectPool : - new SqliteConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); + new DbConnectionStringPool(base.DataType, $"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => SqliteConnectionPool.CreateConnection(slaveConnectionString)) as IObjectPool : + new SqliteConnectionPool($"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); SlavePools.Add(slavePool); }); } diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteConnectionPool.cs b/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteConnectionPool.cs index d8c0cff86..e4bb5fa38 100644 --- a/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteConnectionPool.cs +++ b/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteConnectionPool.cs @@ -56,7 +56,7 @@ namespace FreeSql.Sqlite { internal SqliteConnectionPool _pool; - public string Name { get; set; } = $"Sqlite SQLiteConnection {CoreStrings.S_ObjectPool}"; + public string Name { get; set; } = $"Sqlite SQLiteConnection {CoreErrorStrings.S_ObjectPool}"; public int PoolSize { get; set; } = 100; public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.Zero; @@ -155,7 +155,7 @@ namespace FreeSql.Sqlite if (_pool.IsAvailable) { if (obj.Value == null) - throw new Exception(CoreStrings.S_ConnectionStringError_CheckProjectConnection(this.Name)); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_CheckProjectConnection(this.Name)); if (obj.Value.State != ConnectionState.Open) obj.Value.OpenAndAttach(Attaches); @@ -170,7 +170,7 @@ namespace FreeSql.Sqlite if (_pool.IsAvailable) { if (obj.Value == null) - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); if (obj.Value.State != ConnectionState.Open) await obj.Value.OpenAndAttachAsync(Attaches); diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteCodeFirst.cs b/Providers/FreeSql.Provider.Sqlite/SqliteCodeFirst.cs index 6545bff5e..3e0ebac79 100644 --- a/Providers/FreeSql.Provider.Sqlite/SqliteCodeFirst.cs +++ b/Providers/FreeSql.Provider.Sqlite/SqliteCodeFirst.cs @@ -79,8 +79,8 @@ namespace FreeSql.Sqlite { if (sb.Length > 0) sb.Append("\r\n"); var tb = obj.tableSchema; - if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); - if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); + if (tb == null) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { "main", tbname[0] }; diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteDbFirst.cs b/Providers/FreeSql.Provider.Sqlite/SqliteDbFirst.cs index 0084a7fc3..b749f8e57 100644 --- a/Providers/FreeSql.Provider.Sqlite/SqliteDbFirst.cs +++ b/Providers/FreeSql.Provider.Sqlite/SqliteDbFirst.cs @@ -102,7 +102,7 @@ namespace FreeSql.Sqlite if (dbfull != null) _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar(255)"]); return DbType.String; } - throw new NotImplementedException(CoreStrings.S_TypeMappingNotImplemented(column.DbTypeTextFull)); + throw new NotImplementedException(CoreErrorStrings.S_TypeMappingNotImplemented(column.DbTypeTextFull)); } static ConcurrentDictionary _dicDbToCs = new ConcurrentDictionary(StringComparer.CurrentCultureIgnoreCase); diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs b/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs index 5c300c78f..13ce403c7 100644 --- a/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs +++ b/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs @@ -250,7 +250,7 @@ namespace FreeSql.Sqlite return _common.StringConcat(concatNewArrExp.Expressions.Select(a => getExp(a)).ToArray(), null); return _common.StringConcat(exp.Arguments.Select(a => getExp(a)).ToArray(), null); case "Format": - if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); + if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreErrorStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ? (exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0); //3个 {} 时,Arguments 解析出来是分开的 diff --git a/Providers/FreeSql.Provider.Xugu/Curd/XuguInsertOrUpdate.cs b/Providers/FreeSql.Provider.Xugu/Curd/XuguInsertOrUpdate.cs index 8186d6455..2114118ce 100644 --- a/Providers/FreeSql.Provider.Xugu/Curd/XuguInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.Xugu/Curd/XuguInsertOrUpdate.cs @@ -38,7 +38,7 @@ namespace FreeSql.Xugu.Curd string getMergeSql(List data) { - if (_tempPrimarys.Any() == false) throw new Exception(CoreStrings.InsertOrUpdate_Must_Primary_Key(_table.CsName)); + if (_tempPrimarys.Any() == false) throw new Exception(CoreErrorStrings.InsertOrUpdate_Must_Primary_Key(_table.CsName)); var tempPrimaryIsIdentity = _tempPrimarys.Any(b => b.Attribute.IsIdentity); var sb = new StringBuilder().Append("MERGE INTO ").Append(_commonUtils.QuoteSqlName(TableRuleInvoke())).Append(" t1 \r\nUSING ("); diff --git a/Providers/FreeSql.Provider.Xugu/XuguAdo/XuguAdo.cs b/Providers/FreeSql.Provider.Xugu/XuguAdo/XuguAdo.cs index e780875d0..7a7a6be55 100644 --- a/Providers/FreeSql.Provider.Xugu/XuguAdo/XuguAdo.cs +++ b/Providers/FreeSql.Provider.Xugu/XuguAdo/XuguAdo.cs @@ -30,14 +30,14 @@ namespace FreeSql.Xugu if (isAdoPool) masterConnectionString = masterConnectionString.Substring("AdoConnectionPool,".Length); if (!string.IsNullOrEmpty(masterConnectionString)) MasterPool = isAdoPool ? - new DbConnectionStringPool(base.DataType, CoreStrings.S_MasterDatabase, () => new XGConnection(masterConnectionString)) as IObjectPool : - new XuguConnectionPool(CoreStrings.S_MasterDatabase, masterConnectionString, null, null); + new DbConnectionStringPool(base.DataType, CoreErrorStrings.S_MasterDatabase, () => new XGConnection(masterConnectionString)) as IObjectPool : + new XuguConnectionPool(CoreErrorStrings.S_MasterDatabase, masterConnectionString, null, null); slaveConnectionStrings?.ToList().ForEach(slaveConnectionString => { var slavePool = isAdoPool ? - new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new XGConnection(slaveConnectionString)) as IObjectPool : - new XuguConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); + new DbConnectionStringPool(base.DataType, $"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new XGConnection(slaveConnectionString)) as IObjectPool : + new XuguConnectionPool($"{CoreErrorStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables)); SlavePools.Add(slavePool); }); } diff --git a/Providers/FreeSql.Provider.Xugu/XuguAdo/XuguConnectionPool.cs b/Providers/FreeSql.Provider.Xugu/XuguAdo/XuguConnectionPool.cs index e5d4ec117..d584aa8e1 100644 --- a/Providers/FreeSql.Provider.Xugu/XuguAdo/XuguConnectionPool.cs +++ b/Providers/FreeSql.Provider.Xugu/XuguAdo/XuguConnectionPool.cs @@ -43,7 +43,7 @@ namespace FreeSql.Xugu { internal XuguConnectionPool _pool; - public string Name { get; set; } = $"Xugu XuguConnection {CoreStrings.S_ObjectPool}"; + public string Name { get; set; } = $"Xugu XuguConnection {CoreErrorStrings.S_ObjectPool}"; public int PoolSize { get; set; } = 50; public TimeSpan SyncGetTimeout { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(20); @@ -120,8 +120,8 @@ namespace FreeSql.Xugu { if (obj.Value == null) { - _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + _pool.SetUnavailable(new Exception(CoreErrorStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false) @@ -150,8 +150,8 @@ namespace FreeSql.Xugu { if (obj.Value == null) { - _pool.SetUnavailable(new Exception(CoreStrings.S_ConnectionStringError), obj.LastGetTimeCopy); - throw new Exception(CoreStrings.S_ConnectionStringError_Check(this.Name)); + _pool.SetUnavailable(new Exception(CoreErrorStrings.S_ConnectionStringError), obj.LastGetTimeCopy); + throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) diff --git a/Providers/FreeSql.Provider.Xugu/XuguCodeFirst.cs b/Providers/FreeSql.Provider.Xugu/XuguCodeFirst.cs index 1182b4933..3bed206c0 100644 --- a/Providers/FreeSql.Provider.Xugu/XuguCodeFirst.cs +++ b/Providers/FreeSql.Provider.Xugu/XuguCodeFirst.cs @@ -138,8 +138,8 @@ namespace FreeSql.Xugu { if (sb.Length > 0) sb.Append("\r\n"); var tb = obj.tableSchema; - if (tb == null) throw new Exception(CoreStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); - if (tb.Columns.Any() == false) throw new Exception(CoreStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); + if (tb == null) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable(obj.tableSchema.Type.FullName)); + if (tb.Columns.Any() == false) throw new Exception(CoreErrorStrings.S_Type_IsNot_Migrable_0Attributes(obj.tableSchema.Type.FullName)); var tbname = _commonUtils.SplitTableName(tb.DbName); if (tbname?.Length == 1) tbname = new[] { DefaultSchema, tbname[0] }; diff --git a/Providers/FreeSql.Provider.Xugu/XuguExpression.cs b/Providers/FreeSql.Provider.Xugu/XuguExpression.cs index ed2a4b12d..71773e541 100644 --- a/Providers/FreeSql.Provider.Xugu/XuguExpression.cs +++ b/Providers/FreeSql.Provider.Xugu/XuguExpression.cs @@ -294,7 +294,7 @@ namespace FreeSql.Xugu case "Concat": return _common.StringConcat(exp.Arguments.Select(a => getExp(a)).ToArray(), null); case "Format": - if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); + if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception(CoreErrorStrings.Not_Implemented_Expression_ParameterUseConstant(exp,exp.Arguments[0])); var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ? (exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0); //3个 {} 时,Arguments 解析出来是分开的 From 1968be0345e1e95d6f01b15aed68a1b621852113 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Fri, 8 Nov 2024 15:01:16 +0800 Subject: [PATCH 17/38] =?UTF-8?q?-=20=E6=B7=BB=E5=8A=A0=20FromQuery=20?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E7=94=B15=E4=B8=AA=E5=8A=A0=E5=88=B016?= =?UTF-8?q?=E4=B8=AA=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql/FreeSql.xml | 521 ++++++++---------- FreeSql/Interface/Curd/ISelect/ISelect1.cs | 14 +- .../SelectProvider/Select1Provider.cs | 57 +- 3 files changed, 291 insertions(+), 301 deletions(-) diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 949513256..325a24319 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -1087,93 +1087,6 @@ - - - 动态创建实体类型 - - - - - 配置Class - - 类名 - 类标记的特性[Table(Name = "xxx")] [Index(xxxx)] - - - - - 获取类型构建器,可作为要构建的Type来引用 - - - - - 配置属性 - - 属性名称 - 属性类型 - 属性标记的特性-支持多个 - - - - - 配置属性 - - 属性名称 - 属性类型 - 该属性是否重写父类属性 - 属性标记的特性-支持多个 - - - - - 配置属性 - - 属性名称 - 属性类型 - 该属性是否重写父类属性 - 属性默认值 - 属性标记的特性-支持多个 - - - - - 配置父类 - - 父类类型 - - - - - Override属性 - - - - - - Emit动态创建出Class - Type - - - - - - Emit动态创建出Class - Type,不附带获取TableInfo - - - - - - 首字母小写 - - - - - - - 首字母大写 - - - - 获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值时,返回 "" @@ -3376,13 +3289,6 @@ - - - 执行SQL语句,返回更新后的记录 - 注意:此方法只有 Postgresql/SqlServer 有效果 - - - 指定事务对象 @@ -3727,177 +3633,6 @@ - - - 测试数据库是否连接正确,本方法执行如下命令: - MySql/SqlServer/PostgreSQL/达梦/人大金仓/神通: SELECT 1 - Oracle: SELECT 1 FROM dual - - 命令超时设置(秒) - - true: 成功, false: 失败 - - - - 查询,若使用读写分离,查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】 - - - - - - - - - - 查询,ExecuteReaderAsync(dr => {}, "select * from user where age > @age", new { age = 25 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - - - - - - - - 查询 - - - - - - - - - 查询,ExecuteArrayAsync("select * from user where age > @age", new { age = 25 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - - - - - - - - 查询 - - - - - - - - - 查询,ExecuteDataSetAsync("select * from user where age > @age; select 2", new { age = 25 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - - - - - - - - 查询 - - - - - - - - - 查询,ExecuteDataTableAsync("select * from user where age > @age", new { age = 25 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - - - - - - - - 在【主库】执行 - - - - - - - - - 在【主库】执行,ExecuteNonQueryAsync("delete from user where age > @age", new { age = 25 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - - - - - - - - 在【主库】执行 - - - - - - - - - 在【主库】执行,ExecuteScalarAsync("select 1 from user where age > @age", new { age = 25 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - - - - - - - - 执行SQL返回对象集合,QueryAsync<User>("select * from user where age > @age", new SqlParameter { ParameterName = "age", Value = 25 }) - - - - - - - - - - - 执行SQL返回对象集合,QueryAsync<User>("select * from user where age > @age", new { age = 25 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - - - - - - - - - 执行SQL返回对象集合,Query<User>("select * from user where age > @age; select * from address", new SqlParameter { ParameterName = "age", Value = 25 }) - - - - - - - - - - - - 执行SQL返回对象集合,Query<User, Address>("select * from user where age > @age; select * from address", new { age = 25 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - - - - - - - 可自定义解析表达式 @@ -4897,12 +4632,6 @@ 超时 - - - 获取资源 - - - 使用完毕后,归还资源 @@ -4978,12 +4707,6 @@ 资源对象 - - - 从对象池获取对象成功的时候触发,通过该方法统计或初始化对象 - - 资源对象 - 归还对象给对象池的时候触发 @@ -5897,28 +5620,6 @@ 对象池 - - - 动态构建Class Type - - - - - - 根据字典,创建 table 对应的实体对象 - - - - - - - - 根据实体对象,创建 table 对应的字典 - - - - - C#: that >= between && that <= and @@ -6455,3 +6156,225 @@ + + + + + 使用 and 拼接两个 lambda 表达式 + + + true 时生效 + + + + + + 使用 or 拼接两个 lambda 表达式 + + + + + + 使用 or 拼接两个 lambda 表达式 + + + true 时生效 + + + + + + 将 lambda 表达式取反 + + + true 时生效 + + + + + 使用 and 拼接两个 lambda 表达式 + + + + + + 使用 and 拼接两个 lambda 表达式 + + + true 时生效 + + + + + + 使用 or 拼接两个 lambda 表达式 + + + + + + 使用 or 拼接两个 lambda 表达式 + + + true 时生效 + + + + + + 将 lambda 表达式取反 + + + true 时生效 + + + + + 生成类似Mongodb的ObjectId有序、不重复Guid + + + + + + 插入数据 + + + + + + + 插入数据,传入实体 + + + + + + + + 插入数据,传入实体数组 + + + + + + + + 插入数据,传入实体集合 + + + + + + + + 插入数据,传入实体集合 + + + + + + + + 插入或更新数据,此功能依赖数据库特性(低版本可能不支持),参考如下: + MySql 5.6+: on duplicate key update + PostgreSQL 9.4+: on conflict do update + SqlServer 2008+: merge into + Oracle 11+: merge into + Sqlite: replace into + DuckDB: on conflict do update + 达梦: merge into + 人大金仓:on conflict do update + 神通:merge into + MsAccess:不支持 + 注意区别:FreeSql.Repository 仓储也有 InsertOrUpdate 方法(不依赖数据库特性) + + + + + + + 修改数据 + + + + + + + 修改数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} + + + 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 + + + + + 查询数据 + + + + + + + 查询数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} + + + 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 + + + + + 删除数据 + + + + + + + 删除数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} + + + 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 + + + + + 开启事务(不支持异步) + v1.5.0 关闭了线程事务超时自动提交的机制 + + 事务体 () => {} + + + + 开启事务(不支持异步) + v1.5.0 关闭了线程事务超时自动提交的机制 + + + 事务体 () => {} + + + + 数据库访问对象 + + + + + 所有拦截方法都在这里 + + + + + CodeFirst 模式开发相关方法 + + + + + DbFirst 模式开发相关方法 + + + + + 全局过滤设置,可默认附加为 Select/Update/Delete 条件 + + + + diff --git a/FreeSql/Interface/Curd/ISelect/ISelect1.cs b/FreeSql/Interface/Curd/ISelect/ISelect1.cs index 60adfdb8d..cf8e38a2f 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect1.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect1.cs @@ -196,8 +196,20 @@ namespace FreeSql ISelect FromQuery(ISelect select2, ISelect select3) where T2 : class where T3 : class; ISelect FromQuery(ISelect select2, ISelect select3, ISelect select4) where T2 : class where T3 : class where T4 : class; ISelect FromQuery(ISelect select2, ISelect select3, ISelect select4, ISelect select5) where T2 : class where T3 : class where T4 : class where T5 : class; + ISelect FromQuery(ISelect select2, ISelect select3, ISelect select4, ISelect select5, ISelect select6) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class; + ISelect FromQuery(ISelect select2, ISelect select3, ISelect select4, ISelect select5, ISelect select6, ISelect select7) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class; + ISelect FromQuery(ISelect select2, ISelect select3, ISelect select4, ISelect select5, ISelect select6, ISelect select7, ISelect select8) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class; + ISelect FromQuery(ISelect select2, ISelect select3, ISelect select4, ISelect select5, ISelect select6, ISelect select7, ISelect select8, ISelect select9) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class; + ISelect FromQuery(ISelect select2, ISelect select3, ISelect select4, ISelect select5, ISelect select6, ISelect select7, ISelect select8, ISelect select9, ISelect select10) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class; + + ISelect FromQuery(ISelect select2, ISelect select3, ISelect select4, ISelect select5, ISelect select6, ISelect select7, ISelect select8, ISelect select9, ISelect select10, ISelect select11) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class; + ISelect FromQuery(ISelect select2, ISelect select3, ISelect select4, ISelect select5, ISelect select6, ISelect select7, ISelect select8, ISelect select9, ISelect select10, ISelect select11, ISelect select12) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class; + ISelect FromQuery(ISelect select2, ISelect select3, ISelect select4, ISelect select5, ISelect select6, ISelect select7, ISelect select8, ISelect select9, ISelect select10, ISelect select11, ISelect select12, ISelect select13) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class; + ISelect FromQuery(ISelect select2, ISelect select3, ISelect select4, ISelect select5, ISelect select6, ISelect select7, ISelect select8, ISelect select9, ISelect select10, ISelect select11, ISelect select12, ISelect select13, ISelect select14) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class; + ISelect FromQuery(ISelect select2, ISelect select3, ISelect select4, ISelect select5, ISelect select6, ISelect select7, ISelect select8, ISelect select9, ISelect select10, ISelect select11, ISelect select12, ISelect select13, ISelect select14, ISelect select15) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class where T15 : class; + ISelect FromQuery(ISelect select2, ISelect select3, ISelect select4, ISelect select5, ISelect select6, ISelect select7, ISelect select8, ISelect select9, ISelect select10, ISelect select11, ISelect select12, ISelect select13, ISelect select14, ISelect select15, ISelect select16) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class where T15 : class where T16 : class; + ISelect UnionAll(params ISelect[] querys); - /// /// 查询条件,Where(a => a.Id > 10),支持导航对象查询,Where(a => a.Author.Email == "2881099@qq.com") /// diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs index a220402a9..726701702 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs @@ -210,7 +210,62 @@ namespace FreeSql.Internal.CommonProvider var ret = From(); return FromQueryMulti(ret, new[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5) }, new[] { select2 as Select0Provider, select3 as Select0Provider, select4 as Select0Provider, select5 as Select0Provider }); } - + public ISelect FromQuery(ISelect select2, ISelect select3, ISelect select4, ISelect select5, ISelect select6) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class + { + var ret = From(); + return FromQueryMulti(ret, new[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6) }, new[] { select2 as Select0Provider, select3 as Select0Provider, select4 as Select0Provider, select5 as Select0Provider, select6 as Select0Provider }); + } + public ISelect FromQuery(ISelect select2, ISelect select3, ISelect select4, ISelect select5, ISelect select6, ISelect select7) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class + { + var ret = From(); + return FromQueryMulti(ret, new[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7) }, new[] { select2 as Select0Provider, select3 as Select0Provider, select4 as Select0Provider, select5 as Select0Provider, select6 as Select0Provider, select7 as Select0Provider }); + } + public ISelect FromQuery(ISelect select2, ISelect select3, ISelect select4, ISelect select5, ISelect select6, ISelect select7, ISelect select8) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class + { + var ret = From(); + return FromQueryMulti(ret, new[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8) }, new[] { select2 as Select0Provider, select3 as Select0Provider, select4 as Select0Provider, select5 as Select0Provider, select6 as Select0Provider, select7 as Select0Provider, select8 as Select0Provider }); + } + public ISelect FromQuery(ISelect select2, ISelect select3, ISelect select4, ISelect select5, ISelect select6, ISelect select7, ISelect select8, ISelect select9) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class + { + var ret = From(); + return FromQueryMulti(ret, new[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9) }, new[] { select2 as Select0Provider, select3 as Select0Provider, select4 as Select0Provider, select5 as Select0Provider, select6 as Select0Provider, select7 as Select0Provider, select8 as Select0Provider, select9 as Select0Provider }); + } + public ISelect FromQuery(ISelect select2, ISelect select3, ISelect select4, ISelect select5, ISelect select6, ISelect select7, ISelect select8, ISelect select9, ISelect select10) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class + { + var ret = From(); + return FromQueryMulti(ret, new[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10) }, new[] { select2 as Select0Provider, select3 as Select0Provider, select4 as Select0Provider, select5 as Select0Provider, select6 as Select0Provider, select7 as Select0Provider, select8 as Select0Provider, select9 as Select0Provider, select10 as Select0Provider }); + } + public ISelect FromQuery(ISelect select2, ISelect select3, ISelect select4, ISelect select5, ISelect select6, ISelect select7, ISelect select8, ISelect select9, ISelect select10, ISelect select11) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class + { + var ret = From(); + return FromQueryMulti(ret, new[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11) }, new[] { select2 as Select0Provider, select3 as Select0Provider, select4 as Select0Provider, select5 as Select0Provider, select6 as Select0Provider, select7 as Select0Provider, select8 as Select0Provider, select9 as Select0Provider, select10 as Select0Provider, select11 as Select0Provider }); + } + public ISelect FromQuery(ISelect select2, ISelect select3, ISelect select4, ISelect select5, ISelect select6, ISelect select7, ISelect select8, ISelect select9, ISelect select10, ISelect select11, ISelect select12) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class + { + var ret = From(); + return FromQueryMulti(ret, new[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11), typeof(T12) }, new[] { select2 as Select0Provider, select3 as Select0Provider, select4 as Select0Provider, select5 as Select0Provider, select6 as Select0Provider, select7 as Select0Provider, select8 as Select0Provider, select9 as Select0Provider, select10 as Select0Provider, select11 as Select0Provider, select12 as Select0Provider }); + } + public ISelect FromQuery(ISelect select2, ISelect select3, ISelect select4, ISelect select5, ISelect select6, ISelect select7, ISelect select8, ISelect select9, ISelect select10, ISelect select11, ISelect select12, ISelect select13) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class + { + var ret = From(); + return FromQueryMulti(ret, new[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11), typeof(T12), typeof(T13) }, new[] { select2 as Select0Provider, select3 as Select0Provider, select4 as Select0Provider, select5 as Select0Provider, select6 as Select0Provider, select7 as Select0Provider, select8 as Select0Provider, select9 as Select0Provider, select10 as Select0Provider, select11 as Select0Provider, select12 as Select0Provider, select13 as Select0Provider }); + } + public ISelect FromQuery(ISelect select2, ISelect select3, ISelect select4, ISelect select5, ISelect select6, ISelect select7, ISelect select8, ISelect select9, ISelect select10, ISelect select11, ISelect select12, ISelect select13, ISelect select14) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class + { + var ret = From(); + return FromQueryMulti(ret, new[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11), typeof(T12), typeof(T13), typeof(T14) }, new[] { select2 as Select0Provider, select3 as Select0Provider, select4 as Select0Provider, select5 as Select0Provider, select6 as Select0Provider, select7 as Select0Provider, select8 as Select0Provider, select9 as Select0Provider, select10 as Select0Provider, select11 as Select0Provider, select12 as Select0Provider, select13 as Select0Provider, select14 as Select0Provider }); + } + public ISelect FromQuery(ISelect select2, ISelect select3, ISelect select4, ISelect select5, ISelect select6, ISelect select7, ISelect select8, ISelect select9, ISelect select10, ISelect select11, ISelect select12, ISelect select13, ISelect select14, ISelect select15) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class where T15 : class + { + var ret = From(); + return FromQueryMulti(ret, new[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11), typeof(T12), typeof(T13), typeof(T14), typeof(T15) }, new[] { select2 as Select0Provider, select3 as Select0Provider, select4 as Select0Provider, select5 as Select0Provider, select6 as Select0Provider, select7 as Select0Provider, select8 as Select0Provider, select9 as Select0Provider, select10 as Select0Provider, select11 as Select0Provider, select12 as Select0Provider, select13 as Select0Provider, select14 as Select0Provider, select15 as Select0Provider }); + } + public ISelect FromQuery(ISelect select2, ISelect select3, ISelect select4, ISelect select5, ISelect select6, ISelect select7, ISelect select8, ISelect select9, ISelect select10, ISelect select11, ISelect select12, ISelect select13, ISelect select14, ISelect select15, ISelect select16) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class where T15 : class where T16 : class + { + var ret = From(); + return FromQueryMulti(ret, new[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11), typeof(T12), typeof(T13), typeof(T14), typeof(T15), typeof(T16) }, new[] { select2 as Select0Provider, select3 as Select0Provider, select4 as Select0Provider, select5 as Select0Provider, select6 as Select0Provider, select7 as Select0Provider, select8 as Select0Provider, select9 as Select0Provider, select10 as Select0Provider, select11 as Select0Provider, select12 as Select0Provider, select13 as Select0Provider, select14 as Select0Provider, select15 as Select0Provider, select16 as Select0Provider }); + } + public ISelect UnionAll(params ISelect[] querys) { querys = querys?.Where(q => q != null).ToArray(); From 2ae799aba2c307baec70cf6967f8a623e92467ad Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Fri, 8 Nov 2024 15:19:33 +0800 Subject: [PATCH 18/38] =?UTF-8?q?-=20=E4=BC=98=E5=8C=96=20ISelect.?= =?UTF-8?q?WithMemory=20=E6=94=AF=E6=8C=81=E8=BD=AC=E6=88=90=E5=8C=BF?= =?UTF-8?q?=E5=90=8D=E7=B1=BB=E5=9E=8B=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql/FreeSql.xml | 523 ++++++++++-------- FreeSql/Interface/Curd/ISelect/ISelect1.cs | 2 +- .../SelectProvider/Select1Provider.cs | 24 +- 3 files changed, 322 insertions(+), 227 deletions(-) diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 325a24319..442d3c3e2 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -1087,6 +1087,93 @@ + + + 动态创建实体类型 + + + + + 配置Class + + 类名 + 类标记的特性[Table(Name = "xxx")] [Index(xxxx)] + + + + + 获取类型构建器,可作为要构建的Type来引用 + + + + + 配置属性 + + 属性名称 + 属性类型 + 属性标记的特性-支持多个 + + + + + 配置属性 + + 属性名称 + 属性类型 + 该属性是否重写父类属性 + 属性标记的特性-支持多个 + + + + + 配置属性 + + 属性名称 + 属性类型 + 该属性是否重写父类属性 + 属性默认值 + 属性标记的特性-支持多个 + + + + + 配置父类 + + 父类类型 + + + + + Override属性 + + + + + + Emit动态创建出Class - Type + + + + + + Emit动态创建出Class - Type,不附带获取TableInfo + + + + + + 首字母小写 + + + + + + + 首字母大写 + + + + 获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值时,返回 "" @@ -2754,7 +2841,7 @@ 参数 - + 实现 select .. from ( select .. UNION ALL select .. ) a 这样的功能(基于内存数据) @@ -3289,6 +3376,13 @@ + + + 执行SQL语句,返回更新后的记录 + 注意:此方法只有 Postgresql/SqlServer 有效果 + + + 指定事务对象 @@ -3633,6 +3727,177 @@ + + + 测试数据库是否连接正确,本方法执行如下命令: + MySql/SqlServer/PostgreSQL/达梦/人大金仓/神通: SELECT 1 + Oracle: SELECT 1 FROM dual + + 命令超时设置(秒) + + true: 成功, false: 失败 + + + + 查询,若使用读写分离,查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】 + + + + + + + + + + 查询,ExecuteReaderAsync(dr => {}, "select * from user where age > @age", new { age = 25 }) + 提示:parms 参数还可以传 Dictionary<string, object> + + + + + + + + + 查询 + + + + + + + + + 查询,ExecuteArrayAsync("select * from user where age > @age", new { age = 25 }) + 提示:parms 参数还可以传 Dictionary<string, object> + + + + + + + + + 查询 + + + + + + + + + 查询,ExecuteDataSetAsync("select * from user where age > @age; select 2", new { age = 25 }) + 提示:parms 参数还可以传 Dictionary<string, object> + + + + + + + + + 查询 + + + + + + + + + 查询,ExecuteDataTableAsync("select * from user where age > @age", new { age = 25 }) + 提示:parms 参数还可以传 Dictionary<string, object> + + + + + + + + + 在【主库】执行 + + + + + + + + + 在【主库】执行,ExecuteNonQueryAsync("delete from user where age > @age", new { age = 25 }) + 提示:parms 参数还可以传 Dictionary<string, object> + + + + + + + + + 在【主库】执行 + + + + + + + + + 在【主库】执行,ExecuteScalarAsync("select 1 from user where age > @age", new { age = 25 }) + 提示:parms 参数还可以传 Dictionary<string, object> + + + + + + + + + 执行SQL返回对象集合,QueryAsync<User>("select * from user where age > @age", new SqlParameter { ParameterName = "age", Value = 25 }) + + + + + + + + + + + 执行SQL返回对象集合,QueryAsync<User>("select * from user where age > @age", new { age = 25 }) + 提示:parms 参数还可以传 Dictionary<string, object> + + + + + + + + + + 执行SQL返回对象集合,Query<User>("select * from user where age > @age; select * from address", new SqlParameter { ParameterName = "age", Value = 25 }) + + + + + + + + + + + + 执行SQL返回对象集合,Query<User, Address>("select * from user where age > @age; select * from address", new { age = 25 }) + 提示:parms 参数还可以传 Dictionary<string, object> + + + + + + + + 可自定义解析表达式 @@ -4632,6 +4897,12 @@ 超时 + + + 获取资源 + + + 使用完毕后,归还资源 @@ -4707,6 +4978,12 @@ 资源对象 + + + 从对象池获取对象成功的时候触发,通过该方法统计或初始化对象 + + 资源对象 + 归还对象给对象池的时候触发 @@ -5620,6 +5897,28 @@ 对象池 + + + 动态构建Class Type + + + + + + 根据字典,创建 table 对应的实体对象 + + + + + + + + 根据实体对象,创建 table 对应的字典 + + + + + C#: that >= between && that <= and @@ -6156,225 +6455,3 @@ - - - - - 使用 and 拼接两个 lambda 表达式 - - - true 时生效 - - - - - - 使用 or 拼接两个 lambda 表达式 - - - - - - 使用 or 拼接两个 lambda 表达式 - - - true 时生效 - - - - - - 将 lambda 表达式取反 - - - true 时生效 - - - - - 使用 and 拼接两个 lambda 表达式 - - - - - - 使用 and 拼接两个 lambda 表达式 - - - true 时生效 - - - - - - 使用 or 拼接两个 lambda 表达式 - - - - - - 使用 or 拼接两个 lambda 表达式 - - - true 时生效 - - - - - - 将 lambda 表达式取反 - - - true 时生效 - - - - - 生成类似Mongodb的ObjectId有序、不重复Guid - - - - - - 插入数据 - - - - - - - 插入数据,传入实体 - - - - - - - - 插入数据,传入实体数组 - - - - - - - - 插入数据,传入实体集合 - - - - - - - - 插入数据,传入实体集合 - - - - - - - - 插入或更新数据,此功能依赖数据库特性(低版本可能不支持),参考如下: - MySql 5.6+: on duplicate key update - PostgreSQL 9.4+: on conflict do update - SqlServer 2008+: merge into - Oracle 11+: merge into - Sqlite: replace into - DuckDB: on conflict do update - 达梦: merge into - 人大金仓:on conflict do update - 神通:merge into - MsAccess:不支持 - 注意区别:FreeSql.Repository 仓储也有 InsertOrUpdate 方法(不依赖数据库特性) - - - - - - - 修改数据 - - - - - - - 修改数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} - - - 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 - - - - - 查询数据 - - - - - - - 查询数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} - - - 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 - - - - - 删除数据 - - - - - - - 删除数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} - - - 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 - - - - - 开启事务(不支持异步) - v1.5.0 关闭了线程事务超时自动提交的机制 - - 事务体 () => {} - - - - 开启事务(不支持异步) - v1.5.0 关闭了线程事务超时自动提交的机制 - - - 事务体 () => {} - - - - 数据库访问对象 - - - - - 所有拦截方法都在这里 - - - - - CodeFirst 模式开发相关方法 - - - - - DbFirst 模式开发相关方法 - - - - - 全局过滤设置,可默认附加为 Select/Update/Delete 条件 - - - - diff --git a/FreeSql/Interface/Curd/ISelect/ISelect1.cs b/FreeSql/Interface/Curd/ISelect/ISelect1.cs index cf8e38a2f..0ff17fb3f 100644 --- a/FreeSql/Interface/Curd/ISelect/ISelect1.cs +++ b/FreeSql/Interface/Curd/ISelect/ISelect1.cs @@ -392,7 +392,7 @@ namespace FreeSql /// /// 内存数据 /// - ISelect WithMemory(IEnumerable source); + ISelect WithMemory(IEnumerable source); /// /// 嵌套查询 select * from ( select ... from table ... ) a diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs index 726701702..453ddf5bb 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs @@ -580,15 +580,33 @@ namespace FreeSql.Internal.CommonProvider if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject(sql, parms)); return this; } - public ISelect WithMemory(IEnumerable source) + public ISelect WithMemory(IEnumerable source) { var list = source?.Select(a => (object)a).ToList(); if (list.Any() != true) throw new Exception(CoreErrorStrings.Cannot_Be_NULL_Name(nameof(source))); - var sb = new StringBuilder(); + var sb = new StringBuilder(); (_orm.InsertOrUpdate().AsType(_tables[0].Table.Type) as InsertOrUpdateProvider) .WriteSourceSelectUnionAll(list, sb, _params, true); + try + { + if (typeof(T1) != typeof(TDto)) + { + if (_orm.CodeFirst.IsAutoSyncStructure) + (_orm.CodeFirst as CodeFirstProvider)._dicSycedTryAdd(typeof(TDto)); //._dicSyced.TryAdd(typeof(TReturn), true); + var ret = (_orm as BaseDbProvider).CreateSelectProvider(null) as Select1Provider; + ret._commandTimeout = _commandTimeout; + ret._connection = _connection; + ret._transaction = _transaction; + ret._whereGlobalFilter = new List(_whereGlobalFilter.ToArray()); + ret._cancel = _cancel; + ret._params.AddRange(_params); + if (ret._tables[0].Table == null) ret._tables[0].Table = TableInfo.GetDefaultTable(typeof(TDto)); - try { return WithSql(sb.ToString()); } + ret.WithSql(sb.ToString()); + return ret; + } + return WithSql(sb.ToString()) as ISelect; + } finally { sb.Clear(); } } From 1f21dd72d9f91820ab456a5fb92d1477e107f0d1 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Fri, 8 Nov 2024 17:40:42 +0800 Subject: [PATCH 19/38] =?UTF-8?q?-=20=E4=BC=98=E5=8C=96=20ISelect.?= =?UTF-8?q?WithMemory=20=E5=AF=B9=E5=8C=BF=E5=90=8D=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E7=9A=84=E6=94=AF=E6=8C=81=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DbContext/DbContextErrorStrings.cs | 8 +- FreeSql.DbContext/FreeSql.DbContext.xml | 17 - FreeSql/FreeSql.xml | 301 +----------------- FreeSql/Internal/CommonExpression.cs | 2 + .../SelectProvider/Select1Provider.cs | 76 ++++- .../Internal/Exception/CoreErrorStrings.cs | 80 ++--- 6 files changed, 106 insertions(+), 378 deletions(-) diff --git a/FreeSql.DbContext/DbContext/DbContextErrorStrings.cs b/FreeSql.DbContext/DbContext/DbContextErrorStrings.cs index e989c07c6..681b22d29 100644 --- a/FreeSql.DbContext/DbContext/DbContextErrorStrings.cs +++ b/FreeSql.DbContext/DbContext/DbContextErrorStrings.cs @@ -110,7 +110,7 @@ namespace FreeSql /// public static string DbSetAsType_NotSupport_Object => Language == "cn" ? @"DbSet.AsType 参数错误,请传入正确的实体类型" : - @"FreeSql: DbSet. AsType parameter error, please pass in the correct entity type"; + @"FreeSql: DbSet.AsType parameter error, please pass in the correct entity type"; /// /// 实体类型 {EntityTypeName} 无法转换为 {name},无法使用该方法 /// @@ -134,7 +134,7 @@ namespace FreeSql /// public static string FailedSetFilter_NotBelongIRpository => Language == "cn" ? @"FreeSql.Repository 设置过滤器失败,原因是对象不属于 IRepository" : - @"FreeSql: FreeSql. Repository failed to set filter because object does not belong to IRepository"; + @"FreeSql: FreeSql.Repository failed to set filter because object does not belong to IRepository"; /// /// 不可比较,实体没有主键:{entityString} /// @@ -158,7 +158,7 @@ namespace FreeSql /// public static string ISelectAsType_ParameterError => Language == "cn" ? @"ISelect.AsType 参数不支持指定为 object" : - @"FreeSql: ISelect. AsType parameter does not support specifying as object"; + @"FreeSql: ISelect.AsType parameter does not support specifying as object"; /// /// {tableTypeFullName} 不存在属性 {propertyName} /// @@ -170,7 +170,7 @@ namespace FreeSql /// public static string NotFoundMethod_StatesRemoveByObjects => Language == "cn" ? @"找不到方法 DbSet<>.StatesRemoveByObjects" : - @"FreeSql: Method DbSet<> not found. StatesRemoveByObjects"; + @"FreeSql: Method not found DbSet<>.StatesRemoveByObjects"; /// /// 参数 data 类型错误 {entityTypeFullName} /// diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index c941a15d9..08ab7dc4c 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -712,15 +712,6 @@ - - - 根据Assembly扫描所有继承IEntityTypeConfiguration<T>的配置类 - - - - - - 创建普通数据上下文档对象 @@ -758,13 +749,5 @@ - - - 批量注入 Repository,可以参考代码自行调整 - - - - - diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 442d3c3e2..2a6e277ba 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -1087,93 +1087,6 @@ - - - 动态创建实体类型 - - - - - 配置Class - - 类名 - 类标记的特性[Table(Name = "xxx")] [Index(xxxx)] - - - - - 获取类型构建器,可作为要构建的Type来引用 - - - - - 配置属性 - - 属性名称 - 属性类型 - 属性标记的特性-支持多个 - - - - - 配置属性 - - 属性名称 - 属性类型 - 该属性是否重写父类属性 - 属性标记的特性-支持多个 - - - - - 配置属性 - - 属性名称 - 属性类型 - 该属性是否重写父类属性 - 属性默认值 - 属性标记的特性-支持多个 - - - - - 配置父类 - - 父类类型 - - - - - Override属性 - - - - - - Emit动态创建出Class - Type - - - - - - Emit动态创建出Class - Type,不附带获取TableInfo - - - - - - 首字母小写 - - - - - - - 首字母大写 - - - - 获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值时,返回 "" @@ -3376,13 +3289,6 @@ - - - 执行SQL语句,返回更新后的记录 - 注意:此方法只有 Postgresql/SqlServer 有效果 - - - 指定事务对象 @@ -3727,177 +3633,6 @@ - - - 测试数据库是否连接正确,本方法执行如下命令: - MySql/SqlServer/PostgreSQL/达梦/人大金仓/神通: SELECT 1 - Oracle: SELECT 1 FROM dual - - 命令超时设置(秒) - - true: 成功, false: 失败 - - - - 查询,若使用读写分离,查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】 - - - - - - - - - - 查询,ExecuteReaderAsync(dr => {}, "select * from user where age > @age", new { age = 25 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - - - - - - - - 查询 - - - - - - - - - 查询,ExecuteArrayAsync("select * from user where age > @age", new { age = 25 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - - - - - - - - 查询 - - - - - - - - - 查询,ExecuteDataSetAsync("select * from user where age > @age; select 2", new { age = 25 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - - - - - - - - 查询 - - - - - - - - - 查询,ExecuteDataTableAsync("select * from user where age > @age", new { age = 25 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - - - - - - - - 在【主库】执行 - - - - - - - - - 在【主库】执行,ExecuteNonQueryAsync("delete from user where age > @age", new { age = 25 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - - - - - - - - 在【主库】执行 - - - - - - - - - 在【主库】执行,ExecuteScalarAsync("select 1 from user where age > @age", new { age = 25 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - - - - - - - - 执行SQL返回对象集合,QueryAsync<User>("select * from user where age > @age", new SqlParameter { ParameterName = "age", Value = 25 }) - - - - - - - - - - - 执行SQL返回对象集合,QueryAsync<User>("select * from user where age > @age", new { age = 25 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - - - - - - - - - 执行SQL返回对象集合,Query<User>("select * from user where age > @age; select * from address", new SqlParameter { ParameterName = "age", Value = 25 }) - - - - - - - - - - - - 执行SQL返回对象集合,Query<User, Address>("select * from user where age > @age; select * from address", new { age = 25 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - - - - - - - 可自定义解析表达式 @@ -4897,12 +4632,6 @@ 超时 - - - 获取资源 - - - 使用完毕后,归还资源 @@ -4978,12 +4707,6 @@ 资源对象 - - - 从对象池获取对象成功的时候触发,通过该方法统计或初始化对象 - - 资源对象 - 归还对象给对象池的时候触发 @@ -5559,7 +5282,7 @@ - 【{policyName}】ObjectPool.GetAsync() The queue is too long. Policy.AsyncGetCapacity = {asyncGetCapacity} + 【{policyName}】ObjectPool.GetAsync() The queue is too long, Policy.AsyncGetCapacity = {asyncGetCapacity} @@ -5897,28 +5620,6 @@ 对象池 - - - 动态构建Class Type - - - - - - 根据字典,创建 table 对应的实体对象 - - - - - - - - 根据实体对象,创建 table 对应的字典 - - - - - C#: that >= between && that <= and diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index 33774c440..1d34f6934 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -2136,6 +2136,8 @@ namespace FreeSql.Internal //判断 [JsonMap] 并非导航对象,所以在上面提前判断 ColumnsByCs var tb2tmp = _common.GetTableByEntity(exp2Type); + if (tb2tmp == null && exp2.NodeType == ExpressionType.Parameter && exp2Type.IsAnonymousType()) + tb2tmp = tsc._tables.Find(a => a.Parameter == exp2)?.Table; var exp2IsParameter = false; if (tb2tmp != null) { diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs index 453ddf5bb..67574b57e 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs @@ -584,30 +584,72 @@ namespace FreeSql.Internal.CommonProvider { var list = source?.Select(a => (object)a).ToList(); if (list.Any() != true) throw new Exception(CoreErrorStrings.Cannot_Be_NULL_Name(nameof(source))); - var sb = new StringBuilder(); - (_orm.InsertOrUpdate().AsType(_tables[0].Table.Type) as InsertOrUpdateProvider) - .WriteSourceSelectUnionAll(list, sb, _params, true); - try + if (_tables[0].Table.Type != typeof(TDto)) { - if (typeof(T1) != typeof(TDto)) + if (_orm.CodeFirst.IsAutoSyncStructure) + (_orm.CodeFirst as CodeFirstProvider)._dicSycedTryAdd(typeof(TDto)); //._dicSyced.TryAdd(typeof(TReturn), true); + var ret = (_orm as BaseDbProvider).CreateSelectProvider(null) as Select1Provider; + ret._commandTimeout = _commandTimeout; + ret._connection = _connection; + ret._transaction = _transaction; + ret._whereGlobalFilter = new List(_whereGlobalFilter.ToArray()); + ret._cancel = _cancel; + ret._params.AddRange(_params); + if (ret._tables[0].Table == null) { - if (_orm.CodeFirst.IsAutoSyncStructure) - (_orm.CodeFirst as CodeFirstProvider)._dicSycedTryAdd(typeof(TDto)); //._dicSyced.TryAdd(typeof(TReturn), true); - var ret = (_orm as BaseDbProvider).CreateSelectProvider(null) as Select1Provider; - ret._commandTimeout = _commandTimeout; - ret._connection = _connection; - ret._transaction = _transaction; - ret._whereGlobalFilter = new List(_whereGlobalFilter.ToArray()); - ret._cancel = _cancel; - ret._params.AddRange(_params); - if (ret._tables[0].Table == null) ret._tables[0].Table = TableInfo.GetDefaultTable(typeof(TDto)); + var table = TableInfo.GetDefaultTable(typeof(TDto)); + var colpos = new List(); + foreach (var kv in table.Properties) + { + var colName = kv.Key; + if (string.IsNullOrWhiteSpace(colName)) continue; + var colType = kv.Value.PropertyType; + if (_orm.CodeFirst.IsSyncStructureToLower) colName = colName.ToLower(); + if (_orm.CodeFirst.IsSyncStructureToUpper) colName = colName.ToUpper(); + var col = new ColumnInfo + { + CsName = kv.Key, + Table = table, + Attribute = new DataAnnotations.ColumnAttribute + { + Name = colName, + MapType = colType + }, + CsType = colType + }; + table.Columns.Add(colName, col); + table.ColumnsByCs.Add(kv.Key, col); + colpos.Add(col); + } + table.ColumnsByPosition = colpos.ToArray(); + colpos.Clear(); + ret._tables[0].Table = table; + } + var sb = new StringBuilder(); + try + { + var upset = _orm.InsertOrUpdate() as InsertOrUpdateProvider; + upset._table = ret._tables[0].Table; + upset.WriteSourceSelectUnionAll(list, sb, _params, true); ret.WithSql(sb.ToString()); return ret; } - return WithSql(sb.ToString()) as ISelect; + finally { sb.Clear(); } } - finally { sb.Clear(); } + if (_tables[0].Table.Type != typeof(object)) + { + var sb = new StringBuilder(); + try + { + var upset = _orm.InsertOrUpdate() as InsertOrUpdateProvider; + upset._table = _tables[0].Table; + upset.WriteSourceSelectUnionAll(list, sb, _params, true); + return WithSql(sb.ToString()) as ISelect; + } + finally { sb.Clear(); } + } + throw new Exception(CoreErrorStrings.TypeAsType_NotSupport_Object("Select")); } public ISelect WithTempQuery(Expression> selector) => InternalWithTempQuery(selector); diff --git a/FreeSql/Internal/Exception/CoreErrorStrings.cs b/FreeSql/Internal/Exception/CoreErrorStrings.cs index 95baa0b40..4aeee2784 100644 --- a/FreeSql/Internal/Exception/CoreErrorStrings.cs +++ b/FreeSql/Internal/Exception/CoreErrorStrings.cs @@ -127,7 +127,7 @@ namespace FreeSql /// public static string DataType_AsType_Inconsistent(object dataDisplayCsharp, object tableTypeDisplayCsharp) => string.Format(Language == "cn" ? @"操作的数据类型({0}) 与 AsType({1}) 不一致,请检查。" : - @"FreeSql: The data type of the operation ({0}) is inconsistent with AsType ({1}). Please check.", dataDisplayCsharp, tableTypeDisplayCsharp); + @"FreeSql: The data type of the operation ({0}) is inconsistent with AsType({1}), Please check.", dataDisplayCsharp, tableTypeDisplayCsharp); /// /// DateRange 要求 Value 应该逗号分割,并且长度为 2 /// @@ -157,7 +157,7 @@ namespace FreeSql /// public static string Duplicate_ColumnAttribute(object colattrName) => string.Format(Language == "cn" ? @"ColumnAttribute.Name {0} 重复存在,请检查(注意:不区分大小写)" : - @"FreeSql: ColumnAttribute. Name {0} exists repeatedly, please check (note: case insensitive)", colattrName); + @"FreeSql: ColumnAttribute.Name {0} exists repeatedly, please check (note: case insensitive)", colattrName); /// /// 属性名 {pName} 重复存在,请检查(注意:不区分大小写) /// @@ -247,7 +247,7 @@ namespace FreeSql /// public static string Ignored_Check_Confirm_PublicGetSet(object tb2DbName, object mp2MemberName) => string.Format(Language == "cn" ? @"{0}.{1} 被忽略,请检查 IsIgnore 设置,确认 get/set 为 public" : - @"FreeSql: {0}. {1} is ignored. Check the IsIgnore setting to make sure get/set is public", tb2DbName, mp2MemberName); + @"FreeSql: {0}.{1} is ignored, Check the IsIgnore setting to make sure get/set is public", tb2DbName, mp2MemberName); /// /// Include 参数类型错误 /// @@ -301,13 +301,13 @@ namespace FreeSql /// public static string InsertInto_No_Property_Selected(object displayCsharp) => string.Format(Language == "cn" ? @"ISelect.InsertInto() 未选择属性: {0}" : - @"FreeSql: ISelect. InsertInto() did not select an attribute: {0}", displayCsharp); + @"FreeSql: ISelect.InsertInto() did not select an attribute: {0}", displayCsharp); /// /// ISelect.InsertInto() 类型错误: {displayCsharp} /// public static string InsertInto_TypeError(object displayCsharp) => string.Format(Language == "cn" ? @"ISelect.InsertInto() 类型错误: {0}" : - @"FreeSql: ISelect. InsertInto() type error: {0}", displayCsharp); + @"FreeSql: ISelect.InsertInto() type error: {0}", displayCsharp); /// /// InsertOrUpdate 功能执行 merge into 要求实体类 {CsName} 必须有主键 /// @@ -319,13 +319,13 @@ namespace FreeSql /// public static string InsertOrUpdate_NotSuport_Generic_UseEntity(object typeofT1) => string.Format(Language == "cn" ? @"InsertOrUpdate<>的泛型参数 不支持 {0},请传递您的实体类" : - @"FreeSql: The generic parameter for InsertOrUpdate<>does not support {0}. Pass in your entity class", typeofT1); + @"FreeSql: The generic parameter for InsertOrUpdate<>does not support {0}, Pass in your entity class", typeofT1); /// /// 【延时加载】功能需要安装 FreeSql.Extensions.LazyLoading.dll,可前往 nuget 下载 /// public static string Install_FreeSql_Extensions_LazyLoading => Language == "cn" ? @"【延时加载】功能需要安装 FreeSql.Extensions.LazyLoading.dll,可前往 nuget 下载" : - @"FreeSql: FreeSql needs to be installed for Delayed Loading. Extensions. LazyLoading. Dll, downloadable to nuget"; + @"FreeSql: FreeSql needs to be installed for Delayed Loading.Extensions.LazyLoading.Dll, downloadable to nuget"; /// /// 【延时加载】{trytbTypeName} 编译错误:{exMessage} /// @@ -347,43 +347,43 @@ namespace FreeSql /// public static string ManyToMany_AsSelect_NotSupport_Sum_Avg_etc => Language == "cn" ? @"ManyToMany 导航属性 .AsSelect() 暂时不可用于 Sum/Avg/Max/Min/First/ToOne/ToList 方法" : - @"FreeSql: ManyToMany navigation properties. AsSelect() is temporarily unavailable for the Sum/Avg/Max/Min/First/ToOne/ToList method"; + @"FreeSql: ManyToMany navigation properties.AsSelect() is temporarily unavailable for the Sum/Avg/Max/Min/First/ToOne/ToList method"; /// /// 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 在 {tbmidCsName} 中没有找到对应的字段,如:{midTypePropsTrytbName}{findtrytbPkCsName}、{midTypePropsTrytbName}_{findtrytbPkCsName} /// public static string ManyToMany_NotFound_CorrespondingField(object trytbTypeName, object pnvName, object tbmidCsName, object midTypePropsTrytbName, object findtrytbPkCsName) => string.Format(Language == "cn" ? @"【ManyToMany】导航属性 {0}.{1} 在 {2} 中没有找到对应的字段,如:{3}{4}、{3}_{4}" : - @"FreeSql: [ManyToMany] Navigation property {0}. {1} did not find a corresponding field in {2}, such as: {3}{4}, {3}_ {4}", trytbTypeName, pnvName, tbmidCsName, midTypePropsTrytbName, findtrytbPkCsName); + @"FreeSql: [ManyToMany] Navigation property {0}.{1} did not find a corresponding field in {2}, such as: {3}{4}, {3}_ {4}", trytbTypeName, pnvName, tbmidCsName, midTypePropsTrytbName, findtrytbPkCsName); /// /// 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {tbrefTypeName} 缺少主键标识,[Column(IsPrimary = true)] /// public static string ManyToMany_ParsingError_EntityMissing_PrimaryKey(object trytbTypeName, object pnvName, object tbrefTypeName) => string.Format(Language == "cn" ? @"【ManyToMany】导航属性 {0}.{1} 解析错误,实体类型 {2} 缺少主键标识,[Column(IsPrimary = true)]" : - @"FreeSql: [ManyToMany] Navigation property {0}. {1} parsing error, entity type {2} missing primary key identity, [Column (IsPrimary = true)]", trytbTypeName, pnvName, tbrefTypeName); + @"FreeSql: [ManyToMany] Navigation property {0}.{1} parsing error, entity type {2} missing primary key identity, [Column (IsPrimary = true)]", trytbTypeName, pnvName, tbrefTypeName); /// /// 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {tbrefTypeName} 必须存在对应的 [Navigate(ManyToMany = x)] 集合属性 /// public static string ManyToMany_ParsingError_EntityMustHas_NavigateCollection(object trytbTypeName, object pnvName, object tbrefTypeName) => string.Format(Language == "cn" ? @"【ManyToMany】导航属性 {0}.{1} 解析错误,实体类型 {2} 必须存在对应的 [Navigate(ManyToMany = x)] 集合属性" : - @"FreeSql: [ManyToMany] Navigation property {0}. {1} parsing error, entity type {2} must have a corresponding [Navigate (ManyToMany = x)] collection property", trytbTypeName, pnvName, tbrefTypeName); + @"FreeSql: [ManyToMany] Navigation property {0}.{1} parsing error, entity type {2} must have a corresponding [Navigate (ManyToMany = x)] collection property", trytbTypeName, pnvName, tbrefTypeName); /// /// 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,{tbmidCsName}.{trycolCsName} 和 {trytbCsName}.{trytbPrimarysCsName} 类型不一致 /// public static string ManyToMany_ParsingError_InconsistentType(object trytbTypeName, object pnvName, object tbmidCsName, object trycolCsName, object trytbCsName, object trytbPrimarysCsName) => string.Format(Language == "cn" ? @"【ManyToMany】导航属性 {0}.{1} 解析错误,{2}.{3} 和 {4}.{5} 类型不一致" : - @"FreeSql: [ManyToMany] Navigation property {0}. {1} parsing error, {2}. {3} and {4}. {5} type inconsistent", trytbTypeName, pnvName, tbmidCsName, trycolCsName, trytbCsName, trytbPrimarysCsName); + @"FreeSql: [ManyToMany] Navigation property {0}.{1} parsing error, {2}.{3} and {4}.{5} type inconsistent", trytbTypeName, pnvName, tbmidCsName, trycolCsName, trytbCsName, trytbPrimarysCsName); /// /// 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,中间类 {tbmidCsName}.{midTypePropsTrytbName} 错误:{exMessage} /// public static string ManyToMany_ParsingError_IntermediateClass_ErrorMessage(object trytbTypeName, object pnvName, object tbmidCsName, object midTypePropsTrytbName, object exMessage) => string.Format(Language == "cn" ? @"【ManyToMany】导航属性 {0}.{1} 解析错误,中间类 {2}.{3} 错误:{4}" : - @"FreeSql: [ManyToMany] Navigation property {0}. {1} parsing error, intermediate class {2}.{3} Error: {4}", trytbTypeName, pnvName, tbmidCsName, midTypePropsTrytbName, exMessage); + @"FreeSql: [ManyToMany] Navigation property {0}.{1} parsing error, intermediate class {2}.{3} Error: {4}", trytbTypeName, pnvName, tbmidCsName, midTypePropsTrytbName, exMessage); /// /// 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,中间类 {tbmidCsName}.{midTypePropsTrytbName} 导航属性不是【ManyToOne】或【OneToOne】 /// public static string ManyToMany_ParsingError_IntermediateClass_NotManyToOne_OneToOne(object trytbTypeName, object pnvName, object tbmidCsName, object midTypePropsTrytbName) => string.Format(Language == "cn" ? @"【ManyToMany】导航属性 {0}.{1} 解析错误,中间类 {2}.{3} 导航属性不是【ManyToOne】或【OneToOne】" : - @"FreeSql: [ManyToMany] Navigation property {0}. {1} parsing error, intermediate class {2}. The {3} navigation property is not ManyToOne or OneToOne", trytbTypeName, pnvName, tbmidCsName, midTypePropsTrytbName); + @"FreeSql: [ManyToMany] Navigation property {0}.{1} parsing error, intermediate class {2}.The {3} navigation property is not ManyToOne or OneToOne", trytbTypeName, pnvName, tbmidCsName, midTypePropsTrytbName); /// /// 映射异常:{name} 没有一个属性名相同 /// @@ -395,7 +395,7 @@ namespace FreeSql /// public static string MasterPool_IsNull_UseTransaction => Language == "cn" ? @"Ado.MasterPool 值为 null,该操作无法自启用事务,请显式传递【事务对象】解决" : - @"FreeSql: Ado. MasterPool value is null, this operation cannot self-enable transactions, please explicitly pass [transaction object] resolution"; + @"FreeSql: Ado.MasterPool value is null, this operation cannot self-enable transactions, please explicitly pass [transaction object] resolution"; /// /// 缺少 FreeSql 数据库实现包:FreeSql.Provider.{Provider}.dll,可前往 nuget 下载 /// @@ -413,49 +413,49 @@ namespace FreeSql /// public static string Navigation_Bind_Number_Different(object trytbTypeName, object pnvName, object bindColumnsCount, object tbrefPrimarysLength) => string.Format(Language == "cn" ? @"导航属性 {0}.{1} 特性 [Navigate] Bind 数目({2}) 与 外部主键数目({3}) 不相同" : - @"FreeSql: Navigation property {0}. The number of {1} attributes [Navigate] Binds ({2}) is different from the number of external primary keys ({3})", trytbTypeName, pnvName, bindColumnsCount, tbrefPrimarysLength); + @"FreeSql: Navigation property {0}.{1}, The number of attributes [Navigate] Binds ({2}) is different from the number of external primary keys ({3})", trytbTypeName, pnvName, bindColumnsCount, tbrefPrimarysLength); /// /// {tb2DbName}.{mp2MemberName} 导航属性集合忘了 .AsSelect() 吗?如果在 ToList(a =&gt; a.{mp2MemberName}) 中使用,请移步参考 IncludeMany 文档。 /// public static string Navigation_Missing_AsSelect(object tb2DbName, object mp2MemberName) => string.Format(Language == "cn" ? @"{0}.{1} 导航属性集合忘了 .AsSelect() 吗?如果在 ToList(a => a.{1}) 中使用,请移步参考 IncludeMany 文档。" : - @"FreeSql: {0}. {1} Navigation Property Collection forgotten. AsSelect()? If used in ToList (a => a. {1}), step by step to refer to the IncludeMany document.", tb2DbName, mp2MemberName); + @"FreeSql: {0}.{1} Navigation Property Collection forgotten.AsSelect()? If used in ToList(a => a.{1}), step by step to refer to the IncludeMany document.", tb2DbName, mp2MemberName); /// /// 【导航属性】{trytbTypeDisplayCsharp}.{pName} 缺少 set 属性 /// public static string Navigation_Missing_SetProperty(object trytbTypeDisplayCsharp, object pName) => string.Format(Language == "cn" ? @"【导航属性】{0}.{1} 缺少 set 属性" : - @"FreeSql: Navigation Properties {0}. Missing set attribute for {1}", trytbTypeDisplayCsharp, pName); + @"FreeSql: Navigation Properties {0}.Missing set attribute for {1}", trytbTypeDisplayCsharp, pName); /// /// 导航属性 {trytbTypeName}.{pnvName} 没有找到对应的字段,如:{pnvName}{findtbrefPkCsName}、{pnvName}_{findtbrefPkCsName}。或者使用 [Navigate] 特性指定关系映射。 /// public static string Navigation_NotFound_CorrespondingField(object trytbTypeName, object pnvName, object findtbrefPkCsName) => string.Format(Language == "cn" ? @"导航属性 {0}.{1} 没有找到对应的字段,如:{1}{3}、{1}_{3}。或者使用 [Navigate] 特性指定关系映射。" : - @"FreeSql: Navigation property {0}. {1} No corresponding fields were found, such as: {1}{3}, {1}_ {3}. Or use the [Navigate] attribute to specify the relationship mapping.", trytbTypeName, pnvName, findtbrefPkCsName); + @"FreeSql: Navigation property {0}.{1} No corresponding fields were found, such as: {1}{3}, {1}_ {3}, Or use the [Navigate] attribute to specify the relationship mapping.", trytbTypeName, pnvName, findtbrefPkCsName); /// /// 导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {trytcTypeName} 缺少主键标识,[Column(IsPrimary = true)] /// public static string Navigation_ParsingError_EntityMissingPrimaryKey(object trytbTypeName, object pnvName, object trytcTypeName) => string.Format(Language == "cn" ? @"导航属性 {0}.{1} 解析错误,实体类型 {2} 缺少主键标识,[Column(IsPrimary = true)]" : - @"FreeSql: Navigation property {0}. {1} parsing error, entity type {2} missing primary key identity, [Column (IsPrimary = true)]", trytbTypeName, pnvName, trytcTypeName); + @"FreeSql: Navigation property {0}.{1} parsing error, entity type {2} missing primary key identity, [Column (IsPrimary = true)]", trytbTypeName, pnvName, trytcTypeName); /// /// 导航属性 {trytbTypeName}.{pnvName} 解析错误,{trytbCsName}.{trycolCsName} 和 {tbrefCsName}.{tbrefPrimarysCsName} 类型不一致 /// public static string Navigation_ParsingError_InconsistentType(object trytbTypeName, object pnvName, object trytbCsName, object trycolCsName, object tbrefCsName, object tbrefPrimarysCsName) => string.Format(Language == "cn" ? @"导航属性 {0}.{1} 解析错误,{2}.{3} 和 {4}.{5} 类型不一致" : - @"FreeSql: Navigation property {0}. {1} parsing error, {2}. {3} and {4}. {5} type inconsistent", trytbTypeName, pnvName, trytbCsName, trycolCsName, tbrefCsName, tbrefPrimarysCsName); + @"FreeSql: Navigation property {0}.{1} parsing error, {2}.{3} and {4}.{5} type inconsistent", trytbTypeName, pnvName, trytbCsName, trycolCsName, tbrefCsName, tbrefPrimarysCsName); /// /// 导航属性 {trytbTypeName}.{pnvName} 特性 [Navigate] 解析错误,在 {tbrefTypeName} 未找到属性:{bi} /// public static string Navigation_ParsingError_NotFound_Property(object trytbTypeName, object pnvName, object tbrefTypeName, object bi) => string.Format(Language == "cn" ? @"导航属性 {0}.{1} 特性 [Navigate] 解析错误,在 {2} 未找到属性:{3}" : - @"FreeSql: Navigation property {0}. {1} attribute [Navigate] parsing error, property not found at {2}: {3}", trytbTypeName, pnvName, tbrefTypeName, bi); + @"FreeSql: Navigation property {0}.{1} attribute [Navigate] parsing error, property not found at {2}: {3}", trytbTypeName, pnvName, tbrefTypeName, bi); /// /// {tableTypeDisplayCsharp} 没有定义主键,无法使用 SetSource,请尝试 SetDto 或者 SetSource 指定临时主键 /// public static string NoPrimaryKey_UseSetDto(object tableTypeDisplayCsharp) => string.Format(Language == "cn" ? @"{0} 没有定义主键,无法使用 SetSource,请尝试 SetDto 或者 SetSource 指定临时主键" : - @"FreeSql: {0} has no primary key defined and cannot use SetSource. Try SetDto", tableTypeDisplayCsharp); + @"FreeSql: {0} has no primary key defined and cannot use SetSource, Try SetDto", tableTypeDisplayCsharp); /// /// 没有定义属性 /// @@ -485,7 +485,7 @@ namespace FreeSql /// public static string Not_Implemented_Expression_UseAsSelect(object exp, object exp3MethodName, object exp3ArgumentsCount) => string.Format(Language == "cn" ? @"未实现函数表达式 {0} 解析,如果正在操作导航属性集合,请使用 .AsSelect().{1}({2})" : - @"FreeSql: Function expression {0} parsing is not implemented. Use if you are working on a navigation property collection. AsSelect (). {1} ({2})", exp, exp3MethodName, exp3ArgumentsCount); + @"FreeSql: Function expression {0} parsing is not implemented, Use if you are working on a navigation property collection, AsSelect().{1}({2})", exp, exp3MethodName, exp3ArgumentsCount); /// /// 未实现 MemberAccess 下的 Constant /// @@ -569,13 +569,13 @@ namespace FreeSql /// public static string ObjectPool_Get_Timeout(object policyName, object GetName, object totalSeconds) => string.Format(Language == "cn" ? @"【{0}】ObjectPool.{1}() timeout {2} seconds, see: https://github.com/dotnetcore/FreeSql/discussions/1081" : - @"FreeSql: [{0}] ObjectPool. {1}() timeout {2} seconds, see: https://github.com/dotnetcore/FreeSql/discussions/1081", policyName, GetName, totalSeconds); + @"FreeSql: [{0}] ObjectPool.{1}() timeout {2} seconds, see: https://github.com/dotnetcore/FreeSql/discussions/1081", policyName, GetName, totalSeconds); /// - /// 【{policyName}】ObjectPool.GetAsync() The queue is too long. Policy.AsyncGetCapacity = {asyncGetCapacity} + /// 【{policyName}】ObjectPool.GetAsync() The queue is too long, Policy.AsyncGetCapacity = {asyncGetCapacity} /// public static string ObjectPool_GetAsync_Queue_Long(object policyName, object asyncGetCapacity) => string.Format(Language == "cn" ? - @"【{0}】ObjectPool.GetAsync() The queue is too long. Policy.AsyncGetCapacity = {1}" : - @"FreeSql: [{0}] ObjectPool. GetAsync() The queue is too long. Policy. AsyncGetCapacity = {1}", policyName, asyncGetCapacity); + @"【{0}】ObjectPool.GetAsync() The queue is too long, Policy.AsyncGetCapacity = {1}" : + @"FreeSql: [{0}] ObjectPool.GetAsync() The queue is too long, Policy.AsyncGetCapacity = {1}", policyName, asyncGetCapacity); /// /// 【OneToMany】导航属性 {trytbTypeName}.{pnvName} 在 {tbrefCsName} 中没有找到对应的字段,如:{findtrytb}{findtrytbPkCsName}、{findtrytb}_{findtrytbPkCsName} /// @@ -593,7 +593,7 @@ namespace FreeSql /// public static string OneToMany_UseNavigate(object refpropName, object findtrytbPkCsName) => string.Format(Language == "cn" ? @"、{0}{1}、{0}_{1}。或者使用 [Navigate] 特性指定关系映射。" : - @", {0}{1}, {0}_{1}. Or use the [Navigate] attribute to specify the relationship mapping.", refpropName, findtrytbPkCsName); + @", {0}{1}, {0}_{1}, Or use the [Navigate] attribute to specify the relationship mapping.", refpropName, findtrytbPkCsName); /// /// 参数 field 未指定 /// @@ -641,7 +641,7 @@ namespace FreeSql /// public static string Policy_Status_NotAvailable(object policyName, object UnavailableExceptionMessage) => string.Format(Language == "cn" ? @"【{0}】状态不可用,等待后台检查程序恢复方可使用。{1}" : - @"FreeSql: The {0} status is unavailable and cannot be used until the background checker is restored. {1}", policyName, UnavailableExceptionMessage); + @"FreeSql: The {0} status is unavailable and cannot be used until the background checker is restored, {1}", policyName, UnavailableExceptionMessage); /// /// 属性{trytbVersionColumnCsName} 被标注为行锁(乐观锁)(IsVersion),但其必须为数字类型 或者 byte[] 或者 string,并且不可为 Nullable /// @@ -725,7 +725,7 @@ namespace FreeSql /// public static string Type_AsType_Parameter_Error(object Type) => string.Format(Language == "cn" ? @"{0}.AsType 参数错误,请传入正确的实体类型" : - @"FreeSql: {0}. AsType parameter error, please pass in the correct entity type", Type); + @"FreeSql: {0}.AsType parameter error, please pass in the correct entity type", Type); /// /// {thatFullName} 类型无法访问构造函数 /// @@ -743,7 +743,7 @@ namespace FreeSql /// public static string TypeAsType_NotSupport_Object(object Type) => string.Format(Language == "cn" ? @"{0}.AsType 参数不支持指定为 object" : - @"FreeSql: {0}. AsType parameter does not support specifying as object", Type); + @"FreeSql: {0}.AsType parameter does not support specifying as object", Type); /// /// 类型 {typeofFullName} 错误,不能使用 IncludeMany /// @@ -767,7 +767,7 @@ namespace FreeSql /// public static string Use_InsertDict_Method => Language == "cn" ? @"请使用 fsql.InsertDict(dict) 方法插入字典数据" : - @"FreeSql: Please use fsql. InsertDict (dict) method inserts dictionary data"; + @"FreeSql: Please use fsql.InsertDict(dict) method inserts dictionary data"; /// /// 找不到 {name} /// @@ -791,13 +791,13 @@ namespace FreeSql /// public static string S_Access_InsertOnlyOneAtTime => Language == "cn" ? @"蛋疼的 Access 插入只能一条一条执行,不支持 values(..),(..) 也不支持 select .. UNION ALL select .." : - @"FreeSql: Egg pain Accs insertion can only be performed one at a time, values (..) are not supported. (..) Select is also not supported.. UNION ALL select.."; + @"FreeSql: values (..),(..) are not supported"; /// /// BaseEntity.Initialization 初始化错误,获取到 IFreeSql 是 null /// public static string S_BaseEntity_Initialization_Error => Language == "cn" ? @"BaseEntity.Initialization 初始化错误,获取到 IFreeSql 是 null" : - @"FreeSql: BaseEntity. Initialization initialization error, get IFreeSql is null"; + @"FreeSql: BaseEntity.Initialization initialization error, get IFreeSql is null"; /// /// 【{thisName}】Block access and wait for recovery: {exMessage} /// @@ -833,7 +833,7 @@ namespace FreeSql /// public static string S_ConnectionStringError_CheckProjectConnection(object thisName) => string.Format(Language == "cn" ? @"【{0}】连接字符串错误,请检查。或者检查项目属性 > 生成 > 目标平台:x86 | x64,或者改用 FreeSql.Provider.SqliteCore 访问 arm 平台" : - @"FreeSql: [{0}] Connection string error, please check. Or check Project Properties > Build > Target Platform: x86 | x64, Or use FreeSql.Provider.SqliteCore accessing arm platform", thisName); + @"FreeSql: [{0}] Connection string error, please check, Or check Project Properties > Build > Target Platform: x86 | x64, Or use FreeSql.Provider.SqliteCore accessing arm platform", thisName); /// /// FreeSql.Provider.CustomAdapter 无法使用 CreateCommand /// @@ -887,7 +887,7 @@ namespace FreeSql /// public static string S_MygisGeometry_NotImplement(object wkt) => string.Format(Language == "cn" ? @"MygisGeometry.Parse 未实现 ""{0}""" : - @"FreeSql: MygisGeometry. Parse does not implement ""{0}""", wkt); + @"FreeSql: MygisGeometry.Parse does not implement ""{0}""", wkt); /// /// -NameOptions 参数错误,格式为:0,0,0,0 /// @@ -935,7 +935,7 @@ namespace FreeSql /// public static string S_ParsingFailed_UseRestoreToSelect(object callExpMethodName, object message) => string.Format(Language == "cn" ? @"解析失败 {0} {1},提示:可以使用扩展方法 IQueryable.RestoreToSelect() 还原为 ISelect 再查询" : - @"FreeSql: Parsing failed {0} {1}, hint: Extension method IQueryable can be used. RestoreToSelect() reverted to ISelect re-query", callExpMethodName, message); + @"FreeSql: Parsing failed {0} {1}, hint: Extension method IQueryable.RestoreToSelect() can be used", callExpMethodName, message); /// /// fsql.InsertOrUpdate + IfExistsDoNothing + {providerName}要求实体类 {tableCsName} 必须有主键 /// @@ -1338,7 +1338,7 @@ var xml1 = ` FreeSql: TableName format error, example: "log_{yyyyMMdd}" - FreeSql: {Type}. AsType parameter error, please pass in the correct entity type + FreeSql: {Type}.AsType parameter error, please pass in the correct entity type FreeSql: The {thatFullName} type cannot access the constructor @@ -1347,7 +1347,7 @@ var xml1 = ` FreeSql: {name} type error - FreeSql: {Type}. AsType parameter does not support specifying as object + FreeSql: {Type}.AsType parameter does not support specifying as object FreeSql: Type {typeofFullName} error, IncludeMany cannot be used From ce4a77f45b8cd30e62b4e6af159a9c26aee17807 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Fri, 8 Nov 2024 21:27:28 +0800 Subject: [PATCH 20/38] v3.5.100-preview20241108 ##1917 --- Directory.Build.props | 2 +- .../FreeSql.Extensions.AggregateRoot.csproj | 2 +- .../FreeSql.Extensions.BaseEntity.csproj | 2 +- .../FreeSql.Extensions.JsonMap.csproj | 2 +- .../FreeSql.Extensions.LazyLoading.csproj | 2 +- .../FreeSql.Extensions.Linq.csproj | 2 +- .../FreeSql.Extensions.ZeroEntity.csproj | 2 +- .../FreeSql.Generator.csproj | 2 +- FreeSql.All/FreeSql.All.csproj | 2 +- FreeSql.DbContext/FreeSql.DbContext.csproj | 2 +- FreeSql.DbContext/FreeSql.DbContext.xml | 9 + FreeSql.Repository/FreeSql.Repository.csproj | 2 +- FreeSql/FreeSql.csproj | 2 +- FreeSql/FreeSql.xml | 299 ++++++++++++++++++ .../FreeSql.Provider.ClickHouse.csproj | 2 +- .../FreeSql.Provider.Custom.csproj | 2 +- .../FreeSql.Provider.Dameng.csproj | 2 +- .../FreeSql.Provider.Duckdb.csproj | 2 +- .../FreeSql.Provider.Firebird.csproj | 2 +- .../FreeSql.Provider.GBase.csproj | 2 +- .../FreeSql.Provider.KingbaseES.csproj | 2 +- .../FreeSql.Provider.MsAccess.csproj | 2 +- .../FreeSql.Provider.MySql.csproj | 2 +- .../FreeSql.Provider.MySqlConnector.csproj | 2 +- .../FreeSql.Provider.Odbc.csproj | 2 +- .../FreeSql.Provider.Oracle.csproj | 2 +- .../FreeSql.Provider.OracleOledb.csproj | 2 +- .../FreeSql.Provider.PostgreSQL.csproj | 2 +- .../FreeSql.Provider.QuestDb.csproj | 2 +- .../FreeSql.Provider.ShenTong.csproj | 2 +- .../FreeSql.Provider.SqlServer.csproj | 2 +- ...FreeSql.Provider.SqlServerForSystem.csproj | 2 +- .../FreeSql.Provider.Sqlite.csproj | 2 +- .../FreeSql.Provider.SqliteCore.csproj | 2 +- .../FreeSql.Provider.Xugu.csproj | 2 +- 35 files changed, 341 insertions(+), 33 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 20c71c18a..b9e51172c 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -12,7 +12,7 @@ diff --git a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj index 7cee11c10..affc9617d 100644 --- a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj +++ b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241101 + 3.5.100-preview20241108 readme.md diff --git a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj index 0ad75e480..40d325633 100644 --- a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj +++ b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj @@ -19,7 +19,7 @@ key.snk false latest - 3.5.100-preview20241101 + 3.5.100-preview20241108 readme.md diff --git a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj index 19d6e80b2..732ab04eb 100644 --- a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj +++ b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241101 + 3.5.100-preview20241108 readme.md diff --git a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj index 59e4240b6..ba301c2b4 100644 --- a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj +++ b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20241101 + 3.5.100-preview20241108 readme.md diff --git a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj index 17f7a5334..cf22056d3 100644 --- a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj +++ b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241101 + 3.5.100-preview20241108 readme.md diff --git a/Extensions/FreeSql.Extensions.ZeroEntity/FreeSql.Extensions.ZeroEntity.csproj b/Extensions/FreeSql.Extensions.ZeroEntity/FreeSql.Extensions.ZeroEntity.csproj index 22672c702..5df60d3ab 100644 --- a/Extensions/FreeSql.Extensions.ZeroEntity/FreeSql.Extensions.ZeroEntity.csproj +++ b/Extensions/FreeSql.Extensions.ZeroEntity/FreeSql.Extensions.ZeroEntity.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241101 + 3.5.100-preview20241108 readme.md diff --git a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj index e9bd30b8d..c53154d75 100644 --- a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj +++ b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj @@ -13,7 +13,7 @@ https://github.com/2881099/FreeSql https://github.com/2881099/FreeSql FreeSql DbFirst 实体生成器 - 3.5.100-preview20241101 + 3.5.100-preview20241108 readme.md diff --git a/FreeSql.All/FreeSql.All.csproj b/FreeSql.All/FreeSql.All.csproj index 830c501a4..e72948f3c 100644 --- a/FreeSql.All/FreeSql.All.csproj +++ b/FreeSql.All/FreeSql.All.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.5.100-preview20241101 + 3.5.100-preview20241108 readme.md diff --git a/FreeSql.DbContext/FreeSql.DbContext.csproj b/FreeSql.DbContext/FreeSql.DbContext.csproj index a9e910513..6c9257528 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.csproj +++ b/FreeSql.DbContext/FreeSql.DbContext.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.5.100-preview20241101 + 3.5.100-preview20241108 readme.md diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index 08ab7dc4c..a7a94fcda 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -712,6 +712,15 @@ + + + 根据Assembly扫描所有继承IEntityTypeConfiguration<T>的配置类 + + + + + + 创建普通数据上下文档对象 diff --git a/FreeSql.Repository/FreeSql.Repository.csproj b/FreeSql.Repository/FreeSql.Repository.csproj index 876d7a459..be8149b0b 100644 --- a/FreeSql.Repository/FreeSql.Repository.csproj +++ b/FreeSql.Repository/FreeSql.Repository.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.5.100-preview20241101 + 3.5.100-preview20241108 readme.md diff --git a/FreeSql/FreeSql.csproj b/FreeSql/FreeSql.csproj index 152ebeec5..ecdec4771 100644 --- a/FreeSql/FreeSql.csproj +++ b/FreeSql/FreeSql.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.5.100-preview20241101 + 3.5.100-preview20241108 readme.md diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 2a6e277ba..8e9e51672 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -1087,6 +1087,93 @@ + + + 动态创建实体类型 + + + + + 配置Class + + 类名 + 类标记的特性[Table(Name = "xxx")] [Index(xxxx)] + + + + + 获取类型构建器,可作为要构建的Type来引用 + + + + + 配置属性 + + 属性名称 + 属性类型 + 属性标记的特性-支持多个 + + + + + 配置属性 + + 属性名称 + 属性类型 + 该属性是否重写父类属性 + 属性标记的特性-支持多个 + + + + + 配置属性 + + 属性名称 + 属性类型 + 该属性是否重写父类属性 + 属性默认值 + 属性标记的特性-支持多个 + + + + + 配置父类 + + 父类类型 + + + + + Override属性 + + + + + + Emit动态创建出Class - Type + + + + + + Emit动态创建出Class - Type,不附带获取TableInfo + + + + + + 首字母小写 + + + + + + + 首字母大写 + + + + 获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值时,返回 "" @@ -3289,6 +3376,13 @@ + + + 执行SQL语句,返回更新后的记录 + 注意:此方法只有 Postgresql/SqlServer 有效果 + + + 指定事务对象 @@ -3633,6 +3727,177 @@ + + + 测试数据库是否连接正确,本方法执行如下命令: + MySql/SqlServer/PostgreSQL/达梦/人大金仓/神通: SELECT 1 + Oracle: SELECT 1 FROM dual + + 命令超时设置(秒) + + true: 成功, false: 失败 + + + + 查询,若使用读写分离,查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】 + + + + + + + + + + 查询,ExecuteReaderAsync(dr => {}, "select * from user where age > @age", new { age = 25 }) + 提示:parms 参数还可以传 Dictionary<string, object> + + + + + + + + + 查询 + + + + + + + + + 查询,ExecuteArrayAsync("select * from user where age > @age", new { age = 25 }) + 提示:parms 参数还可以传 Dictionary<string, object> + + + + + + + + + 查询 + + + + + + + + + 查询,ExecuteDataSetAsync("select * from user where age > @age; select 2", new { age = 25 }) + 提示:parms 参数还可以传 Dictionary<string, object> + + + + + + + + + 查询 + + + + + + + + + 查询,ExecuteDataTableAsync("select * from user where age > @age", new { age = 25 }) + 提示:parms 参数还可以传 Dictionary<string, object> + + + + + + + + + 在【主库】执行 + + + + + + + + + 在【主库】执行,ExecuteNonQueryAsync("delete from user where age > @age", new { age = 25 }) + 提示:parms 参数还可以传 Dictionary<string, object> + + + + + + + + + 在【主库】执行 + + + + + + + + + 在【主库】执行,ExecuteScalarAsync("select 1 from user where age > @age", new { age = 25 }) + 提示:parms 参数还可以传 Dictionary<string, object> + + + + + + + + + 执行SQL返回对象集合,QueryAsync<User>("select * from user where age > @age", new SqlParameter { ParameterName = "age", Value = 25 }) + + + + + + + + + + + 执行SQL返回对象集合,QueryAsync<User>("select * from user where age > @age", new { age = 25 }) + 提示:parms 参数还可以传 Dictionary<string, object> + + + + + + + + + + 执行SQL返回对象集合,Query<User>("select * from user where age > @age; select * from address", new SqlParameter { ParameterName = "age", Value = 25 }) + + + + + + + + + + + + 执行SQL返回对象集合,Query<User, Address>("select * from user where age > @age; select * from address", new { age = 25 }) + 提示:parms 参数还可以传 Dictionary<string, object> + + + + + + + + 可自定义解析表达式 @@ -4632,6 +4897,12 @@ 超时 + + + 获取资源 + + + 使用完毕后,归还资源 @@ -4707,6 +4978,12 @@ 资源对象 + + + 从对象池获取对象成功的时候触发,通过该方法统计或初始化对象 + + 资源对象 + 归还对象给对象池的时候触发 @@ -5620,6 +5897,28 @@ 对象池 + + + 动态构建Class Type + + + + + + 根据字典,创建 table 对应的实体对象 + + + + + + + + 根据实体对象,创建 table 对应的字典 + + + + + C#: that >= between && that <= and diff --git a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj index 07d3224d5..5d800028e 100644 --- a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj +++ b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj @@ -19,7 +19,7 @@ False key.snk false - 3.5.100-preview20241101 + 3.5.100-preview20241108 readme.md diff --git a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj index f963da303..3bf34417e 100644 --- a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj +++ b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241101 + 3.5.100-preview20241108 readme.md diff --git a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj index ec01bc419..c45dad4a8 100644 --- a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj +++ b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20241101 + 3.5.100-preview20241108 readme.md diff --git a/Providers/FreeSql.Provider.Duckdb/FreeSql.Provider.Duckdb.csproj b/Providers/FreeSql.Provider.Duckdb/FreeSql.Provider.Duckdb.csproj index 9e1625419..da7c88d5b 100644 --- a/Providers/FreeSql.Provider.Duckdb/FreeSql.Provider.Duckdb.csproj +++ b/Providers/FreeSql.Provider.Duckdb/FreeSql.Provider.Duckdb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241101 + 3.5.100-preview20241108 readme.md diff --git a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj index d72a0b689..8cd034d98 100644 --- a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj +++ b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241101 + 3.5.100-preview20241108 readme.md diff --git a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj index 88156aef7..1c87f478d 100644 --- a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj +++ b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241101 + 3.5.100-preview20241108 readme.md diff --git a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj index 162efc7cd..1e084587d 100644 --- a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj +++ b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20241101 + 3.5.100-preview20241108 readme.md diff --git a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj index b3e2e7084..5d781df7e 100644 --- a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj +++ b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241101 + 3.5.100-preview20241108 readme.md diff --git a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj index e1270b20e..d78c5557f 100644 --- a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj +++ b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241101 + 3.5.100-preview20241108 readme.md diff --git a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj index e36e08142..0e0fc91dc 100644 --- a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj +++ b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241101 + 3.5.100-preview20241108 readme.md diff --git a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj index d7670ef63..564293279 100644 --- a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj +++ b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241101 + 3.5.100-preview20241108 readme.md diff --git a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj index 8fa7f7111..a6c7fbff2 100644 --- a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj +++ b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241101 + 3.5.100-preview20241108 readme.md diff --git a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj index 2f9792000..51a855b3a 100644 --- a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj +++ b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241101 + 3.5.100-preview20241108 readme.md diff --git a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj index b0bbab46b..da73aa952 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj +++ b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241101 + 3.5.100-preview20241108 readme.md diff --git a/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj b/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj index 1cff77804..287dacd4d 100644 --- a/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj +++ b/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241101 + 3.5.100-preview20241108 readme.md diff --git a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj index e96df8833..6c4913e69 100644 --- a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj +++ b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20241101 + 3.5.100-preview20241108 readme.md diff --git a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj index 68dba74de..b550cadb7 100644 --- a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj +++ b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj @@ -18,7 +18,7 @@ true false key.snk - 3.5.100-preview20241101 + 3.5.100-preview20241108 readme.md diff --git a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj index cc50612d0..e18b8b682 100644 --- a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj +++ b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241101 + 3.5.100-preview20241108 readme.md diff --git a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj index 151a9535d..973089e95 100644 --- a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj +++ b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241101 + 3.5.100-preview20241108 readme.md diff --git a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj index 486e2f0b3..4aa1cad70 100644 --- a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj +++ b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241101 + 3.5.100-preview20241108 readme.md diff --git a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj index a765bf535..ed99ac6a5 100644 --- a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj +++ b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20241101 + 3.5.100-preview20241108 readme.md From 233990dfb5e6f06f73fc17ae26ed102051180432 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Tue, 12 Nov 2024 09:17:34 +0800 Subject: [PATCH 21/38] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20GBase=20serial8/?= =?UTF-8?q?bigserial=20=E8=87=AA=E5=A2=9E=E5=9B=9E=E5=A1=AB=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98=EF=BC=9B#1919?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FreeSql.Provider.GBase/Curd/GBaseInsert.cs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/Providers/FreeSql.Provider.GBase/Curd/GBaseInsert.cs b/Providers/FreeSql.Provider.GBase/Curd/GBaseInsert.cs index 880474745..3f7c9d7b9 100644 --- a/Providers/FreeSql.Provider.GBase/Curd/GBaseInsert.cs +++ b/Providers/FreeSql.Provider.GBase/Curd/GBaseInsert.cs @@ -42,12 +42,15 @@ namespace FreeSql.GBase.Curd var sql = this.ToSql(); if (string.IsNullOrEmpty(sql)) return 0; - var identityType = _table.Primarys.Where(a => a.Attribute.IsIdentity).FirstOrDefault()?.CsType.NullableTypeOrThis(); + var identityCol = _table.Primarys.Where(a => a.Attribute.IsIdentity).FirstOrDefault(); + var identityType = identityCol?.Attribute.MapType.NullableTypeOrThis(); var identitySql = ""; if (identityType != null) { if (identityType == typeof(int) || identityType == typeof(uint)) identitySql = "SELECT dbinfo('sqlca.sqlerrd1') FROM dual"; - else if (identityType == typeof(long) || identityType == typeof(ulong)) identitySql = "SELECT dbinfo('serial8') FROM dual"; + else if (identityType == typeof(long) || identityType == typeof(ulong)) identitySql = + identityCol.Attribute.DbType.IndexOf("bigserial", StringComparison.OrdinalIgnoreCase) != -1 ? + "SELECT dbinfo('bigserial') FROM dual" : "SELECT dbinfo('serial8') FROM dual"; } var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, string.Concat(sql, $"; {identitySql};"), _params); _orm.Aop.CurdBeforeHandler?.Invoke(this, before); @@ -102,12 +105,15 @@ namespace FreeSql.GBase.Curd var sql = this.ToSql(); if (string.IsNullOrEmpty(sql)) return 0; - var identityType = _table.Primarys.Where(a => a.Attribute.IsIdentity).FirstOrDefault()?.CsType.NullableTypeOrThis(); + var identityCol = _table.Primarys.Where(a => a.Attribute.IsIdentity).FirstOrDefault(); + var identityType = identityCol?.Attribute.MapType.NullableTypeOrThis(); var identitySql = ""; if (identityType != null) { if (identityType == typeof(int) || identityType == typeof(uint)) identitySql = "SELECT dbinfo('sqlca.sqlerrd1') FROM dual"; - else if (identityType == typeof(long) || identityType == typeof(ulong)) identitySql = "SELECT dbinfo('serial8') FROM dual"; + else if (identityType == typeof(long) || identityType == typeof(ulong)) identitySql = + identityCol.Attribute.DbType.IndexOf("bigserial", StringComparison.OrdinalIgnoreCase) != -1 ? + "SELECT dbinfo('bigserial') FROM dual" : "SELECT dbinfo('serial8') FROM dual"; } var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, string.Concat(sql, $"; {identitySql};"), _params); _orm.Aop.CurdBeforeHandler?.Invoke(this, before); From 8f25e50ad697890d8253672ece99e718ddd18c62 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Tue, 12 Nov 2024 11:48:14 +0800 Subject: [PATCH 22/38] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20GBase=20BIGSERIA?= =?UTF-8?q?L=20=E8=87=AA=E5=A2=9E=E9=97=AE=E9=A2=98=EF=BC=9B#1919?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql/Internal/UtilsExpressionTree.cs | 3 ++- Providers/FreeSql.Provider.GBase/Curd/GBaseInsert.cs | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/FreeSql/Internal/UtilsExpressionTree.cs b/FreeSql/Internal/UtilsExpressionTree.cs index bd53811ab..e67833c6a 100644 --- a/FreeSql/Internal/UtilsExpressionTree.cs +++ b/FreeSql/Internal/UtilsExpressionTree.cs @@ -313,7 +313,8 @@ namespace FreeSql.Internal if (colType == typeof(int) || colType == typeof(uint)) colattr.DbType = "SERIAL"; else if (colType == typeof(long) || colType == typeof(ulong)) - colattr.DbType = "SERIAL8"; + colattr.DbType = colattr.DbType.IndexOf("BIGSERIAL", StringComparison.OrdinalIgnoreCase) != -1 ? + "BIGSERIAL" : "SERIAL8"; //#1919 } if (colattr.MapType.NullableTypeOrThis() == typeof(DateTime)) { diff --git a/Providers/FreeSql.Provider.GBase/Curd/GBaseInsert.cs b/Providers/FreeSql.Provider.GBase/Curd/GBaseInsert.cs index 3f7c9d7b9..c3b2b9716 100644 --- a/Providers/FreeSql.Provider.GBase/Curd/GBaseInsert.cs +++ b/Providers/FreeSql.Provider.GBase/Curd/GBaseInsert.cs @@ -49,8 +49,8 @@ namespace FreeSql.GBase.Curd { if (identityType == typeof(int) || identityType == typeof(uint)) identitySql = "SELECT dbinfo('sqlca.sqlerrd1') FROM dual"; else if (identityType == typeof(long) || identityType == typeof(ulong)) identitySql = - identityCol.Attribute.DbType.IndexOf("bigserial", StringComparison.OrdinalIgnoreCase) != -1 ? - "SELECT dbinfo('bigserial') FROM dual" : "SELECT dbinfo('serial8') FROM dual"; + identityCol.Attribute.DbType.IndexOf("bigserial", StringComparison.OrdinalIgnoreCase) != -1 ? + "SELECT dbinfo('bigserial') FROM dual" : "SELECT dbinfo('serial8') FROM dual"; } var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, string.Concat(sql, $"; {identitySql};"), _params); _orm.Aop.CurdBeforeHandler?.Invoke(this, before); From 670f97146dd3f7fe0a0276fbe1f60c3a9b3b6953 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Tue, 12 Nov 2024 14:47:27 +0800 Subject: [PATCH 23/38] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20GBase=20?= =?UTF-8?q?=E5=AF=B9=20bigserial=20=E8=87=AA=E5=A2=9E=E9=97=AE=E9=A2=98?= =?UTF-8?q?=EF=BC=9B#1919?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Providers/FreeSql.Provider.GBase/Curd/GBaseInsert.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Providers/FreeSql.Provider.GBase/Curd/GBaseInsert.cs b/Providers/FreeSql.Provider.GBase/Curd/GBaseInsert.cs index c3b2b9716..dd0c93928 100644 --- a/Providers/FreeSql.Provider.GBase/Curd/GBaseInsert.cs +++ b/Providers/FreeSql.Provider.GBase/Curd/GBaseInsert.cs @@ -49,8 +49,8 @@ namespace FreeSql.GBase.Curd { if (identityType == typeof(int) || identityType == typeof(uint)) identitySql = "SELECT dbinfo('sqlca.sqlerrd1') FROM dual"; else if (identityType == typeof(long) || identityType == typeof(ulong)) identitySql = - identityCol.Attribute.DbType.IndexOf("bigserial", StringComparison.OrdinalIgnoreCase) != -1 ? - "SELECT dbinfo('bigserial') FROM dual" : "SELECT dbinfo('serial8') FROM dual"; + identityCol.Attribute.DbType.IndexOf("bigserial", StringComparison.OrdinalIgnoreCase) != -1 ? + "SELECT dbinfo('bigserial')::INT8 FROM dual" : "SELECT dbinfo('serial8') FROM dual"; } var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, string.Concat(sql, $"; {identitySql};"), _params); _orm.Aop.CurdBeforeHandler?.Invoke(this, before); From 868a04370e0d345e4925464a028a3297f6405679 Mon Sep 17 00:00:00 2001 From: zxr6367587 Date: Tue, 12 Nov 2024 15:35:03 +0800 Subject: [PATCH 24/38] fix-bigserial MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 解决bigserial类型列报114问题 --- Providers/FreeSql.Provider.GBase/GBaseProvider.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Providers/FreeSql.Provider.GBase/GBaseProvider.cs b/Providers/FreeSql.Provider.GBase/GBaseProvider.cs index e2feb9335..c4cb99ce1 100644 --- a/Providers/FreeSql.Provider.GBase/GBaseProvider.cs +++ b/Providers/FreeSql.Provider.GBase/GBaseProvider.cs @@ -65,6 +65,7 @@ namespace FreeSql.GBase case "SMALLFLOAT": return; case "BIGINT": + case "BIGSERIAL": //Unkonw SQL type -- 114. try { @@ -147,4 +148,4 @@ namespace FreeSql.GBase //$CLIENT_LOCALE : zh_CN.utf8 //JDBC URL : jdbc:gbasedbt-sqli://IPADDR:9088/testdb:GBASEDBTSERVER=gbase01;DB_LOCALE=zh_CN.utf8;CLIENT_LOCALE=zh_CN.utf8;IFX_LOCK_MODE_WAIT=10 //JDBC USERNAME : gbasedbt -//JDBC PASSWORD : GBase123 \ No newline at end of file +//JDBC PASSWORD : GBase123 From c986a1d9e1bed1f708cc358f000d2756a65d1f92 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Tue, 12 Nov 2024 21:08:59 +0800 Subject: [PATCH 25/38] v3.5.100-preview20241112 #1919 #1920 #1918 --- Directory.Build.props | 2 +- .../FreeSql.Extensions.AggregateRoot.csproj | 2 +- .../FreeSql.Extensions.BaseEntity.csproj | 2 +- .../FreeSql.Extensions.JsonMap.csproj | 2 +- .../FreeSql.Extensions.LazyLoading.csproj | 2 +- .../FreeSql.Extensions.Linq.csproj | 2 +- .../FreeSql.Extensions.ZeroEntity.csproj | 2 +- Extensions/FreeSql.Generator/FreeSql.Generator.csproj | 2 +- FreeSql.All/FreeSql.All.csproj | 2 +- FreeSql.DbContext/FreeSql.DbContext.csproj | 2 +- FreeSql.DbContext/FreeSql.DbContext.xml | 9 --------- FreeSql.Repository/FreeSql.Repository.csproj | 2 +- FreeSql/FreeSql.csproj | 2 +- .../FreeSql.Provider.ClickHouse.csproj | 2 +- .../FreeSql.Provider.Custom.csproj | 2 +- .../FreeSql.Provider.Dameng.csproj | 2 +- .../FreeSql.Provider.Duckdb.csproj | 2 +- .../FreeSql.Provider.Firebird.csproj | 2 +- .../FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj | 2 +- .../FreeSql.Provider.KingbaseES.csproj | 2 +- .../FreeSql.Provider.MsAccess.csproj | 2 +- .../FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj | 2 +- .../FreeSql.Provider.MySqlConnector.csproj | 2 +- .../FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj | 2 +- .../FreeSql.Provider.Oracle.csproj | 2 +- .../FreeSql.Provider.OracleOledb.csproj | 2 +- .../FreeSql.Provider.PostgreSQL.csproj | 2 +- .../FreeSql.Provider.QuestDb.csproj | 2 +- .../FreeSql.Provider.ShenTong.csproj | 2 +- .../FreeSql.Provider.SqlServer.csproj | 2 +- .../FreeSql.Provider.SqlServerForSystem.csproj | 2 +- .../FreeSql.Provider.Sqlite.csproj | 2 +- .../FreeSql.Provider.SqliteCore.csproj | 2 +- .../FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj | 2 +- 34 files changed, 33 insertions(+), 42 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index b9e51172c..eec0d5d64 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -12,7 +12,7 @@ diff --git a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj index affc9617d..959e2485d 100644 --- a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj +++ b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241108 + 3.5.100-preview20241112 readme.md diff --git a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj index 40d325633..914220042 100644 --- a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj +++ b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj @@ -19,7 +19,7 @@ key.snk false latest - 3.5.100-preview20241108 + 3.5.100-preview20241112 readme.md diff --git a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj index 732ab04eb..c47fad275 100644 --- a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj +++ b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241108 + 3.5.100-preview20241112 readme.md diff --git a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj index ba301c2b4..82d1d36c4 100644 --- a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj +++ b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20241108 + 3.5.100-preview20241112 readme.md diff --git a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj index cf22056d3..1d44e81fe 100644 --- a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj +++ b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241108 + 3.5.100-preview20241112 readme.md diff --git a/Extensions/FreeSql.Extensions.ZeroEntity/FreeSql.Extensions.ZeroEntity.csproj b/Extensions/FreeSql.Extensions.ZeroEntity/FreeSql.Extensions.ZeroEntity.csproj index 5df60d3ab..782026f35 100644 --- a/Extensions/FreeSql.Extensions.ZeroEntity/FreeSql.Extensions.ZeroEntity.csproj +++ b/Extensions/FreeSql.Extensions.ZeroEntity/FreeSql.Extensions.ZeroEntity.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241108 + 3.5.100-preview20241112 readme.md diff --git a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj index c53154d75..633ac69a4 100644 --- a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj +++ b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj @@ -13,7 +13,7 @@ https://github.com/2881099/FreeSql https://github.com/2881099/FreeSql FreeSql DbFirst 实体生成器 - 3.5.100-preview20241108 + 3.5.100-preview20241112 readme.md diff --git a/FreeSql.All/FreeSql.All.csproj b/FreeSql.All/FreeSql.All.csproj index e72948f3c..2f26bf41c 100644 --- a/FreeSql.All/FreeSql.All.csproj +++ b/FreeSql.All/FreeSql.All.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.5.100-preview20241108 + 3.5.100-preview20241112 readme.md diff --git a/FreeSql.DbContext/FreeSql.DbContext.csproj b/FreeSql.DbContext/FreeSql.DbContext.csproj index 6c9257528..ab22b885f 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.csproj +++ b/FreeSql.DbContext/FreeSql.DbContext.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.5.100-preview20241108 + 3.5.100-preview20241112 readme.md diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index a7a94fcda..08ab7dc4c 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -712,15 +712,6 @@ - - - 根据Assembly扫描所有继承IEntityTypeConfiguration<T>的配置类 - - - - - - 创建普通数据上下文档对象 diff --git a/FreeSql.Repository/FreeSql.Repository.csproj b/FreeSql.Repository/FreeSql.Repository.csproj index be8149b0b..9175718c4 100644 --- a/FreeSql.Repository/FreeSql.Repository.csproj +++ b/FreeSql.Repository/FreeSql.Repository.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.5.100-preview20241108 + 3.5.100-preview20241112 readme.md diff --git a/FreeSql/FreeSql.csproj b/FreeSql/FreeSql.csproj index ecdec4771..0a939f024 100644 --- a/FreeSql/FreeSql.csproj +++ b/FreeSql/FreeSql.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.5.100-preview20241108 + 3.5.100-preview20241112 readme.md diff --git a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj index 5d800028e..0c5faa0ad 100644 --- a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj +++ b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj @@ -19,7 +19,7 @@ False key.snk false - 3.5.100-preview20241108 + 3.5.100-preview20241112 readme.md diff --git a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj index 3bf34417e..a7df78a8c 100644 --- a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj +++ b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241108 + 3.5.100-preview20241112 readme.md diff --git a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj index c45dad4a8..e2c2e0c9c 100644 --- a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj +++ b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20241108 + 3.5.100-preview20241112 readme.md diff --git a/Providers/FreeSql.Provider.Duckdb/FreeSql.Provider.Duckdb.csproj b/Providers/FreeSql.Provider.Duckdb/FreeSql.Provider.Duckdb.csproj index da7c88d5b..21a27de35 100644 --- a/Providers/FreeSql.Provider.Duckdb/FreeSql.Provider.Duckdb.csproj +++ b/Providers/FreeSql.Provider.Duckdb/FreeSql.Provider.Duckdb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241108 + 3.5.100-preview20241112 readme.md diff --git a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj index 8cd034d98..0fa9176aa 100644 --- a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj +++ b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241108 + 3.5.100-preview20241112 readme.md diff --git a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj index 1c87f478d..0b3d636ec 100644 --- a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj +++ b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241108 + 3.5.100-preview20241112 readme.md diff --git a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj index 1e084587d..861a03b0a 100644 --- a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj +++ b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20241108 + 3.5.100-preview20241112 readme.md diff --git a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj index 5d781df7e..0e77a1b31 100644 --- a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj +++ b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241108 + 3.5.100-preview20241112 readme.md diff --git a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj index d78c5557f..dcf02127e 100644 --- a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj +++ b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241108 + 3.5.100-preview20241112 readme.md diff --git a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj index 0e0fc91dc..af6ebd26d 100644 --- a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj +++ b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241108 + 3.5.100-preview20241112 readme.md diff --git a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj index 564293279..f57e11fa4 100644 --- a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj +++ b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241108 + 3.5.100-preview20241112 readme.md diff --git a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj index a6c7fbff2..3e06a9924 100644 --- a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj +++ b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241108 + 3.5.100-preview20241112 readme.md diff --git a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj index 51a855b3a..8db8fbb59 100644 --- a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj +++ b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241108 + 3.5.100-preview20241112 readme.md diff --git a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj index da73aa952..ab0b78de6 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj +++ b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241108 + 3.5.100-preview20241112 readme.md diff --git a/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj b/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj index 287dacd4d..db60e9715 100644 --- a/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj +++ b/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241108 + 3.5.100-preview20241112 readme.md diff --git a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj index 6c4913e69..09ef34bdc 100644 --- a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj +++ b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20241108 + 3.5.100-preview20241112 readme.md diff --git a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj index b550cadb7..b8e77a337 100644 --- a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj +++ b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj @@ -18,7 +18,7 @@ true false key.snk - 3.5.100-preview20241108 + 3.5.100-preview20241112 readme.md diff --git a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj index e18b8b682..b0160ad42 100644 --- a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj +++ b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241108 + 3.5.100-preview20241112 readme.md diff --git a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj index 973089e95..4f8d23f01 100644 --- a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj +++ b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241108 + 3.5.100-preview20241112 readme.md diff --git a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj index 4aa1cad70..627cd1045 100644 --- a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj +++ b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241108 + 3.5.100-preview20241112 readme.md diff --git a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj index ed99ac6a5..0cd265936 100644 --- a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj +++ b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20241108 + 3.5.100-preview20241112 readme.md From e882269122b3b8f0df008016c1c2ef20960664b0 Mon Sep 17 00:00:00 2001 From: xieyidong Date: Wed, 13 Nov 2024 16:54:03 +0800 Subject: [PATCH 26/38] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E5=8D=87=E7=BA=A7?= =?UTF-8?q?=E8=BE=BE=E6=A2=A6=E6=95=B0=E6=8D=AE=E5=BA=93=E7=9A=84=E8=A1=A8?= =?UTF-8?q?=E7=BB=93=E6=9E=84=E6=97=B6=E7=94=B1=E4=BA=8Eselect=E4=B8=AD?= =?UTF-8?q?=E5=AD=97=E7=AC=A6=E4=B8=B2=E7=B2=BE=E8=AF=BB=E9=97=AE=E9=A2=98?= =?UTF-8?q?=EF=BC=8C=E8=80=8C=E5=AF=BC=E8=87=B4=E5=AD=97=E7=AC=A6=E4=B8=B2?= =?UTF-8?q?=E6=88=AA=E5=8F=96=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dameng/DamengCodeFirstTest.cs | 69 +++++++++++++++++++ .../DamengCodeFirst.cs | 11 +++ 2 files changed, 80 insertions(+) diff --git a/FreeSql.Tests/FreeSql.Tests/Dameng/DamengCodeFirstTest.cs b/FreeSql.Tests/FreeSql.Tests/Dameng/DamengCodeFirstTest.cs index 01dbc0221..481b51094 100644 --- a/FreeSql.Tests/FreeSql.Tests/Dameng/DamengCodeFirstTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Dameng/DamengCodeFirstTest.cs @@ -454,5 +454,74 @@ WHERE (a.""ID"" = 1) AND ROWNUM < 2"; public enum TableAllTypeEnumType1 { e1, e2, e3, e5 } [Flags] public enum TableAllTypeEnumType2 { f1, f2, f3 } + + + + [Fact] + public void UpgradeTableStructure() + { + g.dameng.CodeFirst.SyncStructure(); + + g.dameng.Delete() + .Where(item => 1 == 1) + .ExecuteAffrows(); + + var text = new StringBuilder(); + var temp = "1234567890哈"; + for (int i = 0; i < 3000 - temp.Length; i+= temp.Length) + { + text.Append(temp); + } + + var mode = new TableUpgradeTest + { + Name = "1234560123456012哈哈哈哈哈呵呵_123123", + Text = text.ToString(), + Text2 = "呵呵呵Test123123123" + }; + + mode.Id = g.dameng.Insert(mode) + .ExecuteIdentity(); + + // 第二次进行数据库结果同步 + var sql = g.dameng.CodeFirst.GetComparisonDDLStatements(); + g.dameng.Ado.ExecuteNonQuery(sql); + //g.dameng.CodeFirst.SyncStructure(); + + var resultMode = g.dameng.Select() + .Where(item => item.Id == mode.Id) + .First(); + + Assert.Equal(mode.Name, resultMode?.Name); + Assert.Equal(mode.Text, resultMode?.Text); + Assert.Equal(mode.Text2, resultMode?.Text2); + Assert.Equal(mode.Text3, resultMode?.Text3); + + } + + [Table(Name = "tb_upgrade_test")] + public class TableUpgradeTest + { + [Column(Name = "id", IsPrimary = true, IsIdentity = true)] + public long Id { get; set; } + + + [Column(Name = "name", StringLength = 31, IsNullable = false)] + public string Name { get; set; } + + [Column(Name = "text", StringLength = 32767, IsNullable = false)] + public string Text { get; set; } + + [Column(Name = "number_test", IsNullable = false)] + public int TestNumber { get; set; } + + [Column(Name = "text2", StringLength = 63)] + public string Text2 { get; set; } + + + [Column(Name = "text3")] + public string Text3 { get; set; } + } + } } diff --git a/Providers/FreeSql.Provider.Dameng/DamengCodeFirst.cs b/Providers/FreeSql.Provider.Dameng/DamengCodeFirst.cs index 664ddb376..f6142938e 100644 --- a/Providers/FreeSql.Provider.Dameng/DamengCodeFirst.cs +++ b/Providers/FreeSql.Provider.Dameng/DamengCodeFirst.cs @@ -358,6 +358,17 @@ and not exists(select 1 from all_constraints where index_name = a.index_name and if (tbcol.Attribute.DbType.StartsWith(tbstructcol.sqlType, StringComparison.CurrentCultureIgnoreCase) == false) { var dbtypeNoneNotNull = Regex.Replace(tbcol.Attribute.DbType, @"(NOT\s+)?NULL", ""); + + var charMatch = Regex.Match(dbtypeNoneNotNull, "(N?)VARCHAR(2?)\\((?[0-9]+)\\)"); + + if(charMatch != null) + { + if (ushort.TryParse(charMatch.Groups["precision"]?.Value, out var precision)) + { + dbtypeNoneNotNull = Regex.Replace(dbtypeNoneNotNull, $"\\(({precision})\\)", $""); + } + } + insertvalue = $"cast({insertvalue} as {dbtypeNoneNotNull})"; } if (tbcol.Attribute.IsNullable != tbstructcol.is_nullable) From 54d7679073c538858a20777da8159950623f102d Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Wed, 13 Nov 2024 21:27:56 +0800 Subject: [PATCH 27/38] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20Firebird=20?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E6=8F=92=E5=85=A5=20varchar=20=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0=E7=A9=BA=E6=A0=BC=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=9B?= =?UTF-8?q?#1923?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Examples/base_entity/Program.cs | 50 +++++++++++-------- FreeSql.DbContext/FreeSql.DbContext.xml | 17 +++++++ .../FirebirdUtils.cs | 1 + 3 files changed, 48 insertions(+), 20 deletions(-) diff --git a/Examples/base_entity/Program.cs b/Examples/base_entity/Program.cs index 5c6940483..c22994491 100644 --- a/Examples/base_entity/Program.cs +++ b/Examples/base_entity/Program.cs @@ -574,39 +574,39 @@ namespace base_entity //.UseSlaveWeight(10, 1, 1, 5) - //.UseConnectionString(FreeSql.DataType.Firebird, @"database=localhost:D:\fbdata\EXAMPLES.fdb;user=sysdba;password=123456;max pool size=5") + .UseConnectionString(FreeSql.DataType.Firebird, @"database=localhost:D:\fbdata\EXAMPLES.fdb;user=sysdba;password=123456;max pool size=5") //.UseQuoteSqlName(false) //.UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;min pool size=1;Max pool size=3;AllowLoadLocalInfile=true") - //.UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=3;TrustServerCertificate=true") - //.UseAdoConnectionPool(false) - //.UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=127.0.0.1;Port=5432;Username=postgres;Password=123456;Database=tedb;Pooling=true;Maximum Pool Size=2") - ////.UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=127.0.0.1;Port=5432;Username=postgres;Password=123456;Database=toc;Pooling=true;Maximum Pool Size=2") - //.UseNameConvert(FreeSql.Internal.NameConvertType.ToLower) + //.UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=3;TrustServerCertificate=true") + //.UseAdoConnectionPool(false) + //.UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=127.0.0.1;Port=5432;Username=postgres;Password=123456;Database=tedb;Pooling=true;Maximum Pool Size=2") + ////.UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=127.0.0.1;Port=5432;Username=postgres;Password=123456;Database=toc;Pooling=true;Maximum Pool Size=2") + //.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") - //.UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper) + //.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) - //.UseConnectionString(FreeSql.DataType.Dameng, "server=127.0.0.1;port=5236;user=2user;password=123456789;database=2user;poolsize=5;") - //.UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper) + //.UseConnectionString(FreeSql.DataType.Dameng, "server=127.0.0.1;port=5236;user=2user;password=123456789;database=2user;poolsize=5;") + //.UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper) - //.UseConnectionString(FreeSql.DataType.OdbcMySql, "Driver={MySQL ODBC 8.0 Unicode Driver};Server=127.0.0.1;Persist Security Info=False;Trusted_Connection=Yes;UID=root;PWD=root;DATABASE=cccddd_odbc;Charset=utf8;SslMode=none;Max pool size=2") + //.UseConnectionString(FreeSql.DataType.OdbcMySql, "Driver={MySQL ODBC 8.0 Unicode Driver};Server=127.0.0.1;Persist Security Info=False;Trusted_Connection=Yes;UID=root;PWD=root;DATABASE=cccddd_odbc;Charset=utf8;SslMode=none;Max pool size=2") - //.UseConnectionString(FreeSql.DataType.OdbcSqlServer, "Driver={SQL Server};Server=.;Persist Security Info=False;Trusted_Connection=Yes;Integrated Security=True;DATABASE=freesqlTest_odbc;Pooling=true;Max pool size=3") + //.UseConnectionString(FreeSql.DataType.OdbcSqlServer, "Driver={SQL Server};Server=.;Persist Security Info=False;Trusted_Connection=Yes;Integrated Security=True;DATABASE=freesqlTest_odbc;Pooling=true;Max pool size=3") - //.UseConnectionString(FreeSql.DataType.OdbcPostgreSQL, "Driver={PostgreSQL Unicode(x64)};Server=127.0.0.1;Port=5432;UID=postgres;PWD=123456;Database=tedb_odbc;Pooling=true;Maximum Pool Size=2") - //.UseNameConvert(FreeSql.Internal.NameConvertType.ToLower) + //.UseConnectionString(FreeSql.DataType.OdbcPostgreSQL, "Driver={PostgreSQL Unicode(x64)};Server=127.0.0.1;Port=5432;UID=postgres;PWD=123456;Database=tedb_odbc;Pooling=true;Maximum Pool Size=2") + //.UseNameConvert(FreeSql.Internal.NameConvertType.ToLower) - //.UseConnectionString(FreeSql.DataType.OdbcOracle, "Driver={Oracle in XE};Server=//127.0.0.1:1521/XE;Persist Security Info=False;Trusted_Connection=Yes;UID=odbc1;PWD=123456") - //.UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper) + //.UseConnectionString(FreeSql.DataType.OdbcOracle, "Driver={Oracle in XE};Server=//127.0.0.1:1521/XE;Persist Security Info=False;Trusted_Connection=Yes;UID=odbc1;PWD=123456") + //.UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper) - //.UseConnectionString(FreeSql.DataType.OdbcDameng, "Driver={DM8 ODBC DRIVER};Server=127.0.0.1:5236;Persist Security Info=False;Trusted_Connection=Yes;UID=USER1;PWD=123456789") - //.UseConnectionString(DataType.QuestDb, "host=localhost;port=8812;username=admin;password=quest;database=qdb;ServerCompatibilityMode=NoTypeLoading;") + //.UseConnectionString(FreeSql.DataType.OdbcDameng, "Driver={DM8 ODBC DRIVER};Server=127.0.0.1:5236;Persist Security Info=False;Trusted_Connection=Yes;UID=USER1;PWD=123456789") + //.UseConnectionString(DataType.QuestDb, "host=localhost;port=8812;username=admin;password=quest;database=qdb;ServerCompatibilityMode=NoTypeLoading;") - //.UseConnectionString(DataType.ClickHouse, "DataCompress=False;BufferSize=32768;SocketTimeout=10000;CheckCompressedHash=False;Encrypt=False;Compressor=lz4;Host=192.168.0.121;Port=8125;Database=PersonnelLocation;Username=root;Password=123") + //.UseConnectionString(DataType.ClickHouse, "DataCompress=False;BufferSize=32768;SocketTimeout=10000;CheckCompressedHash=False;Encrypt=False;Compressor=lz4;Host=192.168.0.121;Port=8125;Database=PersonnelLocation;Username=root;Password=123") //.UseConnectionFactory(DataType.ClickHouse, () => null) - .UseMonitorCommand(cmd => + .UseMonitorCommand(cmd => { Console.WriteLine(cmd.CommandText + "\r\n"); //cmd.CommandText = null; //不执行 @@ -619,6 +619,16 @@ namespace base_entity BaseEntity.Initialization(fsql, () => _asyncUow.Value); #endregion + fsql.Delete().Where("1=1").ExecuteAffrows(); + fsql.Insert(new List + { + new User1 { Nickname = "nickname11", Username = "username11", Description = "desc11" }, + new User1 { Nickname = "n2", Username = "u2", Description = "d2" }, + new User1 { Nickname = "n3", Username = "u3", Description = "d3" }, + }).ExecuteAffrows(); + + var firebirdList01 = fsql.Select().ToList(); + fsql.UseJsonMap(); fsql.Select().Where(a => a.Options.Value1 == 100 && a.Options.Value2 == "xx").ToList(); diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index 08ab7dc4c..c941a15d9 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -712,6 +712,15 @@ + + + 根据Assembly扫描所有继承IEntityTypeConfiguration<T>的配置类 + + + + + + 创建普通数据上下文档对象 @@ -749,5 +758,13 @@ + + + 批量注入 Repository,可以参考代码自行调整 + + + + + diff --git a/Providers/FreeSql.Provider.Firebird/FirebirdUtils.cs b/Providers/FreeSql.Provider.Firebird/FirebirdUtils.cs index e9162b893..78afb25db 100644 --- a/Providers/FreeSql.Provider.Firebird/FirebirdUtils.cs +++ b/Providers/FreeSql.Provider.Firebird/FirebirdUtils.cs @@ -89,6 +89,7 @@ namespace FreeSql.Firebird if (value == null) return "NULL"; if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value); if (type == typeof(byte[])) return $"x'{CommonUtils.BytesSqlRaw(value as byte[])}'"; + if (type == typeof(string) && (specialParamFlag == "c" || specialParamFlag == "cu")) return $"cast('{value.ToString().Replace("'", "''")}' as varchar({col.DbSize}))"; //#1923 return FormatSql("{0}", value, 1); } } From 78415d83b84c2c2ea9cf869038576b2233966955 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Wed, 13 Nov 2024 21:36:29 +0800 Subject: [PATCH 28/38] v3.5.100-preview20241113 #1923 #1922 --- Directory.Build.props | 2 +- .../FreeSql.Extensions.AggregateRoot.csproj | 2 +- .../FreeSql.Extensions.BaseEntity.csproj | 2 +- .../FreeSql.Extensions.JsonMap.csproj | 2 +- .../FreeSql.Extensions.LazyLoading.csproj | 2 +- .../FreeSql.Extensions.Linq.csproj | 2 +- .../FreeSql.Extensions.ZeroEntity.csproj | 2 +- .../FreeSql.Generator.csproj | 2 +- FreeSql.All/FreeSql.All.csproj | 2 +- FreeSql.DbContext/FreeSql.DbContext.csproj | 2 +- FreeSql.DbContext/FreeSql.DbContext.xml | 8 - FreeSql.Repository/FreeSql.Repository.csproj | 2 +- FreeSql/FreeSql.csproj | 2 +- FreeSql/FreeSql.xml | 232 ++++++++++-------- .../FreeSql.Provider.ClickHouse.csproj | 2 +- .../FreeSql.Provider.Custom.csproj | 2 +- .../FreeSql.Provider.Dameng.csproj | 2 +- .../FreeSql.Provider.Duckdb.csproj | 2 +- .../FirebirdUtils.cs | 2 +- .../FreeSql.Provider.Firebird.csproj | 2 +- .../FreeSql.Provider.GBase.csproj | 2 +- .../FreeSql.Provider.KingbaseES.csproj | 2 +- .../FreeSql.Provider.MsAccess.csproj | 2 +- .../FreeSql.Provider.MySql.csproj | 2 +- .../FreeSql.Provider.MySqlConnector.csproj | 2 +- .../FreeSql.Provider.Odbc.csproj | 2 +- .../FreeSql.Provider.Oracle.csproj | 2 +- .../FreeSql.Provider.OracleOledb.csproj | 2 +- .../FreeSql.Provider.PostgreSQL.csproj | 2 +- .../FreeSql.Provider.QuestDb.csproj | 2 +- .../FreeSql.Provider.ShenTong.csproj | 2 +- .../FreeSql.Provider.SqlServer.csproj | 2 +- ...FreeSql.Provider.SqlServerForSystem.csproj | 2 +- .../FreeSql.Provider.Sqlite.csproj | 2 +- .../FreeSql.Provider.SqliteCore.csproj | 2 +- .../FreeSql.Provider.Xugu.csproj | 2 +- 36 files changed, 157 insertions(+), 151 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index eec0d5d64..7db6e7191 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -12,7 +12,7 @@ diff --git a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj index 959e2485d..6581dff69 100644 --- a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj +++ b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241112 + 3.5.100-preview20241113 readme.md diff --git a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj index 914220042..ce12c130c 100644 --- a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj +++ b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj @@ -19,7 +19,7 @@ key.snk false latest - 3.5.100-preview20241112 + 3.5.100-preview20241113 readme.md diff --git a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj index c47fad275..937570027 100644 --- a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj +++ b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241112 + 3.5.100-preview20241113 readme.md diff --git a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj index 82d1d36c4..381868ecc 100644 --- a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj +++ b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20241112 + 3.5.100-preview20241113 readme.md diff --git a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj index 1d44e81fe..227fb1e41 100644 --- a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj +++ b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241112 + 3.5.100-preview20241113 readme.md diff --git a/Extensions/FreeSql.Extensions.ZeroEntity/FreeSql.Extensions.ZeroEntity.csproj b/Extensions/FreeSql.Extensions.ZeroEntity/FreeSql.Extensions.ZeroEntity.csproj index 782026f35..8770ab876 100644 --- a/Extensions/FreeSql.Extensions.ZeroEntity/FreeSql.Extensions.ZeroEntity.csproj +++ b/Extensions/FreeSql.Extensions.ZeroEntity/FreeSql.Extensions.ZeroEntity.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241112 + 3.5.100-preview20241113 readme.md diff --git a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj index 633ac69a4..6c8e04278 100644 --- a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj +++ b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj @@ -13,7 +13,7 @@ https://github.com/2881099/FreeSql https://github.com/2881099/FreeSql FreeSql DbFirst 实体生成器 - 3.5.100-preview20241112 + 3.5.100-preview20241113 readme.md diff --git a/FreeSql.All/FreeSql.All.csproj b/FreeSql.All/FreeSql.All.csproj index 2f26bf41c..46b55b9f8 100644 --- a/FreeSql.All/FreeSql.All.csproj +++ b/FreeSql.All/FreeSql.All.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.5.100-preview20241112 + 3.5.100-preview20241113 readme.md diff --git a/FreeSql.DbContext/FreeSql.DbContext.csproj b/FreeSql.DbContext/FreeSql.DbContext.csproj index ab22b885f..ba90924e9 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.csproj +++ b/FreeSql.DbContext/FreeSql.DbContext.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.5.100-preview20241112 + 3.5.100-preview20241113 readme.md diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index c941a15d9..a7a94fcda 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -758,13 +758,5 @@ - - - 批量注入 Repository,可以参考代码自行调整 - - - - - diff --git a/FreeSql.Repository/FreeSql.Repository.csproj b/FreeSql.Repository/FreeSql.Repository.csproj index 9175718c4..e885fc124 100644 --- a/FreeSql.Repository/FreeSql.Repository.csproj +++ b/FreeSql.Repository/FreeSql.Repository.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.5.100-preview20241112 + 3.5.100-preview20241113 readme.md diff --git a/FreeSql/FreeSql.csproj b/FreeSql/FreeSql.csproj index 0a939f024..0eff1a6e3 100644 --- a/FreeSql/FreeSql.csproj +++ b/FreeSql/FreeSql.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.5.100-preview20241112 + 3.5.100-preview20241113 readme.md diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 8e9e51672..fdde4800e 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -1087,93 +1087,6 @@ - - - 动态创建实体类型 - - - - - 配置Class - - 类名 - 类标记的特性[Table(Name = "xxx")] [Index(xxxx)] - - - - - 获取类型构建器,可作为要构建的Type来引用 - - - - - 配置属性 - - 属性名称 - 属性类型 - 属性标记的特性-支持多个 - - - - - 配置属性 - - 属性名称 - 属性类型 - 该属性是否重写父类属性 - 属性标记的特性-支持多个 - - - - - 配置属性 - - 属性名称 - 属性类型 - 该属性是否重写父类属性 - 属性默认值 - 属性标记的特性-支持多个 - - - - - 配置父类 - - 父类类型 - - - - - Override属性 - - - - - - Emit动态创建出Class - Type - - - - - - Emit动态创建出Class - Type,不附带获取TableInfo - - - - - - 首字母小写 - - - - - - - 首字母大写 - - - - 获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值时,返回 "" @@ -5897,28 +5810,6 @@ 对象池 - - - 动态构建Class Type - - - - - - 根据字典,创建 table 对应的实体对象 - - - - - - - - 根据实体对象,创建 table 对应的字典 - - - - - C#: that >= between && that <= and @@ -6455,3 +6346,126 @@ + + + + + 插入数据,传入实体集合 + + + + + + + + 插入数据,传入实体集合 + + + + + + + + 插入或更新数据,此功能依赖数据库特性(低版本可能不支持),参考如下: + MySql 5.6+: on duplicate key update + PostgreSQL 9.4+: on conflict do update + SqlServer 2008+: merge into + Oracle 11+: merge into + Sqlite: replace into + DuckDB: on conflict do update + 达梦: merge into + 人大金仓:on conflict do update + 神通:merge into + MsAccess:不支持 + 注意区别:FreeSql.Repository 仓储也有 InsertOrUpdate 方法(不依赖数据库特性) + + + + + + + 修改数据 + + + + + + + 修改数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} + + + 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 + + + + + 查询数据 + + + + + + + 查询数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} + + + 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 + + + + + 删除数据 + + + + + + + 删除数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} + + + 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 + + + + + 开启事务(不支持异步) + v1.5.0 关闭了线程事务超时自动提交的机制 + + 事务体 () => {} + + + + 开启事务(不支持异步) + v1.5.0 关闭了线程事务超时自动提交的机制 + + + 事务体 () => {} + + + + 数据库访问对象 + + + + + 所有拦截方法都在这里 + + + + + CodeFirst 模式开发相关方法 + + + + + DbFirst 模式开发相关方法 + + + + + 全局过滤设置,可默认附加为 Select/Update/Delete 条件 + + + + diff --git a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj index 0c5faa0ad..d6a582082 100644 --- a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj +++ b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj @@ -19,7 +19,7 @@ False key.snk false - 3.5.100-preview20241112 + 3.5.100-preview20241113 readme.md diff --git a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj index a7df78a8c..ae5fbbb08 100644 --- a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj +++ b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241112 + 3.5.100-preview20241113 readme.md diff --git a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj index e2c2e0c9c..4d50cd7b4 100644 --- a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj +++ b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20241112 + 3.5.100-preview20241113 readme.md diff --git a/Providers/FreeSql.Provider.Duckdb/FreeSql.Provider.Duckdb.csproj b/Providers/FreeSql.Provider.Duckdb/FreeSql.Provider.Duckdb.csproj index 21a27de35..b60510758 100644 --- a/Providers/FreeSql.Provider.Duckdb/FreeSql.Provider.Duckdb.csproj +++ b/Providers/FreeSql.Provider.Duckdb/FreeSql.Provider.Duckdb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241112 + 3.5.100-preview20241113 readme.md diff --git a/Providers/FreeSql.Provider.Firebird/FirebirdUtils.cs b/Providers/FreeSql.Provider.Firebird/FirebirdUtils.cs index 78afb25db..d58f14eee 100644 --- a/Providers/FreeSql.Provider.Firebird/FirebirdUtils.cs +++ b/Providers/FreeSql.Provider.Firebird/FirebirdUtils.cs @@ -89,7 +89,7 @@ namespace FreeSql.Firebird if (value == null) return "NULL"; if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value); if (type == typeof(byte[])) return $"x'{CommonUtils.BytesSqlRaw(value as byte[])}'"; - if (type == typeof(string) && (specialParamFlag == "c" || specialParamFlag == "cu")) return $"cast('{value.ToString().Replace("'", "''")}' as varchar({col.DbSize}))"; //#1923 + if (type == typeof(string) && col != null && (specialParamFlag == "c" || specialParamFlag == "cu")) return $"cast('{value.ToString().Replace("'", "''")}' as {col.Attribute.DbType})"; //#1923 return FormatSql("{0}", value, 1); } } diff --git a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj index 0fa9176aa..fb9892b16 100644 --- a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj +++ b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241112 + 3.5.100-preview20241113 readme.md diff --git a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj index 0b3d636ec..c3d1bb37c 100644 --- a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj +++ b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241112 + 3.5.100-preview20241113 readme.md diff --git a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj index 861a03b0a..34d74d719 100644 --- a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj +++ b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20241112 + 3.5.100-preview20241113 readme.md diff --git a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj index 0e77a1b31..55890cc22 100644 --- a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj +++ b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241112 + 3.5.100-preview20241113 readme.md diff --git a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj index dcf02127e..d9527bed9 100644 --- a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj +++ b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241112 + 3.5.100-preview20241113 readme.md diff --git a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj index af6ebd26d..2d31ddb6d 100644 --- a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj +++ b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241112 + 3.5.100-preview20241113 readme.md diff --git a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj index f57e11fa4..04e826c6d 100644 --- a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj +++ b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241112 + 3.5.100-preview20241113 readme.md diff --git a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj index 3e06a9924..b1c754c5b 100644 --- a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj +++ b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241112 + 3.5.100-preview20241113 readme.md diff --git a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj index 8db8fbb59..b90959036 100644 --- a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj +++ b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241112 + 3.5.100-preview20241113 readme.md diff --git a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj index ab0b78de6..834a72d8a 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj +++ b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241112 + 3.5.100-preview20241113 readme.md diff --git a/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj b/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj index db60e9715..3fa8114bb 100644 --- a/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj +++ b/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241112 + 3.5.100-preview20241113 readme.md diff --git a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj index 09ef34bdc..4d98e7a0f 100644 --- a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj +++ b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20241112 + 3.5.100-preview20241113 readme.md diff --git a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj index b8e77a337..3c4130b6f 100644 --- a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj +++ b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj @@ -18,7 +18,7 @@ true false key.snk - 3.5.100-preview20241112 + 3.5.100-preview20241113 readme.md diff --git a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj index b0160ad42..731901075 100644 --- a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj +++ b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241112 + 3.5.100-preview20241113 readme.md diff --git a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj index 4f8d23f01..bd86071be 100644 --- a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj +++ b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241112 + 3.5.100-preview20241113 readme.md diff --git a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj index 627cd1045..a9f4cd1e6 100644 --- a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj +++ b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241112 + 3.5.100-preview20241113 readme.md diff --git a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj index 0cd265936..aafabf6b2 100644 --- a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj +++ b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20241112 + 3.5.100-preview20241113 readme.md From 2f1de762a2d8b58dac617e75485c3dcaa8ad59d2 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Fri, 15 Nov 2024 14:42:43 +0800 Subject: [PATCH 29/38] =?UTF-8?q?-=20=E4=BC=98=E5=8C=96=20Lambda=20Dto=20?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=20.Any()=20=E8=87=AA=E5=8A=A8=E8=BD=AC?= =?UTF-8?q?=E6=88=90=20Case=20when=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql.DbContext/FreeSql.DbContext.xml | 17 ++++++++++++++ FreeSql/Internal/CommonExpression.cs | 31 ++++++++++++++++--------- 2 files changed, 37 insertions(+), 11 deletions(-) diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index 08ab7dc4c..c941a15d9 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -712,6 +712,15 @@ + + + 根据Assembly扫描所有继承IEntityTypeConfiguration<T>的配置类 + + + + + + 创建普通数据上下文档对象 @@ -749,5 +758,13 @@ + + + 批量注入 Repository,可以参考代码自行调整 + + + + + diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index 1d34f6934..9069da27e 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -329,15 +329,18 @@ namespace FreeSql.Internal //处理构造参数 for (var a = 0; a < initExp.NewExpression.Arguments.Count; a++) { + var initExpArg = initExp.NewExpression.Arguments[a]; + if (initExpArg.Type == typeof(bool) && initExpArg.NodeType == ExpressionType.Call) + initExpArg = Expression.Condition(initExpArg, Expression.Constant(true, typeof(bool)), Expression.Constant(false, typeof(bool))); var child = new ReadAnonymousTypeInfo { Property = null, - CsName = initExp.NewExpression.Members != null ? initExp.NewExpression.Members[a].Name : (initExp.NewExpression.Arguments[a] as MemberExpression)?.Member.Name, - CsType = initExp.NewExpression.Arguments[a].Type, - MapType = initExp.NewExpression.Arguments[a].Type + CsName = initExp.NewExpression.Members != null ? initExp.NewExpression.Members[a].Name : (initExpArg as MemberExpression)?.Member.Name, + CsType = initExpArg.Type, + MapType = initExpArg.Type }; parent.Childs.Add(child); - ReadAnonymousField(_tables, _tableRule, field, child, ref index, initExp.NewExpression.Arguments[a], select, diymemexp, whereGlobalFilter, findIncludeMany, findSubSelectMany, false); + ReadAnonymousField(_tables, _tableRule, field, child, ref index, initExpArg, select, diymemexp, whereGlobalFilter, findIncludeMany, findSubSelectMany, false); } } else if (isAllDtoMap && _tables != null && _tables.Any() && initExp.NewExpression.Type != _tables.FirstOrDefault().Table.Type) @@ -424,16 +427,19 @@ namespace FreeSql.Internal { var initAssignExp = (initExp.Bindings[a] as MemberAssignment); if (initAssignExp == null) continue; + var initExpArg = initAssignExp.Expression; + if (initExpArg.Type == typeof(bool) && initExpArg.NodeType == ExpressionType.Call) + initExpArg = Expression.Condition(initExpArg, Expression.Constant(true, typeof(bool)), Expression.Constant(false, typeof(bool))); var child = new ReadAnonymousTypeInfo { Property = initExp.Type.GetProperty(initExp.Bindings[a].Member.Name, BindingFlags.Public | BindingFlags.Instance), //#427 不能使用 BindingFlags.IgnoreCase CsName = initExp.Bindings[a].Member.Name, - CsType = initAssignExp.Expression.Type, - MapType = initAssignExp.Expression.Type + CsType = initExpArg.Type, + MapType = initExpArg.Type }; if (child.Property == null) child.ReflectionField = initExp.Type.GetField(initExp.Bindings[a].Member.Name, BindingFlags.Public | BindingFlags.Instance); parent.Childs.Add(child); - ReadAnonymousField(_tables, _tableRule, field, child, ref index, initAssignExp.Expression, select, diymemexp, whereGlobalFilter, findIncludeMany, findSubSelectMany, false); + ReadAnonymousField(_tables, _tableRule, field, child, ref index, initExpArg, select, diymemexp, whereGlobalFilter, findIncludeMany, findSubSelectMany, false); } } if (parent.Childs.Any() == false) throw new Exception(CoreErrorStrings.Mapping_Exception_HasNo_SamePropertyName(initExp.NewExpression.Type.Name)); @@ -458,16 +464,19 @@ namespace FreeSql.Internal //处理构造参数 for (var a = 0; a < newExp.Arguments.Count; a++) { - var csname = newExp.Members != null ? newExp.Members[a].Name : (newExp.Arguments[a] as MemberExpression)?.Member.Name; + var initExpArg = newExp.Arguments[a]; + if (initExpArg.Type == typeof(bool) && initExpArg.NodeType == ExpressionType.Call) + initExpArg = Expression.Condition(initExpArg, Expression.Constant(true, typeof(bool)), Expression.Constant(false, typeof(bool))); + var csname = newExp.Members != null ? newExp.Members[a].Name : (initExpArg as MemberExpression)?.Member.Name; var child = new ReadAnonymousTypeInfo { Property = null, CsName = csname, - CsType = newExp.Arguments[a].Type, - MapType = newExp.Arguments[a].Type + CsType = initExpArg.Type, + MapType = initExpArg.Type }; parent.Childs.Add(child); - ReadAnonymousField(_tables, _tableRule, field, child, ref index, newExp.Arguments[a], select, diymemexp, whereGlobalFilter, findIncludeMany, findSubSelectMany, false); + ReadAnonymousField(_tables, _tableRule, field, child, ref index, initExpArg, select, diymemexp, whereGlobalFilter, findIncludeMany, findSubSelectMany, false); if (child.CsName == null) child.CsName = csname; } From 0b7b071e9ffb139df6dac181ff450c22adc53925 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Sat, 16 Nov 2024 12:01:37 +0800 Subject: [PATCH 30/38] =?UTF-8?q?-=20=E5=A2=9E=E5=8A=A0=20a.Id,In(..)=20?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E5=87=BD=E6=95=B0=E8=A7=A3=E6=9E=90?= =?UTF-8?q?=EF=BC=8C=E6=88=96=20new[]{=201,2,3=20}.Contains(a.Id)=20?= =?UTF-8?q?=E7=9B=B8=E5=90=8C=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FreeSqlGlobalExpressionCallExtensions.cs | 72 +++++++++++++++++-- 1 file changed, 65 insertions(+), 7 deletions(-) diff --git a/FreeSql/Extensions/FreeSqlGlobalExpressionCallExtensions.cs b/FreeSql/Extensions/FreeSqlGlobalExpressionCallExtensions.cs index e9ac61184..9d50d3d3e 100644 --- a/FreeSql/Extensions/FreeSqlGlobalExpressionCallExtensions.cs +++ b/FreeSql/Extensions/FreeSqlGlobalExpressionCallExtensions.cs @@ -68,7 +68,65 @@ public static class FreeSqlGlobalExpressionCallExtensions expContext.Value.ParsedContent["end"]; expContext.Value.Result = $"{expContext.Value.ParsedContent["that"]} >= {time1} and {expContext.Value.ParsedContent["that"]} < {time2}"; return false; - } + } + + #region IN 与 new[]{ 1,2,3 }.Contains(a.Id) 相同 + static Dictionary pc => expContext.Value.ParsedContent; + /// + /// field IN (value1) + /// + public static bool In(this T field, T value1) + { + if (expContext.Value == null) return field.Equals(value1); + expContext.Value.Result = $"{pc["field"]} = {pc["value1"]}"; + return true; + } + /// + /// field in (value1, value2) + /// + public static bool In(this T field, T value1, T value2) + { + if (expContext.Value == null) return field.Equals(value1) || field.Equals(value2); + expContext.Value.Result = $"{pc["field"]} IN ({pc["value1"]},{pc["value2"]})"; + return true; + } + /// + /// field in (value1, value2, value3) + /// + public static bool In(this T field, T value1, T value2, T value3) + { + if (expContext.Value == null) return field.Equals(value1) || field.Equals(value2) || field.Equals(value3); + expContext.Value.Result = $"{pc["field"]} IN ({pc["value1"]},{pc["value2"]},{pc["value3"]})"; + return true; + } + /// + /// field in (value1, value2, value3, value4) + /// + public static bool In(this T field, T value1, T value2, T value3, T value4) + { + if (expContext.Value == null) return field.Equals(value1) || field.Equals(value2) || field.Equals(value3) || field.Equals(value4); + expContext.Value.Result = $"{pc["field"]} IN ({pc["value1"]},{pc["value2"]},{pc["value3"]},{pc["value4"]})"; + return true; + } + /// + /// field in (value1, value2, value3, value4, value5) + /// + public static bool In(this T field, T value1, T value2, T value3, T value4, T value5) + { + if (expContext.Value == null) return field.Equals(value1) || field.Equals(value2) || field.Equals(value3) || field.Equals(value4) || field.Equals(value5); + expContext.Value.Result = $"{pc["field"]} IN ({pc["value1"]},{pc["value2"]},{pc["value3"]},{pc["value4"]},{pc["value5"]})"; + return true; + } + /// + /// field in (values) + /// + public static bool In(this T field, T[] values) + { + if (expContext.Value == null) return values?.Contains(field) == true; + expContext.Value.Result = $"{pc["field"]} IN {pc["values"]}"; + return true; + } + #endregion } namespace FreeSql @@ -284,13 +342,13 @@ namespace FreeSql } return 0; } - #endregion + #endregion - /// - /// case when .. then .. end - /// - /// - public static ICaseWhenEnd Case() => SqlExtExtensions.Case(); + /// + /// case when .. then .. end + /// + /// + public static ICaseWhenEnd Case() => SqlExtExtensions.Case(); /// /// case when .. then .. end /// From 85e732fab0507cb03611547177470fedff8f5829 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Fri, 22 Nov 2024 11:23:32 +0800 Subject: [PATCH 31/38] =?UTF-8?q?-=20=E6=81=A2=E5=A4=8D=20BaseEntity=20Sav?= =?UTF-8?q?eMany=20=E6=96=B9=E6=B3=95=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AggregateRootRepositoryAsync.cs | 10 ++ .../BaseEntity.cs | 13 ++ .../BaseEntityAsync.cs | 13 ++ .../FreeSql.Extensions.BaseEntity.xml | 14 ++ FreeSql.DbContext/DbSet/DbSetAsync.cs | 59 +++++++ .../Repository/BaseRepositoryAsync.cs | 6 + .../Repository/Repository/IBaseRepository.cs | 1 + FreeSql/FreeSql.xml | 153 ++++-------------- 8 files changed, 146 insertions(+), 123 deletions(-) diff --git a/Extensions/FreeSql.Extensions.AggregateRoot/AggregateRootRepository/AggregateRootRepositoryAsync.cs b/Extensions/FreeSql.Extensions.AggregateRoot/AggregateRootRepository/AggregateRootRepositoryAsync.cs index b84d2548f..d01d1f7de 100644 --- a/Extensions/FreeSql.Extensions.AggregateRoot/AggregateRootRepository/AggregateRootRepositoryAsync.cs +++ b/Extensions/FreeSql.Extensions.AggregateRoot/AggregateRootRepository/AggregateRootRepositoryAsync.cs @@ -226,6 +226,16 @@ namespace FreeSql return affrows; } + async public virtual Task SaveManyAsync(TEntity entity, string propertyName, CancellationToken cancellationToken = default) + { + var tracking = new AggregateRootTrackingChangeInfo(); + var stateKey = Orm.GetEntityKeyString(EntityType, entity, false); + if (_states.TryGetValue(stateKey, out var state) == false) throw new Exception($"AggregateRootRepository 使用仓储对象查询后,才可以保存数据 {Orm.GetEntityString(EntityType, entity)}"); + AggregateRootUtils.CompareEntityValue(_boundaryName, Orm, EntityType, state.Value, entity, propertyName, tracking); + await SaveTrackingChangeAsync(tracking, cancellationToken); + Attach(entity); //应该只存储 propertyName 内容 + } + async Task SaveTrackingChangeAsync(AggregateRootTrackingChangeInfo tracking, CancellationToken cancellationToken) { var affrows = 0; diff --git a/Extensions/FreeSql.Extensions.BaseEntity/BaseEntity.cs b/Extensions/FreeSql.Extensions.BaseEntity/BaseEntity.cs index 5deee117e..24f347281 100644 --- a/Extensions/FreeSql.Extensions.BaseEntity/BaseEntity.cs +++ b/Extensions/FreeSql.Extensions.BaseEntity/BaseEntity.cs @@ -162,5 +162,18 @@ namespace FreeSql Repository.UnitOfWork = _resolveUow?.Invoke(); return Repository.InsertOrUpdate(this as TEntity); } + + /// + /// To completely save the navigation properties of the entity in the form of sub-tables.
+ /// 【完整】保存导航属性,子表 + ///
+ /// Navigation property name + public virtual void SaveMany(string navigatePropertyName) + { + if (Repository == null) + Repository = Orm.GetRepository(); + Repository.UnitOfWork = _resolveUow?.Invoke(); + Repository.SaveMany(this as TEntity, navigatePropertyName); + } } } \ No newline at end of file diff --git a/Extensions/FreeSql.Extensions.BaseEntity/BaseEntityAsync.cs b/Extensions/FreeSql.Extensions.BaseEntity/BaseEntityAsync.cs index 908288189..da57e2036 100644 --- a/Extensions/FreeSql.Extensions.BaseEntity/BaseEntityAsync.cs +++ b/Extensions/FreeSql.Extensions.BaseEntity/BaseEntityAsync.cs @@ -149,6 +149,19 @@ namespace FreeSql Repository.UnitOfWork = _resolveUow?.Invoke(); return Repository.InsertOrUpdateAsync(this as TEntity); } + + /// + /// To completely save the navigation properties of the entity in the form of sub-tables.
+ /// 【完整】保存导航属性,子表 + ///
+ /// Navigation property name + public virtual Task SaveManyAsync(string navigatePropertyName) + { + if (Repository == null) + Repository = Orm.GetRepository(); + Repository.UnitOfWork = _resolveUow?.Invoke(); + return Repository.SaveManyAsync(this as TEntity, navigatePropertyName); + } #endif } } \ No newline at end of file diff --git a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.xml b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.xml index 1508d48fe..f5d4630c1 100644 --- a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.xml +++ b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.xml @@ -82,6 +82,13 @@
+ + + To completely save the navigation properties of the entity in the form of sub-tables.
+ 【完整】保存导航属性,子表 +
+ Navigation property name +
Entity base class, including CreateTime/UpdateTime/IsDeleted, the async CRUD methods, and ID primary key definition. @@ -152,6 +159,13 @@ + + + To completely save the navigation properties of the entity in the form of sub-tables.
+ 【完整】保存导航属性,子表 +
+ Navigation property name +
Entity base class, including CreateTime/UpdateTime/IsDeleted. diff --git a/FreeSql.DbContext/DbSet/DbSetAsync.cs b/FreeSql.DbContext/DbSet/DbSetAsync.cs index 361bd4473..4db2fbe4f 100644 --- a/FreeSql.DbContext/DbSet/DbSetAsync.cs +++ b/FreeSql.DbContext/DbSet/DbSetAsync.cs @@ -149,6 +149,65 @@ namespace FreeSql await AddOrUpdateNavigateAsync(item, true, null, cancellationToken); } + async public Task SaveManyAsync(TEntity item, string propertyName, CancellationToken cancellationToken = default) + { + if (item == null) return; + if (string.IsNullOrEmpty(propertyName)) return; + if (_table.Properties.TryGetValue(propertyName, out var prop) == false) throw new KeyNotFoundException(DbContextErrorStrings.NotFound_Property(_table.Type.FullName, propertyName)); + if (_table.ColumnsByCsIgnore.ContainsKey(propertyName)) throw new ArgumentException(DbContextErrorStrings.TypeHasSetProperty_IgnoreAttribute(_table.Type.FullName, propertyName)); + + var tref = _table.GetTableRef(propertyName, true, false); + if (tref == null) return; + switch (tref.RefType) + { + case TableRefType.OneToOne: + case TableRefType.ManyToOne: + case TableRefType.PgArrayToMany: + throw new ArgumentException(DbContextErrorStrings.PropertyOfType_IsNot_OneToManyOrManyToMany(_table.Type.FullName, propertyName)); + } + + await DbContextFlushCommandAsync(cancellationToken); + var oldEnable = _db.Options.EnableCascadeSave; + _db.Options.EnableCascadeSave = false; + try + { + await AddOrUpdateNavigateAsync(item, false, propertyName, cancellationToken); + if (tref.RefType == TableRefType.OneToMany) + { + await DbContextFlushCommandAsync(cancellationToken); + //删除没有保存的数据,求出主体的条件 + var deleteWhereParentParam = Expression.Parameter(typeof(object), "a"); + Expression whereParentExp = null; + for (var colidx = 0; colidx < tref.Columns.Count; colidx++) + { + var whereExp = Expression.Equal( + Expression.MakeMemberAccess(Expression.Convert(deleteWhereParentParam, tref.RefEntityType), tref.RefColumns[colidx].Table.Properties[tref.RefColumns[colidx].CsName]), + Expression.Constant( + FreeSql.Internal.Utils.GetDataReaderValue( + tref.Columns[colidx].CsType, + _db.OrmOriginal.GetEntityValueWithPropertyName(_table.Type, item, tref.Columns[colidx].CsName)), tref.RefColumns[colidx].CsType) + ); + if (whereParentExp == null) whereParentExp = whereExp; + else whereParentExp = Expression.AndAlso(whereParentExp, whereExp); + } + var propValEach = GetItemValue(item, prop) as IEnumerable; + var subDelete = _db.OrmOriginal.Delete().AsType(tref.RefEntityType) + .WithTransaction(_uow?.GetOrBeginTransaction()) + .Where(Expression.Lambda>(whereParentExp, deleteWhereParentParam)); + foreach (var propValItem in propValEach) + { + subDelete.WhereDynamic(propValEach, true); + break; + } + await subDelete.ExecuteAffrowsAsync(cancellationToken); + } + } + finally + { + _db.Options.EnableCascadeSave = oldEnable; + } + } + async Task AddOrUpdateNavigateAsync(TEntity item, bool isAdd, string propertyName, CancellationToken cancellationToken) { Func action = async prop => diff --git a/FreeSql.DbContext/Repository/Repository/BaseRepositoryAsync.cs b/FreeSql.DbContext/Repository/Repository/BaseRepositoryAsync.cs index 3612f3ec1..5ade3e001 100644 --- a/FreeSql.DbContext/Repository/Repository/BaseRepositoryAsync.cs +++ b/FreeSql.DbContext/Repository/Repository/BaseRepositoryAsync.cs @@ -68,6 +68,12 @@ namespace FreeSql await _db.SaveChangesAsync(cancellationToken); return entity; } + + public virtual async Task SaveManyAsync(TEntity entity, string propertyName, CancellationToken cancellationToken = default) + { + await _dbset.SaveManyAsync(entity, propertyName, cancellationToken); + await _db.SaveChangesAsync(cancellationToken); + } } partial class BaseRepository diff --git a/FreeSql.DbContext/Repository/Repository/IBaseRepository.cs b/FreeSql.DbContext/Repository/Repository/IBaseRepository.cs index 662a6ee10..4294081ee 100644 --- a/FreeSql.DbContext/Repository/Repository/IBaseRepository.cs +++ b/FreeSql.DbContext/Repository/Repository/IBaseRepository.cs @@ -126,6 +126,7 @@ namespace FreeSql Task UpdateAsync(TEntity entity, CancellationToken cancellationToken = default); Task UpdateAsync(IEnumerable entitys, CancellationToken cancellationToken = default); Task InsertOrUpdateAsync(TEntity entity, CancellationToken cancellationToken = default); + Task SaveManyAsync(TEntity entity, string propertyName, CancellationToken cancellationToken = default); Task DeleteAsync(TEntity entity, CancellationToken cancellationToken = default); Task DeleteAsync(IEnumerable entitys, CancellationToken cancellationToken = default); diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index fdde4800e..319d5d395 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -5831,6 +5831,36 @@ + + + field IN (value1) + + + + + field in (value1, value2) + + + + + field in (value1, value2, value3) + + + + + field in (value1, value2, value3, value4) + + + + + field in (value1, value2, value3, value4, value5) + + + + + field in (values) + + 获取 Type 的原始 c# 文本表示 @@ -6346,126 +6376,3 @@ - - - - - 插入数据,传入实体集合 - - - - - - - - 插入数据,传入实体集合 - - - - - - - - 插入或更新数据,此功能依赖数据库特性(低版本可能不支持),参考如下: - MySql 5.6+: on duplicate key update - PostgreSQL 9.4+: on conflict do update - SqlServer 2008+: merge into - Oracle 11+: merge into - Sqlite: replace into - DuckDB: on conflict do update - 达梦: merge into - 人大金仓:on conflict do update - 神通:merge into - MsAccess:不支持 - 注意区别:FreeSql.Repository 仓储也有 InsertOrUpdate 方法(不依赖数据库特性) - - - - - - - 修改数据 - - - - - - - 修改数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} - - - 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 - - - - - 查询数据 - - - - - - - 查询数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} - - - 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 - - - - - 删除数据 - - - - - - - 删除数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} - - - 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 - - - - - 开启事务(不支持异步) - v1.5.0 关闭了线程事务超时自动提交的机制 - - 事务体 () => {} - - - - 开启事务(不支持异步) - v1.5.0 关闭了线程事务超时自动提交的机制 - - - 事务体 () => {} - - - - 数据库访问对象 - - - - - 所有拦截方法都在这里 - - - - - CodeFirst 模式开发相关方法 - - - - - DbFirst 模式开发相关方法 - - - - - 全局过滤设置,可默认附加为 Select/Update/Delete 条件 - - - - From d528ccca445cb6f7616424ffd8689bfe27e8cda6 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Fri, 22 Nov 2024 11:49:11 +0800 Subject: [PATCH 32/38] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20resources=20?= =?UTF-8?q?=E8=BD=AC=20static=20class=20=E7=9A=84=E9=81=97=E7=95=99?= =?UTF-8?q?=E9=97=AE=E9=A2=98=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DbContext/DbContextErrorStrings.cs | 213 +++--- FreeSql/FreeSql.xml | 125 +++- .../Internal/Exception/CoreErrorStrings.cs | 704 +++++++++--------- 3 files changed, 585 insertions(+), 457 deletions(-) diff --git a/FreeSql.DbContext/DbContext/DbContextErrorStrings.cs b/FreeSql.DbContext/DbContext/DbContextErrorStrings.cs index 681b22d29..e8cd6f644 100644 --- a/FreeSql.DbContext/DbContext/DbContextErrorStrings.cs +++ b/FreeSql.DbContext/DbContext/DbContextErrorStrings.cs @@ -12,93 +12,93 @@ namespace FreeSql /// /// AddFreeDbContext 发生错误,请检查 {dbContextTypeName} 的构造参数都已正确注入 /// - public static string AddFreeDbContextError_CheckConstruction(object dbContextTypeName) => string.Format(Language == "cn" ? - @"AddFreeDbContext 发生错误,请检查 {0} 的构造参数都已正确注入" : - @"FreeSql: An error occurred in AddFreeDbContext, check that the construction parameters of {0} have been injected correctly", dbContextTypeName); + public static string AddFreeDbContextError_CheckConstruction(object dbContextTypeName) => Language == "cn" ? + $@"AddFreeDbContext 发生错误,请检查 {dbContextTypeName} 的构造参数都已正确注入" : + $@"FreeSql: An error occurred in AddFreeDbContext, check that the construction parameters of {dbContextTypeName} have been injected correctly"; /// /// 不可添加,已存在于状态管理:{entityString} /// - public static string CannotAdd_AlreadyExistsInStateManagement(object entityString) => string.Format(Language == "cn" ? - @"不可添加,已存在于状态管理:{0}" : - @"FreeSql: Not addable, already exists in state management: {0}", entityString); + public static string CannotAdd_AlreadyExistsInStateManagement(object entityString) => Language == "cn" ? + $@"不可添加,已存在于状态管理:{entityString}" : + $@"FreeSql: Not addable, already exists in state management: {entityString}"; /// /// 不可添加,实体没有主键:{entityString} /// - public static string CannotAdd_EntityHasNo_PrimaryKey(object entityString) => string.Format(Language == "cn" ? - @"不可添加,实体没有主键:{0}" : - @"FreeSql: Not addable, entity has no primary key: {0}", entityString); + public static string CannotAdd_EntityHasNo_PrimaryKey(object entityString) => Language == "cn" ? + $@"不可添加,实体没有主键:{entityString}" : + $@"FreeSql: Not addable, entity has no primary key: {entityString}"; /// /// 不可添加,未设置主键的值:{entityString} /// - public static string CannotAdd_PrimaryKey_NotSet(object entityString) => string.Format(Language == "cn" ? - @"不可添加,未设置主键的值:{0}" : - @"FreeSql: Not addable, no value for primary key set: {0}", entityString); + public static string CannotAdd_PrimaryKey_NotSet(object entityString) => Language == "cn" ? + $@"不可添加,未设置主键的值:{entityString}" : + $@"FreeSql: Not addable, no value for primary key set: {entityString}"; /// /// 不可添加,自增属性有值:{entityString} /// - public static string CannotAdd_SelfIncreasingHasValue(object entityString) => string.Format(Language == "cn" ? - @"不可添加,自增属性有值:{0}" : - @"FreeSql: Not addable, self-increasing attribute has value: {0}", entityString); + public static string CannotAdd_SelfIncreasingHasValue(object entityString) => Language == "cn" ? + $@"不可添加,自增属性有值:{entityString}" : + $@"FreeSql: Not addable, self-increasing attribute has value: {entityString}"; /// /// 不可附加,实体没有主键:{entityString} /// - public static string CannotAttach_EntityHasNo_PrimaryKey(object entityString) => string.Format(Language == "cn" ? - @"不可附加,实体没有主键:{0}" : - @"FreeSql: Not attachable, entity has no primary key: {0}", entityString); + public static string CannotAttach_EntityHasNo_PrimaryKey(object entityString) => Language == "cn" ? + $@"不可附加,实体没有主键:{entityString}" : + $@"FreeSql: Not attachable, entity has no primary key: {entityString}"; /// /// 不可附加,未设置主键的值:{entityString} /// - public static string CannotAttach_PrimaryKey_NotSet(object entityString) => string.Format(Language == "cn" ? - @"不可附加,未设置主键的值:{0}" : - @"FreeSql: Not attachable, no value for primary key set: {0}", entityString); + public static string CannotAttach_PrimaryKey_NotSet(object entityString) => Language == "cn" ? + $@"不可附加,未设置主键的值:{entityString}" : + $@"FreeSql: Not attachable, no value for primary key set: {entityString}"; /// /// 不可删除,数据未被跟踪,应该先查询:{entityString} /// - public static string CannotDelete_DataNotTracked_ShouldQuery(object entityString) => string.Format(Language == "cn" ? - @"不可删除,数据未被跟踪,应该先查询:{0}" : - @"FreeSql: Not deletable, data not tracked, should query first: {0}", entityString); + public static string CannotDelete_DataNotTracked_ShouldQuery(object entityString) => Language == "cn" ? + $@"不可删除,数据未被跟踪,应该先查询:{entityString}" : + $@"FreeSql: Not deletable, data not tracked, should query first: {entityString}"; /// /// 不可删除,实体没有主键:{entityString} /// - public static string CannotDelete_EntityHasNo_PrimaryKey(object entityString) => string.Format(Language == "cn" ? - @"不可删除,实体没有主键:{0}" : - @"FreeSql: Not deletable, entity has no primary key: {0}", entityString); + public static string CannotDelete_EntityHasNo_PrimaryKey(object entityString) => Language == "cn" ? + $@"不可删除,实体没有主键:{entityString}" : + $@"FreeSql: Not deletable, entity has no primary key: {entityString}"; /// /// 不可删除,未设置主键的值:{entityString} /// - public static string CannotDelete_PrimaryKey_NotSet(object entityString) => string.Format(Language == "cn" ? - @"不可删除,未设置主键的值:{0}" : - @"FreeSql: Not deletable, no value for primary key set: {0}", entityString); + public static string CannotDelete_PrimaryKey_NotSet(object entityString) => Language == "cn" ? + $@"不可删除,未设置主键的值:{entityString}" : + $@"FreeSql: Not deletable, no value for primary key set: {entityString}"; /// /// 不可进行编辑,实体没有主键:{entityString} /// - public static string CannotEdit_EntityHasNo_PrimaryKey(object entityString) => string.Format(Language == "cn" ? - @"不可进行编辑,实体没有主键:{0}" : - @"FreeSql: Not editable, entity has no primary key: {0}", entityString); + public static string CannotEdit_EntityHasNo_PrimaryKey(object entityString) => Language == "cn" ? + $@"不可进行编辑,实体没有主键:{entityString}" : + $@"FreeSql: Not editable, entity has no primary key: {entityString}"; /// /// 不可更新,数据未被跟踪,应该先查询 或者 Attach:{entityString} /// - public static string CannotUpdate_DataShouldQueryOrAttach(object entityString) => string.Format(Language == "cn" ? - @"不可更新,数据未被跟踪,应该先查询 或者 Attach:{0}" : - @"FreeSql: Not updatable, data not tracked, should be queried first or Attach:{0}", entityString); + public static string CannotUpdate_DataShouldQueryOrAttach(object entityString) => Language == "cn" ? + $@"不可更新,数据未被跟踪,应该先查询 或者 Attach:{entityString}" : + $@"FreeSql: Not updatable, data not tracked, should be queried first or Attach:{entityString}"; /// /// 不可更新,实体没有主键:{entityString} /// - public static string CannotUpdate_EntityHasNo_PrimaryKey(object entityString) => string.Format(Language == "cn" ? - @"不可更新,实体没有主键:{0}" : - @"FreeSql: Not updatable, entity has no primary key: {0}", entityString); + public static string CannotUpdate_EntityHasNo_PrimaryKey(object entityString) => Language == "cn" ? + $@"不可更新,实体没有主键:{entityString}" : + $@"FreeSql: Not updatable, entity has no primary key: {entityString}"; /// /// 不可更新,未设置主键的值:{entityString} /// - public static string CannotUpdate_PrimaryKey_NotSet(object entityString) => string.Format(Language == "cn" ? - @"不可更新,未设置主键的值:{0}" : - @"FreeSql: Not updatable, no value for primary key set: {0}", entityString); + public static string CannotUpdate_PrimaryKey_NotSet(object entityString) => Language == "cn" ? + $@"不可更新,未设置主键的值:{entityString}" : + $@"FreeSql: Not updatable, no value for primary key set: {entityString}"; /// /// 不可更新,数据库不存在该记录:{entityString} /// - public static string CannotUpdate_RecordDoesNotExist(object entityString) => string.Format(Language == "cn" ? - @"不可更新,数据库不存在该记录:{0}" : - @"FreeSql: Not updatable, the record does not exist in the database: {0}", entityString); + public static string CannotUpdate_RecordDoesNotExist(object entityString) => Language == "cn" ? + $@"不可更新,数据库不存在该记录:{entityString}" : + $@"FreeSql: Not updatable, the record does not exist in the database: {entityString}"; /// /// 请在 OnConfiguring 或 AddFreeDbContext 中配置 UseFreeSql /// @@ -110,103 +110,103 @@ namespace FreeSql /// public static string DbSetAsType_NotSupport_Object => Language == "cn" ? @"DbSet.AsType 参数错误,请传入正确的实体类型" : - @"FreeSql: DbSet.AsType parameter error, please pass in the correct entity type"; + @"FreeSql: DbSet. AsType parameter error, please pass in the correct entity type"; /// /// 实体类型 {EntityTypeName} 无法转换为 {name},无法使用该方法 /// - public static string EntityType_CannotConvert(object EntityTypeName, object name) => string.Format(Language == "cn" ? - @"实体类型 {0} 无法转换为 {1},无法使用该方法" : - @"FreeSql: Entity type {0} cannot be converted to {1} and cannot use this method", EntityTypeName, name); + public static string EntityType_CannotConvert(object EntityTypeName, object name) => Language == "cn" ? + $@"实体类型 {EntityTypeName} 无法转换为 {name},无法使用该方法" : + $@"FreeSql: Entity type {EntityTypeName} cannot be converted to {name} and cannot use this method"; /// /// 实体类型 {EntityTypeName} 主键类型不为 {fullName},无法使用该方法 /// - public static string EntityType_PrimaryKeyError(object EntityTypeName, object fullName) => string.Format(Language == "cn" ? - @"实体类型 {0} 主键类型不为 {1},无法使用该方法" : - @"FreeSql: Entity type {0} Primary key type is not {1} and cannot be used with this method", EntityTypeName, fullName); + public static string EntityType_PrimaryKeyError(object EntityTypeName, object fullName) => Language == "cn" ? + $@"实体类型 {EntityTypeName} 主键类型不为 {fullName},无法使用该方法" : + $@"FreeSql: Entity type {EntityTypeName} Primary key type is not {fullName} and cannot be used with this method"; /// /// 实体类型 {EntityTypeName} 主键数量不为 1,无法使用该方法 /// - public static string EntityType_PrimaryKeyIsNotOne(object EntityTypeName) => string.Format(Language == "cn" ? - @"实体类型 {0} 主键数量不为 1,无法使用该方法" : - @"FreeSql: Entity type {0} Primary key number is not 1 and cannot be used with this method", EntityTypeName); + public static string EntityType_PrimaryKeyIsNotOne(object EntityTypeName) => Language == "cn" ? + $@"实体类型 {EntityTypeName} 主键数量不为 1,无法使用该方法" : + $@"FreeSql: Entity type {EntityTypeName} Primary key number is not 1 and cannot be used with this method"; /// /// FreeSql.Repository 设置过滤器失败,原因是对象不属于 IRepository /// public static string FailedSetFilter_NotBelongIRpository => Language == "cn" ? @"FreeSql.Repository 设置过滤器失败,原因是对象不属于 IRepository" : - @"FreeSql: FreeSql.Repository failed to set filter because object does not belong to IRepository"; + @"FreeSql: FreeSql. Repository failed to set filter because object does not belong to IRepository"; /// /// 不可比较,实体没有主键:{entityString} /// - public static string Incomparable_EntityHasNo_PrimaryKey(object entityString) => string.Format(Language == "cn" ? - @"不可比较,实体没有主键:{0}" : - @"FreeSql: Not comparable, entity has no primary key: {0}", entityString); + public static string Incomparable_EntityHasNo_PrimaryKey(object entityString) => Language == "cn" ? + $@"不可比较,实体没有主键:{entityString}" : + $@"FreeSql: Not comparable, entity has no primary key: {entityString}"; /// /// 不可比较,未设置主键的值:{entityString} /// - public static string Incomparable_PrimaryKey_NotSet(object entityString) => string.Format(Language == "cn" ? - @"不可比较,未设置主键的值:{0}" : - @"FreeSql: Non-comparable, no value for primary key set: {0}", entityString); + public static string Incomparable_PrimaryKey_NotSet(object entityString) => Language == "cn" ? + $@"不可比较,未设置主键的值:{entityString}" : + $@"FreeSql: Non-comparable, no value for primary key set: {entityString}"; /// /// FreeSql.Repository Insert 失败,因为设置了过滤器 {filterKey}: {filterValueExpression},插入的数据不符合 {entityString} /// - public static string InsertError_Filter(object filterKey, object filterValueExpression, object entityString) => string.Format(Language == "cn" ? - @"FreeSql.Repository Insert 失败,因为设置了过滤器 {0}: {1},插入的数据不符合 {2}" : - @"FreeSql: FreeSql.Repository Insert failed because the filter {0}: {1} was set and the inserted data does not conform to {2}", filterKey, filterValueExpression, entityString); + public static string InsertError_Filter(object filterKey, object filterValueExpression, object entityString) => Language == "cn" ? + $@"FreeSql.Repository Insert 失败,因为设置了过滤器 {filterKey}: {filterValueExpression},插入的数据不符合 {entityString}" : + $@"FreeSql: FreeSql.Repository Insert failed because the filter {filterKey}: {filterValueExpression} was set and the inserted data does not conform to {entityString}"; /// /// ISelect.AsType 参数不支持指定为 object /// public static string ISelectAsType_ParameterError => Language == "cn" ? @"ISelect.AsType 参数不支持指定为 object" : - @"FreeSql: ISelect.AsType parameter does not support specifying as object"; + @"FreeSql: ISelect. AsType parameter does not support specifying as object"; /// /// {tableTypeFullName} 不存在属性 {propertyName} /// - public static string NotFound_Property(object propertyName, object tableTypeFullName) => string.Format(Language == "cn" ? - @"{1} 不存在属性 {0}" : - @"FreeSql: Property {0} does not exist for {1}", propertyName, tableTypeFullName); + public static string NotFound_Property(object propertyName, object tableTypeFullName) => Language == "cn" ? + $@"{tableTypeFullName} 不存在属性 {propertyName}" : + $@"FreeSql: Property {propertyName} does not exist for {tableTypeFullName}"; /// /// 找不到方法 DbSet&lt;&gt;.StatesRemoveByObjects /// public static string NotFoundMethod_StatesRemoveByObjects => Language == "cn" ? @"找不到方法 DbSet<>.StatesRemoveByObjects" : - @"FreeSql: Method not found DbSet<>.StatesRemoveByObjects"; + @"FreeSql: Method DbSet<> not found. StatesRemoveByObjects"; /// /// 参数 data 类型错误 {entityTypeFullName} /// - public static string ParameterDataTypeError(object entityTypeFullName) => string.Format(Language == "cn" ? - @"参数 data 类型错误 {0} " : - @"FreeSql: Parameter data type error {0}", entityTypeFullName); + public static string ParameterDataTypeError(object entityTypeFullName) => Language == "cn" ? + $@"参数 data 类型错误 {entityTypeFullName} " : + $@"FreeSql: Parameter data type error {entityTypeFullName}"; /// /// 参数错误 {param} /// - public static string ParameterError(object param) => string.Format(Language == "cn" ? - @"参数错误 {0}" : - @"FreeSql: Parameter error {0}", param); + public static string ParameterError(object param) => Language == "cn" ? + $@"参数错误 {param}" : + $@"FreeSql: Parameter error {param}"; /// /// 参数错误 {param} 不能为 null /// - public static string ParameterError_CannotBeNull(object param) => string.Format(Language == "cn" ? - @"参数错误 {0} 不能为 null" : - @"FreeSql: Parameter error {0} cannot be null", param); + public static string ParameterError_CannotBeNull(object param) => Language == "cn" ? + $@"参数错误 {param} 不能为 null" : + $@"FreeSql: Parameter error {param} cannot be null"; /// /// 参数错误 {many} 不是集合属性 /// - public static string ParameterError_IsNot_CollectionProperties(object many) => string.Format(Language == "cn" ? - @"参数错误 {0} 不是集合属性" : - @"FreeSql: Parameter error {0} is not a collection property", many); + public static string ParameterError_IsNot_CollectionProperties(object many) => Language == "cn" ? + $@"参数错误 {many} 不是集合属性" : + $@"FreeSql: Parameter error {many} is not a collection property"; /// /// 参数错误 {many} 集合属性不存在 /// - public static string ParameterError_NotFound_CollectionProperties(object many) => string.Format(Language == "cn" ? - @"参数错误 {0} 集合属性不存在" : - @"FreeSql: Parameter error {0} Collection property does not exist", many); + public static string ParameterError_NotFound_CollectionProperties(object many) => Language == "cn" ? + $@"参数错误 {many} 集合属性不存在" : + $@"FreeSql: Parameter error {many} Collection property does not exist"; /// /// 参数错误 {one} 属性不存在 /// - public static string ParameterError_NotFound_Property(object one) => string.Format(Language == "cn" ? - @"参数错误 {0} 属性不存在" : - @"FreeSql: Parameter error {0} attribute does not exist", one); + public static string ParameterError_NotFound_Property(object one) => Language == "cn" ? + $@"参数错误 {one} 属性不存在" : + $@"FreeSql: Parameter error {one} attribute does not exist"; /// /// Propagation_Mandatory: 使用当前事务,如果没有当前事务,就抛出异常 /// @@ -222,21 +222,21 @@ namespace FreeSql /// /// {tableTypeFullName} 类型的属性 {propertyName} 不是 OneToMany 或 ManyToMany 特性 /// - public static string PropertyOfType_IsNot_OneToManyOrManyToMany(object propertyName, object tableTypeFullName) => string.Format(Language == "cn" ? - @"{1} 类型的属性 {0} 不是 OneToMany 或 ManyToMany 特性" : - @"FreeSql: Property {0} of type {1} is not OneToMany or ManyToMany attribute", propertyName, tableTypeFullName); + public static string PropertyOfType_IsNot_OneToManyOrManyToMany(object propertyName, object tableTypeFullName) => Language == "cn" ? + $@"{tableTypeFullName} 类型的属性 {propertyName} 不是 OneToMany 或 ManyToMany 特性" : + $@"FreeSql: Property {propertyName} of type {tableTypeFullName} is not OneToMany or ManyToMany attribute"; /// /// 特别错误:批量添加失败,{dataType} 的返回数据,与添加的数目不匹配 /// - public static string SpecialError_BatchAdditionFailed(object dataType) => string.Format(Language == "cn" ? - @"特别错误:批量添加失败,{0} 的返回数据,与添加的数目不匹配" : - @"FreeSql: Special error: Bulk add failed, {0} returned data, does not match the number added", dataType); + public static string SpecialError_BatchAdditionFailed(object dataType) => Language == "cn" ? + $@"特别错误:批量添加失败,{dataType} 的返回数据,与添加的数目不匹配" : + $@"FreeSql: Special error: Bulk add failed, {dataType} returned data, does not match the number added"; /// /// 特别错误:更新失败,数据未被跟踪:{entityString} /// - public static string SpecialError_UpdateFailedDataNotTracked(object entityString) => string.Format(Language == "cn" ? - @"特别错误:更新失败,数据未被跟踪:{0}" : - @"FreeSql: Special error: Update failed, data not tracked: {0}", entityString); + public static string SpecialError_UpdateFailedDataNotTracked(object entityString) => Language == "cn" ? + $@"特别错误:更新失败,数据未被跟踪:{entityString}" : + $@"FreeSql: Special error: Update failed, data not tracked: {entityString}"; /// /// 已开启事务,不能禁用工作单元 /// @@ -246,21 +246,20 @@ namespace FreeSql /// /// {tableTypeFullName} 类型已设置属性 {propertyName} 忽略特性 /// - public static string TypeHasSetProperty_IgnoreAttribute(object tableTypeFullName, object propertyName) => string.Format(Language == "cn" ? - @"{0} 类型已设置属性 {1} 忽略特性" : - @"FreeSql: The {0} type has set the property {1} Ignore the attribute", tableTypeFullName, propertyName); + public static string TypeHasSetProperty_IgnoreAttribute(object tableTypeFullName, object propertyName) => Language == "cn" ? + $@"{tableTypeFullName} 类型已设置属性 {propertyName} 忽略特性" : + $@"FreeSql: The {tableTypeFullName} type has set the property {propertyName} Ignore the attribute"; /// /// {unitOfWorkManager} 构造参数 {fsql} 不能为 null /// - public static string UnitOfWorkManager_Construction_CannotBeNull(object unitOfWorkManager, object fsql) => string.Format(Language == "cn" ? - @"{0} 构造参数 {1} 不能为 null" : - @"FreeSql: The {0} constructor parameter {1} cannot be null", unitOfWorkManager, fsql); + public static string UnitOfWorkManager_Construction_CannotBeNull(object unitOfWorkManager, object fsql) => Language == "cn" ? + $@"{unitOfWorkManager} 构造参数 {fsql} 不能为 null" : + $@"FreeSql: The {unitOfWorkManager} constructor parameter {fsql} cannot be null"; /// /// FreeSql.Repository Update 失败,因为设置了过滤器 {filterKey}: {filterValueExpression},更新的数据不符合{entityString} /// - public static string UpdateError_Filter(object filterKey, object filterValueExpression, object entityString) => string.Format(Language == "cn" ? - @"FreeSql.Repository Update 失败,因为设置了过滤器 {0}: {1},更新的数据不符合{2}" : - @"FreeSql: FreeSql.Repository Update failed because the filter {0}: {1} is set and the updated data does not conform to {2}", filterKey, filterValueExpression, entityString); + public static string UpdateError_Filter(object filterKey, object filterValueExpression, object entityString) => Language == "cn" ? + $@"FreeSql.Repository Update 失败,因为设置了过滤器 {filterKey}: {filterValueExpression},更新的数据不符合{entityString}" : + $@"FreeSql: FreeSql.Repository Update failed because the filter {filterKey}: {filterValueExpression} is set and the updated data does not conform to {entityString}"; } - } diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 319d5d395..c21ae6656 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -5472,7 +5472,7 @@ - 【{policyName}】ObjectPool.GetAsync() The queue is too long, Policy.AsyncGetCapacity = {asyncGetCapacity} + 【{policyName}】ObjectPool.GetAsync() The queue is too long. Policy.AsyncGetCapacity = {asyncGetCapacity} @@ -6376,3 +6376,126 @@ + + + + + 插入数据,传入实体集合 + + + + + + + + 插入数据,传入实体集合 + + + + + + + + 插入或更新数据,此功能依赖数据库特性(低版本可能不支持),参考如下: + MySql 5.6+: on duplicate key update + PostgreSQL 9.4+: on conflict do update + SqlServer 2008+: merge into + Oracle 11+: merge into + Sqlite: replace into + DuckDB: on conflict do update + 达梦: merge into + 人大金仓:on conflict do update + 神通:merge into + MsAccess:不支持 + 注意区别:FreeSql.Repository 仓储也有 InsertOrUpdate 方法(不依赖数据库特性) + + + + + + + 修改数据 + + + + + + + 修改数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} + + + 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 + + + + + 查询数据 + + + + + + + 查询数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} + + + 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 + + + + + 删除数据 + + + + + + + 删除数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} + + + 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 + + + + + 开启事务(不支持异步) + v1.5.0 关闭了线程事务超时自动提交的机制 + + 事务体 () => {} + + + + 开启事务(不支持异步) + v1.5.0 关闭了线程事务超时自动提交的机制 + + + 事务体 () => {} + + + + 数据库访问对象 + + + + + 所有拦截方法都在这里 + + + + + CodeFirst 模式开发相关方法 + + + + + DbFirst 模式开发相关方法 + + + + + 全局过滤设置,可默认附加为 Select/Update/Delete 条件 + + + + diff --git a/FreeSql/Internal/Exception/CoreErrorStrings.cs b/FreeSql/Internal/Exception/CoreErrorStrings.cs index 4aeee2784..9a8299726 100644 --- a/FreeSql/Internal/Exception/CoreErrorStrings.cs +++ b/FreeSql/Internal/Exception/CoreErrorStrings.cs @@ -11,33 +11,33 @@ namespace FreeSql /// /// [Table(AsTable = "{asTable}")] 特性值格式错误 /// - public static string AsTable_PropertyName_FormatError(object asTable) => string.Format(Language == "cn" ? - @"[Table(AsTable = ""{0}"")] 特性值格式错误" : - @"FreeSql: [Table(AsTable=""{0}"")] Property value formatted incorrectly", asTable); + public static string AsTable_PropertyName_FormatError(object asTable) => Language == "cn" ? + $@"[Table(AsTable = ""{asTable}"")] 特性值格式错误" : + $@"FreeSql: [Table(AsTable=""{asTable}"")] Property value formatted incorrectly"; /// /// [Table(AsTable = xx)] 设置的属性名 {atmGroupsValue} 不是 DateTime 类型 /// - public static string AsTable_PropertyName_NotDateTime(object atmGroupsValue) => string.Format(Language == "cn" ? - @"[Table(AsTable = xx)] 设置的属性名 {0} 不是 DateTime 类型" : - @"FreeSql: The property name {0} set by [Table (AsTable = xx)] is not of type DateTime", atmGroupsValue); + public static string AsTable_PropertyName_NotDateTime(object atmGroupsValue) => Language == "cn" ? + $@"[Table(AsTable = xx)] 设置的属性名 {atmGroupsValue} 不是 DateTime 类型" : + $@"FreeSql: The property name {atmGroupsValue} set by [Table (AsTable = xx)] is not of type DateTime"; /// /// {name}: Failed to get resource {statistics} /// - public static string Available_Failed_Get_Resource(object name, object statistics) => string.Format(Language == "cn" ? - @"{0}: Failed to get resource {1}" : - @"FreeSql: {0}: Failed to get resource {1}", name, statistics); + public static string Available_Failed_Get_Resource(object name, object statistics) => Language == "cn" ? + $@"{name}: Failed to get resource {statistics}" : + $@"FreeSql: {name}: Failed to get resource {statistics}"; /// /// {name}: An exception needs to be thrown /// - public static string Available_Thrown_Exception(object name) => string.Format(Language == "cn" ? - @"{0}: An exception needs to be thrown" : - @"FreeSql: {0}: An exception needs to be thrown", name); + public static string Available_Thrown_Exception(object name) => Language == "cn" ? + $@"{name}: An exception needs to be thrown" : + $@"FreeSql: {name}: An exception needs to be thrown"; /// /// 错误的表达式格式 {column} /// - public static string Bad_Expression_Format(object column) => string.Format(Language == "cn" ? - @"错误的表达式格式 {0}" : - @"FreeSql: Wrong expression format {0}", column); + public static string Bad_Expression_Format(object column) => Language == "cn" ? + $@"错误的表达式格式 {column}" : + $@"FreeSql: Wrong expression format {column}"; /// /// Chunk 功能之前不可使用 Select /// @@ -59,21 +59,21 @@ namespace FreeSql /// /// {name} 不能为 null /// - public static string Cannot_Be_NULL_Name(object name) => string.Format(Language == "cn" ? - @"{0} 不能为 null" : - @"FreeSql: {0} cannot be null", name); + public static string Cannot_Be_NULL_Name(object name) => Language == "cn" ? + $@"{name} 不能为 null" : + $@"FreeSql: {name} cannot be null"; /// /// 无法匹配 {property} /// - public static string Cannot_Match_Property(object property) => string.Format(Language == "cn" ? - @"无法匹配 {0}" : - @"FreeSql: Unable to match {0}", property); + public static string Cannot_Match_Property(object property) => Language == "cn" ? + $@"无法匹配 {property}" : + $@"FreeSql: Unable to match {property}"; /// /// {property} 无法解析为表达式树 /// - public static string Cannot_Resolve_ExpressionTree(object property) => string.Format(Language == "cn" ? - @"{0} 无法解析为表达式树" : - @"FreeSql: {0} cannot be resolved to an expression tree", property); + public static string Cannot_Resolve_ExpressionTree(object property) => Language == "cn" ? + $@"{property} 无法解析为表达式树" : + $@"FreeSql: {property} cannot be resolved to an expression tree"; /// /// 参数 masterConnectionString 不可为空,请检查 UseConnectionString /// @@ -95,39 +95,39 @@ namespace FreeSql /// /// 自定义表达式解析错误:类型 {exp3MethodDeclaringType} 需要定义 static ThreadLocal&lt;ExpressionCallContext&gt; 字段、字段、字段(重要三次提醒) /// - public static string Custom_Expression_ParsingError(object exp3MethodDeclaringType) => string.Format(Language == "cn" ? - @"自定义表达式解析错误:类型 {0} 需要定义 static ThreadLocal 字段、字段、字段(重要三次提醒)" : - @"FreeSql: Custom expression parsing error: type {0} needs to define static ThreadLocalfield, field, field (important three reminders)", exp3MethodDeclaringType); + public static string Custom_Expression_ParsingError(object exp3MethodDeclaringType) => Language == "cn" ? + $@"自定义表达式解析错误:类型 {exp3MethodDeclaringType} 需要定义 static ThreadLocal 字段、字段、字段(重要三次提醒)" : + $@"FreeSql: Custom expression parsing error: type {exp3MethodDeclaringType} needs to define static ThreadLocalfield, field, field (important three reminders)"; /// /// Custom { 反射信息 }不能为空,格式:{ 静态方法名 }{ 空格 }{ 反射信息 } /// public static string Custom_Reflection_IsNotNull => Language == "cn" ? - @"Custom { 反射信息 }不能为空,格式:{ 静态方法名 }{ 空格 }{ 反射信息 }" : - @"FreeSql: Custom {Reflection Information} cannot be empty, format: {static method name}{space}{reflection information}"; + $@"Custom {{ 反射信息 }}不能为空,格式:{{ 静态方法名 }}{{ 空格 }}{{ 反射信息 }}" : + $@"FreeSql: Custom {{Reflection Information}} cannot be empty, format: {{static method name}}{{space}}{{reflection information}}"; /// /// Custom { 静态方法名 }不能为空,格式:{ 静态方法名 }{ 空格 }{ 反射信息 } /// public static string Custom_StaticMethodName_IsNotNull => Language == "cn" ? - @"Custom { 静态方法名 }不能为空,格式:{ 静态方法名 }{ 空格 }{ 反射信息 }" : - @"FreeSql: Custom {static method name} cannot be empty, format: {static method name}{space}{reflection information}"; + $@"Custom {{ 静态方法名 }}不能为空,格式:{{ 静态方法名 }}{{ 空格 }}{{ 反射信息 }}" : + $@"FreeSql: Custom {{static method name}} cannot be empty, format: {{static method name}}{{space}}{{reflection information}}"; /// /// Custom 对应的{{ 静态方法名 }}:{fiValueCustomArray} 未设置 [DynamicFilterCustomAttribute] 特性 /// - public static string Custom_StaticMethodName_NotSet_DynamicFilterCustom(object fiValueCustomArray) => string.Format(Language == "cn" ? - @"Custom 对应的{{ 静态方法名 }}:{0} 未设置 [DynamicFilterCustomAttribute] 特性" : - @"FreeSql: Custom corresponding {{static method name}}:{0} The [DynamicFilterCustomAttribute] attribute is not set", fiValueCustomArray); + public static string Custom_StaticMethodName_NotSet_DynamicFilterCustom(object fiValueCustomArray) => Language == "cn" ? + $@"Custom 对应的{{{{ 静态方法名 }}}}:{fiValueCustomArray} 未设置 [DynamicFilterCustomAttribute] 特性" : + $@"FreeSql: Custom corresponding {{{{static method name}}}}:{fiValueCustomArray} The [DynamicFilterCustomAttribute] attribute is not set"; /// /// Custom 要求 Field 应该空格分割,并且长度为 2,格式:{ 静态方法名 }{ 空格 }{ 反射信息 } /// public static string CustomFieldSeparatedBySpaces => Language == "cn" ? - @"Custom 要求 Field 应该空格分割,并且长度为 2,格式:{ 静态方法名 }{ 空格 }{ 反射信息 }" : - @"FreeSql: Custom requires that Fields be space-split and 2-length in the format: {static method name}{space}{reflection information}"; + $@"Custom 要求 Field 应该空格分割,并且长度为 2,格式:{{ 静态方法名 }}{{ 空格 }}{{ 反射信息 }}" : + $@"FreeSql: Custom requires that Fields be space-split and 2-length in the format: {{static method name}}{{space}}{{reflection information}}"; /// /// 操作的数据类型({dataDisplayCsharp}) 与 AsType({tableTypeDisplayCsharp}) 不一致,请检查。 /// - public static string DataType_AsType_Inconsistent(object dataDisplayCsharp, object tableTypeDisplayCsharp) => string.Format(Language == "cn" ? - @"操作的数据类型({0}) 与 AsType({1}) 不一致,请检查。" : - @"FreeSql: The data type of the operation ({0}) is inconsistent with AsType({1}), Please check.", dataDisplayCsharp, tableTypeDisplayCsharp); + public static string DataType_AsType_Inconsistent(object dataDisplayCsharp, object tableTypeDisplayCsharp) => Language == "cn" ? + $@"操作的数据类型({dataDisplayCsharp}) 与 AsType({tableTypeDisplayCsharp}) 不一致,请检查。" : + $@"FreeSql: The data type of the operation ({dataDisplayCsharp}) is inconsistent with AsType ({tableTypeDisplayCsharp}). Please check."; /// /// DateRange 要求 Value 应该逗号分割,并且长度为 2 /// @@ -143,9 +143,9 @@ namespace FreeSql /// /// 记录可能不存在,或者【行级乐观锁】版本过旧,更新数量{sourceCount},影响的行数{affrows}。 /// - public static string DbUpdateVersionException_RowLevelOptimisticLock(object sourceCount, object affrows) => string.Format(Language == "cn" ? - @"记录可能不存在,或者【行级乐观锁】版本过旧,更新数量{0},影响的行数{1}。" : - @"FreeSql: The record may not exist, or the row level optimistic lock version is out of date, the number of updates {0}, the number of rows affected {1}.", sourceCount, affrows); + public static string DbUpdateVersionException_RowLevelOptimisticLock(object sourceCount, object affrows) => Language == "cn" ? + $@"记录可能不存在,或者【行级乐观锁】版本过旧,更新数量{sourceCount},影响的行数{affrows}。" : + $@"FreeSql: The record may not exist, or the row level optimistic lock version is out of date, the number of updates {sourceCount}, the number of rows affected {affrows}."; /// /// SlaveConnectionString 数量与 SlaveWeights 不相同 /// @@ -155,33 +155,33 @@ namespace FreeSql /// /// ColumnAttribute.Name {colattrName} 重复存在,请检查(注意:不区分大小写) /// - public static string Duplicate_ColumnAttribute(object colattrName) => string.Format(Language == "cn" ? - @"ColumnAttribute.Name {0} 重复存在,请检查(注意:不区分大小写)" : - @"FreeSql: ColumnAttribute.Name {0} exists repeatedly, please check (note: case insensitive)", colattrName); + public static string Duplicate_ColumnAttribute(object colattrName) => Language == "cn" ? + $@"ColumnAttribute.Name {colattrName} 重复存在,请检查(注意:不区分大小写)" : + $@"FreeSql: ColumnAttribute. Name {colattrName} exists repeatedly, please check (note: case insensitive)"; /// /// 属性名 {pName} 重复存在,请检查(注意:不区分大小写) /// - public static string Duplicate_PropertyName(object pName) => string.Format(Language == "cn" ? - @"属性名 {0} 重复存在,请检查(注意:不区分大小写)" : - @"FreeSql: Property name {0} exists repeatedly, please check (note: case insensitive)", pName); + public static string Duplicate_PropertyName(object pName) => Language == "cn" ? + $@"属性名 {pName} 重复存在,请检查(注意:不区分大小写)" : + $@"FreeSql: Property name {pName} exists repeatedly, please check (note: case insensitive)"; /// /// {function} 功能要求实体类 {tableCsName} 必须有主键 /// - public static string Entity_Must_Primary_Key(object function, object tableCsName) => string.Format(Language == "cn" ? - @"{0} 功能要求实体类 {1} 必须有主键" : - @"FreeSql: The {0} feature requires that the entity class {1} must have a primary key", function, tableCsName); + public static string Entity_Must_Primary_Key(object function, object tableCsName) => Language == "cn" ? + $@"{function} 功能要求实体类 {tableCsName} 必须有主键" : + $@"FreeSql: The {function} feature requires that the entity class {tableCsName} must have a primary key"; /// /// {tbTypeFullName} 是父子关系,但是 MySql 8.0 以下版本中不支持组合多主键 /// - public static string Entity_MySQL_VersionsBelow8_NotSupport_Multiple_PrimaryKeys(object tbTypeFullName) => string.Format(Language == "cn" ? - @"{0} 是父子关系,但是 MySql 8.0 以下版本中不支持组合多主键" : - @"FreeSql: {0} is a parent-child relationship, but combinations of multiple primary keys are not supported in versions below MySql 8.0", tbTypeFullName); + public static string Entity_MySQL_VersionsBelow8_NotSupport_Multiple_PrimaryKeys(object tbTypeFullName) => Language == "cn" ? + $@"{tbTypeFullName} 是父子关系,但是 MySql 8.0 以下版本中不支持组合多主键" : + $@"FreeSql: {tbTypeFullName} is a parent-child relationship, but combinations of multiple primary keys are not supported in versions below MySql 8.0"; /// /// {tbTypeFullName} 不是父子关系,无法使用该功能 /// - public static string Entity_NotParentChild_Relationship(object tbTypeFullName) => string.Format(Language == "cn" ? - @"{0} 不是父子关系,无法使用该功能" : - @"FreeSql: {0} is not a parent-child relationship and cannot be used", tbTypeFullName); + public static string Entity_NotParentChild_Relationship(object tbTypeFullName) => Language == "cn" ? + $@"{tbTypeFullName} 不是父子关系,无法使用该功能" : + $@"FreeSql: {tbTypeFullName} is not a parent-child relationship and cannot be used"; /// /// 这个特别的子查询不能解析 /// @@ -191,33 +191,33 @@ namespace FreeSql /// /// 表达式错误,它的顶级对象不是 ParameterExpression:{exp} /// - public static string Expression_Error_Use_ParameterExpression(object exp) => string.Format(Language == "cn" ? - @"表达式错误,它的顶级对象不是 ParameterExpression:{0}" : - @"FreeSql: Expression error, its top object is not ParameterExpression:{0}", exp); + public static string Expression_Error_Use_ParameterExpression(object exp) => Language == "cn" ? + $@"表达式错误,它的顶级对象不是 ParameterExpression:{exp}" : + $@"FreeSql: Expression error, its top object is not ParameterExpression:{exp}"; /// /// 表达式错误,它不是连续的 MemberAccess 类型:{exp} /// - public static string Expression_Error_Use_Successive_MemberAccess_Type(object exp) => string.Format(Language == "cn" ? - @"表达式错误,它不是连续的 MemberAccess 类型:{0}" : - @"FreeSql: Expression error, it is not a continuous MemberAccess type: {0}", exp); + public static string Expression_Error_Use_Successive_MemberAccess_Type(object exp) => Language == "cn" ? + $@"表达式错误,它不是连续的 MemberAccess 类型:{exp}" : + $@"FreeSql: Expression error, it is not a continuous MemberAccess type: {exp}"; /// /// ExpressionTree 转换类型错误,值({value}),类型({valueTypeFullName}),目标类型({typeFullName}),{exMessage} /// - public static string ExpressionTree_Convert_Type_Error(object value, object valueTypeFullName, object typeFullName, object exMessage) => string.Format(Language == "cn" ? - @"ExpressionTree 转换类型错误,值({0}),类型({1}),目标类型({2}),{3}" : - @"FreeSql: ExpressionTree conversion type error, value ({0}), type ({1}), target type ({2}), Error:{3}", value, valueTypeFullName, typeFullName, exMessage); + public static string ExpressionTree_Convert_Type_Error(object value, object valueTypeFullName, object typeFullName, object exMessage) => Language == "cn" ? + $@"ExpressionTree 转换类型错误,值({value}),类型({valueTypeFullName}),目标类型({typeFullName}),{exMessage}" : + $@"FreeSql: ExpressionTree conversion type error, value ({value}), type ({valueTypeFullName}), target type ({typeFullName}), Error:{exMessage}"; /// /// 未能解析分表字段值 {sqlWhere} /// - public static string Failed_SubTable_FieldValue(object sqlWhere) => string.Format(Language == "cn" ? - @"未能解析分表字段值 {0}" : - @"FreeSql: Failed to parse table field value {0}", sqlWhere); + public static string Failed_SubTable_FieldValue(object sqlWhere) => Language == "cn" ? + $@"未能解析分表字段值 {sqlWhere}" : + $@"FreeSql: Failed to parse table field value {sqlWhere}"; /// /// AsTable 未实现的功能 {asTable} /// - public static string Functions_AsTable_NotImplemented(object asTable) => string.Format(Language == "cn" ? - @"AsTable 未实现的功能 {0}" : - @"FreeSql: Function {0} not implemented by AsTable", asTable); + public static string Functions_AsTable_NotImplemented(object asTable) => Language == "cn" ? + $@"AsTable 未实现的功能 {asTable}" : + $@"FreeSql: Function {asTable} not implemented by AsTable"; /// /// GBase 暂时不支持逗号以外的分割符 /// @@ -227,27 +227,27 @@ namespace FreeSql /// /// tableName:{tableName} 生成了相同的分表名 /// - public static string Generated_Same_SubTable(object tableName) => string.Format(Language == "cn" ? - @"tableName:{0} 生成了相同的分表名" : - @"FreeSql: TableName:{0} generated the same table name", tableName); + public static string Generated_Same_SubTable(object tableName) => Language == "cn" ? + $@"tableName:{tableName} 生成了相同的分表名" : + $@"FreeSql: TableName:{tableName} generated the same table name"; /// /// GetPrimarys 传递的参数 "{primary}" 不正确,它不属于字典数据的键名 /// - public static string GetPrimarys_ParameterError_IsNotDictKey(object primary) => string.Format(Language == "cn" ? - @"GetPrimarys 传递的参数 ""{0}"" 不正确,它不属于字典数据的键名" : - @"FreeSql: The parameter'{0}'passed by GetPrimarys is incorrect and does not belong to the key name of the dictionary data", primary); + public static string GetPrimarys_ParameterError_IsNotDictKey(object primary) => Language == "cn" ? + $@"GetPrimarys 传递的参数 ""{primary}"" 不正确,它不属于字典数据的键名" : + $@"FreeSql: The parameter'{primary}'passed by GetPrimarys is incorrect and does not belong to the key name of the dictionary data"; /// /// 已经指定了 {first},不能再指定 {second} /// - public static string Has_Specified_Cannot_Specified_Second(object first, object second) => string.Format(Language == "cn" ? - @"已经指定了 {0},不能再指定 {1}" : - @"FreeSql: {0} has already been specified and {1} can no longer be specified", first, second); + public static string Has_Specified_Cannot_Specified_Second(object first, object second) => Language == "cn" ? + $@"已经指定了 {first},不能再指定 {second}" : + $@"FreeSql: {first} has already been specified and {second} can no longer be specified"; /// /// {tb2DbName}.{mp2MemberName} 被忽略,请检查 IsIgnore 设置,确认 get/set 为 public /// - public static string Ignored_Check_Confirm_PublicGetSet(object tb2DbName, object mp2MemberName) => string.Format(Language == "cn" ? - @"{0}.{1} 被忽略,请检查 IsIgnore 设置,确认 get/set 为 public" : - @"FreeSql: {0}.{1} is ignored, Check the IsIgnore setting to make sure get/set is public", tb2DbName, mp2MemberName); + public static string Ignored_Check_Confirm_PublicGetSet(object tb2DbName, object mp2MemberName) => Language == "cn" ? + $@"{tb2DbName}.{mp2MemberName} 被忽略,请检查 IsIgnore 设置,确认 get/set 为 public" : + $@"FreeSql: {tb2DbName}. {mp2MemberName} is ignored. Check the IsIgnore setting to make sure get/set is public"; /// /// Include 参数类型错误 /// @@ -269,21 +269,21 @@ namespace FreeSql /// /// IncludeMany 类型 {tbTypeDisplayCsharp} 的属性 {collMemMemberName} 不是有效的导航属性,提示:IsIgnore = true 不会成为导航属性 /// - public static string IncludeMany_NotValid_Navigation(object collMemMemberName, object tbTypeDisplayCsharp) => string.Format(Language == "cn" ? - @"IncludeMany 类型 {1} 的属性 {0} 不是有效的导航属性,提示:IsIgnore = true 不会成为导航属性" : - @"FreeSql: The property {0} of IncludeMany type {1} is not a valid navigation property, hint: IsIgnore = true will not be a navigation property", collMemMemberName, tbTypeDisplayCsharp); + public static string IncludeMany_NotValid_Navigation(object collMemMemberName, object tbTypeDisplayCsharp) => Language == "cn" ? + $@"IncludeMany 类型 {tbTypeDisplayCsharp} 的属性 {collMemMemberName} 不是有效的导航属性,提示:IsIgnore = true 不会成为导航属性" : + $@"FreeSql: The property {collMemMemberName} of IncludeMany type {tbTypeDisplayCsharp} is not a valid navigation property, hint: IsIgnore = true will not be a navigation property"; /// /// IncludeMany {navigateSelector} 参数错误,Select 只可以使用一个参数的方法,正确格式:.Select(t =&gt;new TNavigate {{}}) /// - public static string IncludeMany_ParameterError_OnlyUseOneParameter(object navigateSelector) => string.Format(Language == "cn" ? - @"IncludeMany {0} 参数错误,Select 只可以使用一个参数的方法,正确格式:.Select(t =>new TNavigate {{}})" : - @"FreeSql: IncludeMany {0} parameter is wrong, Select can only use one parameter's method, the correct format:.Select(t =>new TNavigate{{}})", navigateSelector); + public static string IncludeMany_ParameterError_OnlyUseOneParameter(object navigateSelector) => Language == "cn" ? + $@"IncludeMany {navigateSelector} 参数错误,Select 只可以使用一个参数的方法,正确格式:.Select(t =>new TNavigate {{{{}}}})" : + $@"FreeSql: IncludeMany {navigateSelector} parameter is wrong, Select can only use one parameter's method, the correct format:.Select(t =>new TNavigate{{{{}}}})"; /// /// IncludeMany {navigateSelector} 参数错误,Select lambda参数返回值必须和 {collMemElementType} 类型一致 /// - public static string IncludeMany_ParameterError_Select_ReturnConsistentType(object navigateSelector, object collMemElementType) => string.Format(Language == "cn" ? - @"IncludeMany {0} 参数错误,Select lambda参数返回值必须和 {1} 类型一致" : - @"FreeSql: IncludeMany {0} parameter error, Select lambda parameter return value must match {1} type", navigateSelector, collMemElementType); + public static string IncludeMany_ParameterError_Select_ReturnConsistentType(object navigateSelector, object collMemElementType) => Language == "cn" ? + $@"IncludeMany {navigateSelector} 参数错误,Select lambda参数返回值必须和 {collMemElementType} 类型一致" : + $@"FreeSql: IncludeMany {navigateSelector} parameter error, Select lambda parameter return value must match {collMemElementType} type"; /// /// IncludeMany 参数1 类型错误,表达式类型应该为 MemberAccess /// @@ -293,169 +293,169 @@ namespace FreeSql /// /// IncludeMany {navigateSelector} 参数类型错误,正确格式: a.collections.Take(1).Where(c =&gt;c.aid == a.id).Select(a=&gt; new TNavigate{{}}) /// - public static string IncludeMany_ParameterTypeError(object navigateSelector) => string.Format(Language == "cn" ? - @"IncludeMany {0} 参数类型错误,正确格式: a.collections.Take(1).Where(c =>c.aid == a.id).Select(a=> new TNavigate{{}})" : - @"FreeSql: IncludeMany {0} parameter type is wrong, correct format: a.collections.Take(1).Where(c => C.A ID == a.id).Select (a => new TNavigate{{}})", navigateSelector); + public static string IncludeMany_ParameterTypeError(object navigateSelector) => Language == "cn" ? + $@"IncludeMany {navigateSelector} 参数类型错误,正确格式: a.collections.Take(1).Where(c =>c.aid == a.id).Select(a=> new TNavigate{{{{}}}})" : + $@"FreeSql: IncludeMany {navigateSelector} parameter type is wrong, correct format: a.collections.Take(1).Where(c => C.A ID == a.id).Select (a => new TNavigate{{{{}}}})"; /// /// ISelect.InsertInto() 未选择属性: {displayCsharp} /// - public static string InsertInto_No_Property_Selected(object displayCsharp) => string.Format(Language == "cn" ? - @"ISelect.InsertInto() 未选择属性: {0}" : - @"FreeSql: ISelect.InsertInto() did not select an attribute: {0}", displayCsharp); + public static string InsertInto_No_Property_Selected(object displayCsharp) => Language == "cn" ? + $@"ISelect.InsertInto() 未选择属性: {displayCsharp}" : + $@"FreeSql: ISelect. InsertInto() did not select an attribute: {displayCsharp}"; /// /// ISelect.InsertInto() 类型错误: {displayCsharp} /// - public static string InsertInto_TypeError(object displayCsharp) => string.Format(Language == "cn" ? - @"ISelect.InsertInto() 类型错误: {0}" : - @"FreeSql: ISelect.InsertInto() type error: {0}", displayCsharp); + public static string InsertInto_TypeError(object displayCsharp) => Language == "cn" ? + $@"ISelect.InsertInto() 类型错误: {displayCsharp}" : + $@"FreeSql: ISelect. InsertInto() type error: {displayCsharp}"; /// /// InsertOrUpdate 功能执行 merge into 要求实体类 {CsName} 必须有主键 /// - public static string InsertOrUpdate_Must_Primary_Key(object CsName) => string.Format(Language == "cn" ? - @"InsertOrUpdate 功能执行 merge into 要求实体类 {0} 必须有主键" : - @"FreeSql: The InsertOrUpdate function performs merge into requiring the entity class {0} to have a primary key", CsName); + public static string InsertOrUpdate_Must_Primary_Key(object CsName) => Language == "cn" ? + $@"InsertOrUpdate 功能执行 merge into 要求实体类 {CsName} 必须有主键" : + $@"FreeSql: The InsertOrUpdate function performs merge into requiring the entity class {CsName} to have a primary key"; /// /// InsertOrUpdate&lt;&gt;的泛型参数 不支持 {typeofT1},请传递您的实体类 /// - public static string InsertOrUpdate_NotSuport_Generic_UseEntity(object typeofT1) => string.Format(Language == "cn" ? - @"InsertOrUpdate<>的泛型参数 不支持 {0},请传递您的实体类" : - @"FreeSql: The generic parameter for InsertOrUpdate<>does not support {0}, Pass in your entity class", typeofT1); + public static string InsertOrUpdate_NotSuport_Generic_UseEntity(object typeofT1) => Language == "cn" ? + $@"InsertOrUpdate<>的泛型参数 不支持 {typeofT1},请传递您的实体类" : + $@"FreeSql: The generic parameter for InsertOrUpdate<>does not support {typeofT1}. Pass in your entity class"; /// /// 【延时加载】功能需要安装 FreeSql.Extensions.LazyLoading.dll,可前往 nuget 下载 /// public static string Install_FreeSql_Extensions_LazyLoading => Language == "cn" ? @"【延时加载】功能需要安装 FreeSql.Extensions.LazyLoading.dll,可前往 nuget 下载" : - @"FreeSql: FreeSql needs to be installed for Delayed Loading.Extensions.LazyLoading.Dll, downloadable to nuget"; + @"FreeSql: FreeSql needs to be installed for Delayed Loading. Extensions. LazyLoading. Dll, downloadable to nuget"; /// /// 【延时加载】{trytbTypeName} 编译错误:{exMessage} /// - public static string LazyLoading_CompilationError(object trytbTypeName, object exMessage, object cscode) => string.Format(Language == "cn" ? - @"【延时加载】{0} 编译错误:{1} + public static string LazyLoading_CompilationError(object trytbTypeName, object exMessage, object cscode) => Language == "cn" ? + $@"【延时加载】{trytbTypeName} 编译错误:{exMessage} -{2}" : - @"FreeSql: {0} Compilation error: {1} +{cscode}" : + $@"FreeSql: {trytbTypeName} Compilation error: {exMessage} -{2}", trytbTypeName, exMessage, cscode); +{cscode}"; /// /// 【延时加载】实体类型 {trytbTypeName} 必须声明为 public /// - public static string LazyLoading_EntityMustDeclarePublic(object trytbTypeName) => string.Format(Language == "cn" ? - @"【延时加载】实体类型 {0} 必须声明为 public" : - @"FreeSql: Entity type {0} must be declared public", trytbTypeName); + public static string LazyLoading_EntityMustDeclarePublic(object trytbTypeName) => Language == "cn" ? + $@"【延时加载】实体类型 {trytbTypeName} 必须声明为 public" : + $@"FreeSql: Entity type {trytbTypeName} must be declared public"; /// /// ManyToMany 导航属性 .AsSelect() 暂时不可用于 Sum/Avg/Max/Min/First/ToOne/ToList 方法 /// public static string ManyToMany_AsSelect_NotSupport_Sum_Avg_etc => Language == "cn" ? @"ManyToMany 导航属性 .AsSelect() 暂时不可用于 Sum/Avg/Max/Min/First/ToOne/ToList 方法" : - @"FreeSql: ManyToMany navigation properties.AsSelect() is temporarily unavailable for the Sum/Avg/Max/Min/First/ToOne/ToList method"; + @"FreeSql: ManyToMany navigation properties. AsSelect() is temporarily unavailable for the Sum/Avg/Max/Min/First/ToOne/ToList method"; /// /// 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 在 {tbmidCsName} 中没有找到对应的字段,如:{midTypePropsTrytbName}{findtrytbPkCsName}、{midTypePropsTrytbName}_{findtrytbPkCsName} /// - public static string ManyToMany_NotFound_CorrespondingField(object trytbTypeName, object pnvName, object tbmidCsName, object midTypePropsTrytbName, object findtrytbPkCsName) => string.Format(Language == "cn" ? - @"【ManyToMany】导航属性 {0}.{1} 在 {2} 中没有找到对应的字段,如:{3}{4}、{3}_{4}" : - @"FreeSql: [ManyToMany] Navigation property {0}.{1} did not find a corresponding field in {2}, such as: {3}{4}, {3}_ {4}", trytbTypeName, pnvName, tbmidCsName, midTypePropsTrytbName, findtrytbPkCsName); + public static string ManyToMany_NotFound_CorrespondingField(object trytbTypeName, object pnvName, object tbmidCsName, object midTypePropsTrytbName, object findtrytbPkCsName) => Language == "cn" ? + $@"【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 在 {tbmidCsName} 中没有找到对应的字段,如:{midTypePropsTrytbName}{findtrytbPkCsName}、{midTypePropsTrytbName}_{findtrytbPkCsName}" : + $@"FreeSql: [ManyToMany] Navigation property {trytbTypeName}. {pnvName} did not find a corresponding field in {tbmidCsName}, such as: {midTypePropsTrytbName}{findtrytbPkCsName}, {midTypePropsTrytbName}_ {findtrytbPkCsName}"; /// /// 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {tbrefTypeName} 缺少主键标识,[Column(IsPrimary = true)] /// - public static string ManyToMany_ParsingError_EntityMissing_PrimaryKey(object trytbTypeName, object pnvName, object tbrefTypeName) => string.Format(Language == "cn" ? - @"【ManyToMany】导航属性 {0}.{1} 解析错误,实体类型 {2} 缺少主键标识,[Column(IsPrimary = true)]" : - @"FreeSql: [ManyToMany] Navigation property {0}.{1} parsing error, entity type {2} missing primary key identity, [Column (IsPrimary = true)]", trytbTypeName, pnvName, tbrefTypeName); + public static string ManyToMany_ParsingError_EntityMissing_PrimaryKey(object trytbTypeName, object pnvName, object tbrefTypeName) => Language == "cn" ? + $@"【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {tbrefTypeName} 缺少主键标识,[Column(IsPrimary = true)]" : + $@"FreeSql: [ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, entity type {tbrefTypeName} missing primary key identity, [Column (IsPrimary = true)]"; /// /// 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {tbrefTypeName} 必须存在对应的 [Navigate(ManyToMany = x)] 集合属性 /// - public static string ManyToMany_ParsingError_EntityMustHas_NavigateCollection(object trytbTypeName, object pnvName, object tbrefTypeName) => string.Format(Language == "cn" ? - @"【ManyToMany】导航属性 {0}.{1} 解析错误,实体类型 {2} 必须存在对应的 [Navigate(ManyToMany = x)] 集合属性" : - @"FreeSql: [ManyToMany] Navigation property {0}.{1} parsing error, entity type {2} must have a corresponding [Navigate (ManyToMany = x)] collection property", trytbTypeName, pnvName, tbrefTypeName); + public static string ManyToMany_ParsingError_EntityMustHas_NavigateCollection(object trytbTypeName, object pnvName, object tbrefTypeName) => Language == "cn" ? + $@"【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {tbrefTypeName} 必须存在对应的 [Navigate(ManyToMany = x)] 集合属性" : + $@"FreeSql: [ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, entity type {tbrefTypeName} must have a corresponding [Navigate (ManyToMany = x)] collection property"; /// /// 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,{tbmidCsName}.{trycolCsName} 和 {trytbCsName}.{trytbPrimarysCsName} 类型不一致 /// - public static string ManyToMany_ParsingError_InconsistentType(object trytbTypeName, object pnvName, object tbmidCsName, object trycolCsName, object trytbCsName, object trytbPrimarysCsName) => string.Format(Language == "cn" ? - @"【ManyToMany】导航属性 {0}.{1} 解析错误,{2}.{3} 和 {4}.{5} 类型不一致" : - @"FreeSql: [ManyToMany] Navigation property {0}.{1} parsing error, {2}.{3} and {4}.{5} type inconsistent", trytbTypeName, pnvName, tbmidCsName, trycolCsName, trytbCsName, trytbPrimarysCsName); + public static string ManyToMany_ParsingError_InconsistentType(object trytbTypeName, object pnvName, object tbmidCsName, object trycolCsName, object trytbCsName, object trytbPrimarysCsName) => Language == "cn" ? + $@"【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,{tbmidCsName}.{trycolCsName} 和 {trytbCsName}.{trytbPrimarysCsName} 类型不一致" : + $@"FreeSql: [ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, {tbmidCsName}. {trycolCsName} and {trytbCsName}. {trytbPrimarysCsName} type inconsistent"; /// /// 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,中间类 {tbmidCsName}.{midTypePropsTrytbName} 错误:{exMessage} /// - public static string ManyToMany_ParsingError_IntermediateClass_ErrorMessage(object trytbTypeName, object pnvName, object tbmidCsName, object midTypePropsTrytbName, object exMessage) => string.Format(Language == "cn" ? - @"【ManyToMany】导航属性 {0}.{1} 解析错误,中间类 {2}.{3} 错误:{4}" : - @"FreeSql: [ManyToMany] Navigation property {0}.{1} parsing error, intermediate class {2}.{3} Error: {4}", trytbTypeName, pnvName, tbmidCsName, midTypePropsTrytbName, exMessage); + public static string ManyToMany_ParsingError_IntermediateClass_ErrorMessage(object trytbTypeName, object pnvName, object tbmidCsName, object midTypePropsTrytbName, object exMessage) => Language == "cn" ? + $@"【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,中间类 {tbmidCsName}.{midTypePropsTrytbName} 错误:{exMessage}" : + $@"FreeSql: [ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, intermediate class {tbmidCsName}.{midTypePropsTrytbName} Error: {exMessage}"; /// /// 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,中间类 {tbmidCsName}.{midTypePropsTrytbName} 导航属性不是【ManyToOne】或【OneToOne】 /// - public static string ManyToMany_ParsingError_IntermediateClass_NotManyToOne_OneToOne(object trytbTypeName, object pnvName, object tbmidCsName, object midTypePropsTrytbName) => string.Format(Language == "cn" ? - @"【ManyToMany】导航属性 {0}.{1} 解析错误,中间类 {2}.{3} 导航属性不是【ManyToOne】或【OneToOne】" : - @"FreeSql: [ManyToMany] Navigation property {0}.{1} parsing error, intermediate class {2}.The {3} navigation property is not ManyToOne or OneToOne", trytbTypeName, pnvName, tbmidCsName, midTypePropsTrytbName); + public static string ManyToMany_ParsingError_IntermediateClass_NotManyToOne_OneToOne(object trytbTypeName, object pnvName, object tbmidCsName, object midTypePropsTrytbName) => Language == "cn" ? + $@"【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,中间类 {tbmidCsName}.{midTypePropsTrytbName} 导航属性不是【ManyToOne】或【OneToOne】" : + $@"FreeSql: [ManyToMany] Navigation property {trytbTypeName}. {pnvName} parsing error, intermediate class {tbmidCsName}. The {midTypePropsTrytbName} navigation property is not ManyToOne or OneToOne"; /// /// 映射异常:{name} 没有一个属性名相同 /// - public static string Mapping_Exception_HasNo_SamePropertyName(object name) => string.Format(Language == "cn" ? - @"映射异常:{0} 没有一个属性名相同" : - @"FreeSql: Mapping exception: {0} None of the property names are the same", name); + public static string Mapping_Exception_HasNo_SamePropertyName(object name) => Language == "cn" ? + $@"映射异常:{name} 没有一个属性名相同" : + $@"FreeSql: Mapping exception: {name} None of the property names are the same"; /// /// Ado.MasterPool 值为 null,该操作无法自启用事务,请显式传递【事务对象】解决 /// public static string MasterPool_IsNull_UseTransaction => Language == "cn" ? @"Ado.MasterPool 值为 null,该操作无法自启用事务,请显式传递【事务对象】解决" : - @"FreeSql: Ado.MasterPool value is null, this operation cannot self-enable transactions, please explicitly pass [transaction object] resolution"; + @"FreeSql: Ado. MasterPool value is null, this operation cannot self-enable transactions, please explicitly pass [transaction object] resolution"; /// /// 缺少 FreeSql 数据库实现包:FreeSql.Provider.{Provider}.dll,可前往 nuget 下载 /// - public static string Missing_FreeSqlProvider_Package(object Provider) => string.Format(Language == "cn" ? - @"缺少 FreeSql 数据库实现包:FreeSql.Provider.{0}.dll,可前往 nuget 下载" : - @"FreeSql: Missing FreeSql database implementation package: FreeSql.Provider.{0}.Dll, downloadable to nuget", Provider); + public static string Missing_FreeSqlProvider_Package(object Provider) => Language == "cn" ? + $@"缺少 FreeSql 数据库实现包:FreeSql.Provider.{Provider}.dll,可前往 nuget 下载" : + $@"FreeSql: Missing FreeSql database implementation package: FreeSql.Provider.{Provider}.Dll, downloadable to nuget"; /// /// 缺少 FreeSql 数据库实现包:{dll},可前往 nuget 下载;如果存在 {dll} 依然报错(原因是环境问题导致反射不到类型),请在 UseConnectionString/UseConnectionFactory 第三个参数手工传入 typeof({providerType}) /// - public static string Missing_FreeSqlProvider_Package_Reason(object dll, object providerType) => string.Format(Language == "cn" ? - @"缺少 FreeSql 数据库实现包:{0},可前往 nuget 下载;如果存在 {0} 依然报错(原因是环境问题导致反射不到类型),请在 UseConnectionString/UseConnectionFactory 第三个参数手工传入 typeof({2})" : - @"FreeSql: The FreeSql database implementation package is missing: {0} can be downloaded to nuget; If there is {0} and an error still occurs (due to environmental issues that cause the type to be unreflected), manually pass in typeof ({2}) in the third parameter of UseConnectionString/UseConnectionFactory", dll, providerType); + public static string Missing_FreeSqlProvider_Package_Reason(object dll, object providerType) => Language == "cn" ? + $@"缺少 FreeSql 数据库实现包:{dll},可前往 nuget 下载;如果存在 {dll} 依然报错(原因是环境问题导致反射不到类型),请在 UseConnectionString/UseConnectionFactory 第三个参数手工传入 typeof({{2}})" : + $@"FreeSql: The FreeSql database implementation package is missing: {dll} can be downloaded to nuget; If there is {dll} and an error still occurs (due to environmental issues that cause the type to be unreflected), manually pass in typeof ({{2}}) in the third parameter of UseConnectionString/UseConnectionFactory"; /// /// 导航属性 {trytbTypeName}.{pnvName} 特性 [Navigate] Bind 数目({bindColumnsCount}) 与 外部主键数目({tbrefPrimarysLength}) 不相同 /// - public static string Navigation_Bind_Number_Different(object trytbTypeName, object pnvName, object bindColumnsCount, object tbrefPrimarysLength) => string.Format(Language == "cn" ? - @"导航属性 {0}.{1} 特性 [Navigate] Bind 数目({2}) 与 外部主键数目({3}) 不相同" : - @"FreeSql: Navigation property {0}.{1}, The number of attributes [Navigate] Binds ({2}) is different from the number of external primary keys ({3})", trytbTypeName, pnvName, bindColumnsCount, tbrefPrimarysLength); + public static string Navigation_Bind_Number_Different(object trytbTypeName, object pnvName, object bindColumnsCount, object tbrefPrimarysLength) => Language == "cn" ? + $@"导航属性 {trytbTypeName}.{pnvName} 特性 [Navigate] Bind 数目({bindColumnsCount}) 与 外部主键数目({tbrefPrimarysLength}) 不相同" : + $@"FreeSql: Navigation property {trytbTypeName}. The number of {pnvName} attributes [Navigate] Binds ({bindColumnsCount}) is different from the number of external primary keys ({tbrefPrimarysLength})"; /// /// {tb2DbName}.{mp2MemberName} 导航属性集合忘了 .AsSelect() 吗?如果在 ToList(a =&gt; a.{mp2MemberName}) 中使用,请移步参考 IncludeMany 文档。 /// - public static string Navigation_Missing_AsSelect(object tb2DbName, object mp2MemberName) => string.Format(Language == "cn" ? - @"{0}.{1} 导航属性集合忘了 .AsSelect() 吗?如果在 ToList(a => a.{1}) 中使用,请移步参考 IncludeMany 文档。" : - @"FreeSql: {0}.{1} Navigation Property Collection forgotten.AsSelect()? If used in ToList(a => a.{1}), step by step to refer to the IncludeMany document.", tb2DbName, mp2MemberName); + public static string Navigation_Missing_AsSelect(object tb2DbName, object mp2MemberName) => Language == "cn" ? + $@"{tb2DbName}.{mp2MemberName} 导航属性集合忘了 .AsSelect() 吗?如果在 ToList(a => a.{mp2MemberName}) 中使用,请移步参考 IncludeMany 文档。" : + $@"FreeSql: {tb2DbName}. {mp2MemberName} Navigation Property Collection forgotten. AsSelect()? If used in ToList (a => a. {mp2MemberName}), step by step to refer to the IncludeMany document."; /// /// 【导航属性】{trytbTypeDisplayCsharp}.{pName} 缺少 set 属性 /// - public static string Navigation_Missing_SetProperty(object trytbTypeDisplayCsharp, object pName) => string.Format(Language == "cn" ? - @"【导航属性】{0}.{1} 缺少 set 属性" : - @"FreeSql: Navigation Properties {0}.Missing set attribute for {1}", trytbTypeDisplayCsharp, pName); + public static string Navigation_Missing_SetProperty(object trytbTypeDisplayCsharp, object pName) => Language == "cn" ? + $@"【导航属性】{trytbTypeDisplayCsharp}.{pName} 缺少 set 属性" : + $@"FreeSql: Navigation Properties {trytbTypeDisplayCsharp}. Missing set attribute for {pName}"; /// /// 导航属性 {trytbTypeName}.{pnvName} 没有找到对应的字段,如:{pnvName}{findtbrefPkCsName}、{pnvName}_{findtbrefPkCsName}。或者使用 [Navigate] 特性指定关系映射。 /// - public static string Navigation_NotFound_CorrespondingField(object trytbTypeName, object pnvName, object findtbrefPkCsName) => string.Format(Language == "cn" ? - @"导航属性 {0}.{1} 没有找到对应的字段,如:{1}{3}、{1}_{3}。或者使用 [Navigate] 特性指定关系映射。" : - @"FreeSql: Navigation property {0}.{1} No corresponding fields were found, such as: {1}{3}, {1}_ {3}, Or use the [Navigate] attribute to specify the relationship mapping.", trytbTypeName, pnvName, findtbrefPkCsName); + public static string Navigation_NotFound_CorrespondingField(object trytbTypeName, object pnvName, object findtbrefPkCsName) => Language == "cn" ? + $@"导航属性 {trytbTypeName}.{pnvName} 没有找到对应的字段,如:{pnvName}{{3}}、{pnvName}_{{3}}。或者使用 [Navigate] 特性指定关系映射。" : + $@"FreeSql: Navigation property {trytbTypeName}. {pnvName} No corresponding fields were found, such as: {pnvName}{{3}}, {pnvName}_ {{3}}. Or use the [Navigate] attribute to specify the relationship mapping."; /// /// 导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {trytcTypeName} 缺少主键标识,[Column(IsPrimary = true)] /// - public static string Navigation_ParsingError_EntityMissingPrimaryKey(object trytbTypeName, object pnvName, object trytcTypeName) => string.Format(Language == "cn" ? - @"导航属性 {0}.{1} 解析错误,实体类型 {2} 缺少主键标识,[Column(IsPrimary = true)]" : - @"FreeSql: Navigation property {0}.{1} parsing error, entity type {2} missing primary key identity, [Column (IsPrimary = true)]", trytbTypeName, pnvName, trytcTypeName); + public static string Navigation_ParsingError_EntityMissingPrimaryKey(object trytbTypeName, object pnvName, object trytcTypeName) => Language == "cn" ? + $@"导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {trytcTypeName} 缺少主键标识,[Column(IsPrimary = true)]" : + $@"FreeSql: Navigation property {trytbTypeName}. {pnvName} parsing error, entity type {trytcTypeName} missing primary key identity, [Column (IsPrimary = true)]"; /// /// 导航属性 {trytbTypeName}.{pnvName} 解析错误,{trytbCsName}.{trycolCsName} 和 {tbrefCsName}.{tbrefPrimarysCsName} 类型不一致 /// - public static string Navigation_ParsingError_InconsistentType(object trytbTypeName, object pnvName, object trytbCsName, object trycolCsName, object tbrefCsName, object tbrefPrimarysCsName) => string.Format(Language == "cn" ? - @"导航属性 {0}.{1} 解析错误,{2}.{3} 和 {4}.{5} 类型不一致" : - @"FreeSql: Navigation property {0}.{1} parsing error, {2}.{3} and {4}.{5} type inconsistent", trytbTypeName, pnvName, trytbCsName, trycolCsName, tbrefCsName, tbrefPrimarysCsName); + public static string Navigation_ParsingError_InconsistentType(object trytbTypeName, object pnvName, object trytbCsName, object trycolCsName, object tbrefCsName, object tbrefPrimarysCsName) => Language == "cn" ? + $@"导航属性 {trytbTypeName}.{pnvName} 解析错误,{trytbCsName}.{trycolCsName} 和 {tbrefCsName}.{tbrefPrimarysCsName} 类型不一致" : + $@"FreeSql: Navigation property {trytbTypeName}. {pnvName} parsing error, {trytbCsName}. {trycolCsName} and {tbrefCsName}. {tbrefPrimarysCsName} type inconsistent"; /// /// 导航属性 {trytbTypeName}.{pnvName} 特性 [Navigate] 解析错误,在 {tbrefTypeName} 未找到属性:{bi} /// - public static string Navigation_ParsingError_NotFound_Property(object trytbTypeName, object pnvName, object tbrefTypeName, object bi) => string.Format(Language == "cn" ? - @"导航属性 {0}.{1} 特性 [Navigate] 解析错误,在 {2} 未找到属性:{3}" : - @"FreeSql: Navigation property {0}.{1} attribute [Navigate] parsing error, property not found at {2}: {3}", trytbTypeName, pnvName, tbrefTypeName, bi); + public static string Navigation_ParsingError_NotFound_Property(object trytbTypeName, object pnvName, object tbrefTypeName, object bi) => Language == "cn" ? + $@"导航属性 {trytbTypeName}.{pnvName} 特性 [Navigate] 解析错误,在 {tbrefTypeName} 未找到属性:{bi}" : + $@"FreeSql: Navigation property {trytbTypeName}. {pnvName} attribute [Navigate] parsing error, property not found at {tbrefTypeName}: {bi}"; /// /// {tableTypeDisplayCsharp} 没有定义主键,无法使用 SetSource,请尝试 SetDto 或者 SetSource 指定临时主键 /// - public static string NoPrimaryKey_UseSetDto(object tableTypeDisplayCsharp) => string.Format(Language == "cn" ? - @"{0} 没有定义主键,无法使用 SetSource,请尝试 SetDto 或者 SetSource 指定临时主键" : - @"FreeSql: {0} has no primary key defined and cannot use SetSource, Try SetDto", tableTypeDisplayCsharp); + public static string NoPrimaryKey_UseSetDto(object tableTypeDisplayCsharp) => Language == "cn" ? + $@"{tableTypeDisplayCsharp} 没有定义主键,无法使用 SetSource,请尝试 SetDto 或者 SetSource 指定临时主键" : + $@"FreeSql: {tableTypeDisplayCsharp} has no primary key defined and cannot use SetSource. Try SetDto"; /// /// 没有定义属性 /// @@ -471,21 +471,21 @@ namespace FreeSql /// /// 未实现函数表达式 {exp} 解析 /// - public static string Not_Implemented_Expression(object exp) => string.Format(Language == "cn" ? - @"未实现函数表达式 {0} 解析" : - @"FreeSql: Function expression {0} parsing not implemented", exp); + public static string Not_Implemented_Expression(object exp) => Language == "cn" ? + $@"未实现函数表达式 {exp} 解析" : + $@"FreeSql: Function expression {exp} parsing not implemented"; /// /// 未实现函数表达式 {exp} 解析,参数 {expArguments} 必须为常量 /// - public static string Not_Implemented_Expression_ParameterUseConstant(object exp, object expArguments) => string.Format(Language == "cn" ? - @"未实现函数表达式 {0} 解析,参数 {1} 必须为常量" : - @"FreeSql: Function expression {0} parsing not implemented, parameter {1} must be constant", exp, expArguments); + public static string Not_Implemented_Expression_ParameterUseConstant(object exp, object expArguments) => Language == "cn" ? + $@"未实现函数表达式 {exp} 解析,参数 {expArguments} 必须为常量" : + $@"FreeSql: Function expression {exp} parsing not implemented, parameter {expArguments} must be constant"; /// /// 未实现函数表达式 {exp} 解析,如果正在操作导航属性集合,请使用 .AsSelect().{exp3MethodName}({exp3ArgumentsCount}) /// - public static string Not_Implemented_Expression_UseAsSelect(object exp, object exp3MethodName, object exp3ArgumentsCount) => string.Format(Language == "cn" ? - @"未实现函数表达式 {0} 解析,如果正在操作导航属性集合,请使用 .AsSelect().{1}({2})" : - @"FreeSql: Function expression {0} parsing is not implemented, Use if you are working on a navigation property collection, AsSelect().{1}({2})", exp, exp3MethodName, exp3ArgumentsCount); + public static string Not_Implemented_Expression_UseAsSelect(object exp, object exp3MethodName, object exp3ArgumentsCount) => Language == "cn" ? + $@"未实现函数表达式 {exp} 解析,如果正在操作导航属性集合,请使用 .AsSelect().{exp3MethodName}({exp3ArgumentsCount})" : + $@"FreeSql: Function expression {exp} parsing is not implemented. Use if you are working on a navigation property collection. AsSelect (). {exp3MethodName} ({exp3ArgumentsCount})"; /// /// 未实现 MemberAccess 下的 Constant /// @@ -495,9 +495,9 @@ namespace FreeSql /// /// 未实现 {name} /// - public static string Not_Implemented_Name(object name) => string.Format(Language == "cn" ? - @"未实现 {0}" : - @"FreeSql: {0} is not implemented", name); + public static string Not_Implemented_Name(object name) => Language == "cn" ? + $@"未实现 {name}" : + $@"FreeSql: {name} is not implemented"; /// /// 不支持 /// @@ -507,57 +507,57 @@ namespace FreeSql /// /// {dataType} 不支持 OrderByRandom 随机排序 /// - public static string Not_Support_OrderByRandom(object dataType) => string.Format(Language == "cn" ? - @"{0} 不支持 OrderByRandom 随机排序" : - @"FreeSql: {0} does not support OrderByRandom sorting", dataType); + public static string Not_Support_OrderByRandom(object dataType) => Language == "cn" ? + $@"{dataType} 不支持 OrderByRandom 随机排序" : + $@"FreeSql: {dataType} does not support OrderByRandom sorting"; /// /// {property} 不是有效的导航属性 /// - public static string Not_Valid_Navigation_Property(object property) => string.Format(Language == "cn" ? - @"{0} 不是有效的导航属性" : - @"FreeSql: {0} is not a valid navigation property", property); + public static string Not_Valid_Navigation_Property(object property) => Language == "cn" ? + $@"{property} 不是有效的导航属性" : + $@"FreeSql: {property} is not a valid navigation property"; /// /// {dbName} 找不到列 {memberName} /// - public static string NotFound_Column(object dbName, object memberName) => string.Format(Language == "cn" ? - @"{0} 找不到列 {1}" : - @"FreeSql: {0} Column {1} not found", dbName, memberName); + public static string NotFound_Column(object dbName, object memberName) => Language == "cn" ? + $@"{dbName} 找不到列 {memberName}" : + $@"FreeSql: {dbName} Column {memberName} not found"; /// /// 找不到 {CsName} 对应的列 /// - public static string NotFound_CsName_Column(object CsName) => string.Format(Language == "cn" ? - @"找不到 {0} 对应的列" : - @"FreeSql: Cannot find the column corresponding to {0}", CsName); + public static string NotFound_CsName_Column(object CsName) => Language == "cn" ? + $@"找不到 {CsName} 对应的列" : + $@"FreeSql: Cannot find the column corresponding to {CsName}"; /// /// 找不到属性:{memberName} /// - public static string NotFound_Property(object memberName) => string.Format(Language == "cn" ? - @"找不到属性:{0}" : - @"FreeSql: Attribute not found: {0}", memberName); + public static string NotFound_Property(object memberName) => Language == "cn" ? + $@"找不到属性:{memberName}" : + $@"FreeSql: Attribute not found: {memberName}"; /// /// 找不到属性名 {proto} /// - public static string NotFound_PropertyName(object proto) => string.Format(Language == "cn" ? - @"找不到属性名 {0}" : - @"FreeSql: Property name {0} not found", proto); + public static string NotFound_PropertyName(object proto) => Language == "cn" ? + $@"找不到属性名 {proto}" : + $@"FreeSql: Property name {proto} not found"; /// /// Custom 找不到对应的{{ 反射信息 }}:{fiValueCustomArray} /// - public static string NotFound_Reflection(object fiValueCustomArray) => string.Format(Language == "cn" ? - @"Custom 找不到对应的{{ 反射信息 }}:{0}" : - @"FreeSql: Custom could not find the corresponding {{reflection information}}:{0}", fiValueCustomArray); + public static string NotFound_Reflection(object fiValueCustomArray) => Language == "cn" ? + $@"Custom 找不到对应的{{{{ 反射信息 }}}}:{fiValueCustomArray}" : + $@"FreeSql: Custom could not find the corresponding {{{{reflection information}}}}:{fiValueCustomArray}"; /// /// Custom 找不到对应的{{ 静态方法名 }}:{fiValueCustomArray} /// - public static string NotFound_Static_MethodName(object fiValueCustomArray) => string.Format(Language == "cn" ? - @"Custom 找不到对应的{{ 静态方法名 }}:{0}" : - @"FreeSql: Custom could not find the corresponding {{static method name}}:{0}", fiValueCustomArray); + public static string NotFound_Static_MethodName(object fiValueCustomArray) => Language == "cn" ? + $@"Custom 找不到对应的{{{{ 静态方法名 }}}}:{fiValueCustomArray}" : + $@"FreeSql: Custom could not find the corresponding {{{{static method name}}}}:{fiValueCustomArray}"; /// /// [Table(AsTable = xx)] 设置的属性名 {atmGroupsValue} 不存在 /// - public static string NotFound_Table_Property_AsTable(object atmGroupsValue) => string.Format(Language == "cn" ? - @"[Table(AsTable = xx)] 设置的属性名 {0} 不存在" : - @"FreeSql: The property name {0} set by [Table(AsTable = xx)] does not exist", atmGroupsValue); + public static string NotFound_Table_Property_AsTable(object atmGroupsValue) => Language == "cn" ? + $@"[Table(AsTable = xx)] 设置的属性名 {atmGroupsValue} 不存在" : + $@"FreeSql: The property name {atmGroupsValue} set by [Table(AsTable = xx)] does not exist"; /// /// 未指定 UseConnectionString 或者 UseConnectionFactory /// @@ -567,33 +567,33 @@ namespace FreeSql /// /// 【{policyName}】ObjectPool.{GetName}() timeout {totalSeconds} seconds, see: https://github.com/dotnetcore/FreeSql/discussions/1081 /// - public static string ObjectPool_Get_Timeout(object policyName, object GetName, object totalSeconds) => string.Format(Language == "cn" ? - @"【{0}】ObjectPool.{1}() timeout {2} seconds, see: https://github.com/dotnetcore/FreeSql/discussions/1081" : - @"FreeSql: [{0}] ObjectPool.{1}() timeout {2} seconds, see: https://github.com/dotnetcore/FreeSql/discussions/1081", policyName, GetName, totalSeconds); + public static string ObjectPool_Get_Timeout(object policyName, object GetName, object totalSeconds) => Language == "cn" ? + $@"【{policyName}】ObjectPool.{GetName}() timeout {totalSeconds} seconds, see: https://github.com/dotnetcore/FreeSql/discussions/1081" : + $@"FreeSql: [{policyName}] ObjectPool. {GetName}() timeout {totalSeconds} seconds, see: https://github.com/dotnetcore/FreeSql/discussions/1081"; /// - /// 【{policyName}】ObjectPool.GetAsync() The queue is too long, Policy.AsyncGetCapacity = {asyncGetCapacity} + /// 【{policyName}】ObjectPool.GetAsync() The queue is too long. Policy.AsyncGetCapacity = {asyncGetCapacity} /// - public static string ObjectPool_GetAsync_Queue_Long(object policyName, object asyncGetCapacity) => string.Format(Language == "cn" ? - @"【{0}】ObjectPool.GetAsync() The queue is too long, Policy.AsyncGetCapacity = {1}" : - @"FreeSql: [{0}] ObjectPool.GetAsync() The queue is too long, Policy.AsyncGetCapacity = {1}", policyName, asyncGetCapacity); + public static string ObjectPool_GetAsync_Queue_Long(object policyName, object asyncGetCapacity) => Language == "cn" ? + $@"【{policyName}】ObjectPool.GetAsync() The queue is too long. Policy.AsyncGetCapacity = {asyncGetCapacity}" : + $@"FreeSql: [{policyName}] ObjectPool. GetAsync() The queue is too long. Policy. AsyncGetCapacity = {asyncGetCapacity}"; /// /// 【OneToMany】导航属性 {trytbTypeName}.{pnvName} 在 {tbrefCsName} 中没有找到对应的字段,如:{findtrytb}{findtrytbPkCsName}、{findtrytb}_{findtrytbPkCsName} /// - public static string OneToMany_NotFound_CorrespondingField(object trytbTypeName, object pnvName, object tbrefCsName, object findtrytb, object findtrytbPkCsName) => string.Format(Language == "cn" ? - @"【OneToMany】导航属性 {0}.{1} 在 {2} 中没有找到对应的字段,如:{3}{4}、{3}_{4}" : - @"FreeSql: [OneToMany] Navigation property {0}.{1} did not find a corresponding field in {2}, such as: {3}{4}, {3}_{4}", trytbTypeName, pnvName, tbrefCsName, findtrytb, findtrytbPkCsName); + public static string OneToMany_NotFound_CorrespondingField(object trytbTypeName, object pnvName, object tbrefCsName, object findtrytb, object findtrytbPkCsName) => Language == "cn" ? + $@"【OneToMany】导航属性 {trytbTypeName}.{pnvName} 在 {tbrefCsName} 中没有找到对应的字段,如:{findtrytb}{findtrytbPkCsName}、{findtrytb}_{findtrytbPkCsName}" : + $@"FreeSql: [OneToMany] Navigation property {trytbTypeName}.{pnvName} did not find a corresponding field in {tbrefCsName}, such as: {findtrytb}{findtrytbPkCsName}, {findtrytb}_{findtrytbPkCsName}"; /// /// 【OneToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,{trytbCsName}.{trytbPrimarysCsName} 和 {tbrefCsName}.{trycolCsName} 类型不一致 /// - public static string OneToMany_ParsingError_InconsistentType(object trytbTypeName, object pnvName, object trytbCsName, object trytbPrimarysCsName, object tbrefCsName, object trycolCsName) => string.Format(Language == "cn" ? - @"【OneToMany】导航属性 {0}.{1} 解析错误,{2}.{3} 和 {4}.{5} 类型不一致" : - @"FreeSql: [OneToMany] Navigation property {0}.{1} parsing error, {2}.{3} and {4}.{5} is of inconsistent type", trytbTypeName, pnvName, trytbCsName, trytbPrimarysCsName, tbrefCsName, trycolCsName); + public static string OneToMany_ParsingError_InconsistentType(object trytbTypeName, object pnvName, object trytbCsName, object trytbPrimarysCsName, object tbrefCsName, object trycolCsName) => Language == "cn" ? + $@"【OneToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,{trytbCsName}.{trytbPrimarysCsName} 和 {tbrefCsName}.{trycolCsName} 类型不一致" : + $@"FreeSql: [OneToMany] Navigation property {trytbTypeName}.{pnvName} parsing error, {trytbCsName}.{trytbPrimarysCsName} and {tbrefCsName}.{trycolCsName} is of inconsistent type"; /// /// 、{refpropName}{findtrytbPkCsName}、{refpropName}_{findtrytbPkCsName}。或者使用 [Navigate] 特性指定关系映射。 /// - public static string OneToMany_UseNavigate(object refpropName, object findtrytbPkCsName) => string.Format(Language == "cn" ? - @"、{0}{1}、{0}_{1}。或者使用 [Navigate] 特性指定关系映射。" : - @", {0}{1}, {0}_{1}, Or use the [Navigate] attribute to specify the relationship mapping.", refpropName, findtrytbPkCsName); + public static string OneToMany_UseNavigate(object refpropName, object findtrytbPkCsName) => Language == "cn" ? + $@"、{refpropName}{findtrytbPkCsName}、{refpropName}_{findtrytbPkCsName}。或者使用 [Navigate] 特性指定关系映射。" : + $@", {refpropName}{findtrytbPkCsName}, {refpropName}_{findtrytbPkCsName}. Or use the [Navigate] attribute to specify the relationship mapping."; /// /// 参数 field 未指定 /// @@ -603,51 +603,51 @@ namespace FreeSql /// /// {property} 参数错误,它不是集合属性,必须为 IList&lt;T&gt; 或者 ICollection&lt;T&gt; /// - public static string ParameterError_NotValid_Collection(object property) => string.Format(Language == "cn" ? - @"{0} 参数错误,它不是集合属性,必须为 IList 或者 ICollection" : - @"FreeSql: The {0} parameter is incorrect, it is not a collection property and must be IListor ICollection", property); + public static string ParameterError_NotValid_Collection(object property) => Language == "cn" ? + $@"{property} 参数错误,它不是集合属性,必须为 IList 或者 ICollection" : + $@"FreeSql: The {property} parameter is incorrect, it is not a collection property and must be IListor ICollection"; /// /// {property} 参数错误,它不是有效的导航属性 /// - public static string ParameterError_NotValid_Navigation(object property) => string.Format(Language == "cn" ? - @"{0} 参数错误,它不是有效的导航属性" : - @"FreeSql: The {0} parameter is incorrect, it is not a valid navigation property", property); + public static string ParameterError_NotValid_Navigation(object property) => Language == "cn" ? + $@"{property} 参数错误,它不是有效的导航属性" : + $@"FreeSql: The {property} parameter is incorrect, it is not a valid navigation property"; /// /// {where} 参数错误,{keyval} 不是有效的属性名,在实体类 {reftbTypeDisplayCsharp} 无法找到 /// - public static string ParameterError_NotValid_PropertyName(object where, object keyval, object reftbTypeDisplayCsharp) => string.Format(Language == "cn" ? - @"{0} 参数错误,{1} 不是有效的属性名,在实体类 {2} 无法找到" : - @"FreeSql: {0} parameter error, {1} is not a valid property name and cannot be found in entity class {2}", where, keyval, reftbTypeDisplayCsharp); + public static string ParameterError_NotValid_PropertyName(object where, object keyval, object reftbTypeDisplayCsharp) => Language == "cn" ? + $@"{where} 参数错误,{keyval} 不是有效的属性名,在实体类 {reftbTypeDisplayCsharp} 无法找到" : + $@"FreeSql: {where} parameter error, {keyval} is not a valid property name and cannot be found in entity class {reftbTypeDisplayCsharp}"; /// /// {property} 参数错误,格式 "TopicId=Id,多组使用逗号连接" /// - public static string ParameterError_NotValid_UseCommas(object property) => string.Format(Language == "cn" ? - @"{0} 参数错误,格式 ""TopicId=Id,多组使用逗号连接"" " : - @"FreeSql: {0} parameter error, format ""TopicId=Id, multiple groups using comma connection""", property); + public static string ParameterError_NotValid_UseCommas(object property) => Language == "cn" ? + $@"{property} 参数错误,格式 ""TopicId=Id,多组使用逗号连接"" " : + $@"FreeSql: {property} parameter error, format ""TopicId=Id, multiple groups using comma connection"""; /// /// 解析失败 {callExpMethodName} {message} /// - public static string Parsing_Failed(object callExpMethodName, object message) => string.Format(Language == "cn" ? - @"解析失败 {0} {1}" : - @"FreeSql: Parsing failed {0} {1}", callExpMethodName, message); + public static string Parsing_Failed(object callExpMethodName, object message) => Language == "cn" ? + $@"解析失败 {callExpMethodName} {message}" : + $@"FreeSql: Parsing failed {callExpMethodName} {message}"; /// /// 【{policyName}】The ObjectPool has been disposed, see: https://github.com/dotnetcore/FreeSql/discussions/1079 /// - public static string Policy_ObjectPool_Dispose(object policyName) => string.Format(Language == "cn" ? - @"【{0}】The ObjectPool has been disposed, see: https://github.com/dotnetcore/FreeSql/discussions/1079" : - @"FreeSql: [{0}] The ObjectPool has been disposed, see: https://github.com/dotnetcore/FreeSql/discussions/1079", policyName); + public static string Policy_ObjectPool_Dispose(object policyName) => Language == "cn" ? + $@"【{policyName}】The ObjectPool has been disposed, see: https://github.com/dotnetcore/FreeSql/discussions/1079" : + $@"FreeSql: [{policyName}] The ObjectPool has been disposed, see: https://github.com/dotnetcore/FreeSql/discussions/1079"; /// /// 【{policyName}】状态不可用,等待后台检查程序恢复方可使用。{UnavailableExceptionMessage} /// - public static string Policy_Status_NotAvailable(object policyName, object UnavailableExceptionMessage) => string.Format(Language == "cn" ? - @"【{0}】状态不可用,等待后台检查程序恢复方可使用。{1}" : - @"FreeSql: The {0} status is unavailable and cannot be used until the background checker is restored, {1}", policyName, UnavailableExceptionMessage); + public static string Policy_Status_NotAvailable(object policyName, object UnavailableExceptionMessage) => Language == "cn" ? + $@"【{policyName}】状态不可用,等待后台检查程序恢复方可使用。{UnavailableExceptionMessage}" : + $@"FreeSql: The {policyName} status is unavailable and cannot be used until the background checker is restored. {UnavailableExceptionMessage}"; /// /// 属性{trytbVersionColumnCsName} 被标注为行锁(乐观锁)(IsVersion),但其必须为数字类型 或者 byte[] 或者 string,并且不可为 Nullable /// - public static string Properties_AsRowLock_Must_Numeric_Byte(object trytbVersionColumnCsName) => string.Format(Language == "cn" ? - @"属性{0} 被标注为行锁(乐观锁)(IsVersion),但其必须为数字类型 或者 byte[] 或者 string,并且不可为 Nullable" : - @"FreeSql: The property {0} is labeled as a row lock (optimistic lock) (IsVersion), but it must be a numeric type or byte[] or string, and it cannot be Nullable", trytbVersionColumnCsName); + public static string Properties_AsRowLock_Must_Numeric_Byte(object trytbVersionColumnCsName) => Language == "cn" ? + $@"属性{trytbVersionColumnCsName} 被标注为行锁(乐观锁)(IsVersion),但其必须为数字类型 或者 byte[] 或者 string,并且不可为 Nullable" : + $@"FreeSql: The property {trytbVersionColumnCsName} is labeled as a row lock (optimistic lock) (IsVersion), but it must be a numeric type or byte[] or string, and it cannot be Nullable"; /// /// properties 参数不能为空 /// @@ -657,9 +657,9 @@ namespace FreeSql /// /// {property} 属性名无法找到 /// - public static string Property_Cannot_Find(object property) => string.Format(Language == "cn" ? - @"{0} 属性名无法找到" : - @"FreeSql: {0} property name not found", property); + public static string Property_Cannot_Find(object property) => Language == "cn" ? + $@"{property} 属性名无法找到" : + $@"FreeSql: {property} property name not found"; /// /// Range 要求 Value 应该逗号分割,并且长度为 2 /// @@ -681,15 +681,15 @@ namespace FreeSql /// /// {qoteSql} is NULL,除非设置特性 [Column(IsNullable = false)] /// - public static string Set_Column_IsNullable_False(object qoteSql) => string.Format(Language == "cn" ? - @"{0} is NULL,除非设置特性 [Column(IsNullable = false)]" : - @"FreeSql: {0} is NULL unless the attribute [Column (IsNullable = false)]", qoteSql); + public static string Set_Column_IsNullable_False(object qoteSql) => Language == "cn" ? + $@"{qoteSql} is NULL,除非设置特性 [Column(IsNullable = false)]" : + $@"FreeSql: {qoteSql} is NULL unless the attribute [Column (IsNullable = false)]"; /// /// 分表字段值 "{dt}" 不能小于 "{beginTime} " /// - public static string SubTableFieldValue_CannotLessThen(object dt, object beginTime) => string.Format(Language == "cn" ? - @"分表字段值 ""{0}"" 不能小于 ""{1} """ : - @"FreeSql: Subtable field value'{0}'cannot be less than'{1}'", dt, beginTime); + public static string SubTableFieldValue_CannotLessThen(object dt, object beginTime) => Language == "cn" ? + $@"分表字段值 ""{dt}"" 不能小于 ""{beginTime} """ : + $@"FreeSql: Subtable field value'{dt}'cannot be less than'{beginTime}'"; /// /// 分表字段值不能为 null /// @@ -699,15 +699,15 @@ namespace FreeSql /// /// 分表字段值 "{columnValue}" 不能转化成 DateTime /// - public static string SubTableFieldValue_NotConvertDateTime(object columnValue) => string.Format(Language == "cn" ? - @"分表字段值 ""{0}"" 不能转化成 DateTime" : - @"FreeSql: The tabular field value'{0}'cannot be converted to DateTime", columnValue); + public static string SubTableFieldValue_NotConvertDateTime(object columnValue) => Language == "cn" ? + $@"分表字段值 ""{columnValue}"" 不能转化成 DateTime" : + $@"FreeSql: The tabular field value'{columnValue}'cannot be converted to DateTime"; /// /// 分表字段值 "{dt}" 未匹配到分表名 /// - public static string SubTableFieldValue_NotMatchTable(object dt) => string.Format(Language == "cn" ? - @"分表字段值 ""{0}"" 未匹配到分表名" : - @"FreeSql: Table field value'{0}'does not match table name", dt); + public static string SubTableFieldValue_NotMatchTable(object dt) => Language == "cn" ? + $@"分表字段值 ""{dt}"" 未匹配到分表名" : + $@"FreeSql: Table field value'{dt}'does not match table name"; /// /// T2 类型错误 /// @@ -717,63 +717,63 @@ namespace FreeSql /// /// tableName 格式错误,示例:“log_{yyyyMMdd}” /// - public static string TableName_Format_Error(object yyyyMMdd) => string.Format(Language == "cn" ? - @"tableName 格式错误,示例:“log_{0}”" : - @"FreeSql: TableName format error, example: ""log_{0}""", yyyyMMdd); + public static string TableName_Format_Error(object yyyyMMdd) => Language == "cn" ? + $@"tableName 格式错误,示例:“log_{yyyyMMdd}”" : + $@"FreeSql: TableName format error, example: ""log_{yyyyMMdd}"""; /// /// {Type}.AsType 参数错误,请传入正确的实体类型 /// - public static string Type_AsType_Parameter_Error(object Type) => string.Format(Language == "cn" ? - @"{0}.AsType 参数错误,请传入正确的实体类型" : - @"FreeSql: {0}.AsType parameter error, please pass in the correct entity type", Type); + public static string Type_AsType_Parameter_Error(object Type) => Language == "cn" ? + $@"{Type}.AsType 参数错误,请传入正确的实体类型" : + $@"FreeSql: {Type}.AsType parameter error, please pass in the correct entity type"; /// /// {thatFullName} 类型无法访问构造函数 /// - public static string Type_Cannot_Access_Constructor(object thatFullName) => string.Format(Language == "cn" ? - @"{0} 类型无法访问构造函数" : - @"FreeSql: The {0} type cannot access the constructor", thatFullName); + public static string Type_Cannot_Access_Constructor(object thatFullName) => Language == "cn" ? + $@"{thatFullName} 类型无法访问构造函数" : + $@"FreeSql: The {thatFullName} type cannot access the constructor"; /// /// {name} 类型错误 /// - public static string Type_Error_Name(object name) => string.Format(Language == "cn" ? - @"{0} 类型错误" : - @"FreeSql: {0} type error", name); + public static string Type_Error_Name(object name) => Language == "cn" ? + $@"{name} 类型错误" : + $@"FreeSql: {name} type error"; /// /// {Type}.AsType 参数不支持指定为 object /// - public static string TypeAsType_NotSupport_Object(object Type) => string.Format(Language == "cn" ? - @"{0}.AsType 参数不支持指定为 object" : - @"FreeSql: {0}.AsType parameter does not support specifying as object", Type); + public static string TypeAsType_NotSupport_Object(object Type) => Language == "cn" ? + $@"{Type}.AsType 参数不支持指定为 object" : + $@"FreeSql: {Type}.AsType parameter does not support specifying as object"; /// /// 类型 {typeofFullName} 错误,不能使用 IncludeMany /// - public static string TypeError_CannotUse_IncludeMany(object typeofFullName) => string.Format(Language == "cn" ? - @"类型 {0} 错误,不能使用 IncludeMany" : - @"FreeSql: Type {0} error, IncludeMany cannot be used", typeofFullName); + public static string TypeError_CannotUse_IncludeMany(object typeofFullName) => Language == "cn" ? + $@"类型 {typeofFullName} 错误,不能使用 IncludeMany" : + $@"FreeSql: Type {typeofFullName} error, IncludeMany cannot be used"; /// /// 无法解析表达式:{exp} /// - public static string Unable_Parse_Expression(object exp) => string.Format(Language == "cn" ? - @"无法解析表达式:{0}" : - @"FreeSql: Unable to parse expression: {0}", exp); + public static string Unable_Parse_Expression(object exp) => Language == "cn" ? + $@"无法解析表达式:{exp}" : + $@"FreeSql: Unable to parse expression: {exp}"; /// /// 无法解析表达式方法 {exp3tmpCallMethodName} /// - public static string Unable_Parse_ExpressionMethod(object exp3tmpCallMethodName) => string.Format(Language == "cn" ? - @"无法解析表达式方法 {0}" : - @"FreeSql: Unable to parse expression method {0}", exp3tmpCallMethodName); + public static string Unable_Parse_ExpressionMethod(object exp3tmpCallMethodName) => Language == "cn" ? + $@"无法解析表达式方法 {exp3tmpCallMethodName}" : + $@"FreeSql: Unable to parse expression method {exp3tmpCallMethodName}"; /// /// 请使用 fsql.InsertDict(dict) 方法插入字典数据 /// public static string Use_InsertDict_Method => Language == "cn" ? @"请使用 fsql.InsertDict(dict) 方法插入字典数据" : - @"FreeSql: Please use fsql.InsertDict(dict) method inserts dictionary data"; + @"FreeSql: Please use fsql. InsertDict (dict) method inserts dictionary data"; /// /// 找不到 {name} /// - public static string S_NotFound_Name(object name) => string.Format(Language == "cn" ? - @"找不到 {0}" : - @"FreeSql: {0} not found", name); + public static string S_NotFound_Name(object name) => Language == "cn" ? + $@"找不到 {name}" : + $@"FreeSql: {name} not found"; /// /// 从库 /// @@ -791,25 +791,25 @@ namespace FreeSql /// public static string S_Access_InsertOnlyOneAtTime => Language == "cn" ? @"蛋疼的 Access 插入只能一条一条执行,不支持 values(..),(..) 也不支持 select .. UNION ALL select .." : - @"FreeSql: values (..),(..) are not supported"; + @"FreeSql: Egg pain Accs insertion can only be performed one at a time, values (..) are not supported. (..) Select is also not supported.. UNION ALL select.."; /// /// BaseEntity.Initialization 初始化错误,获取到 IFreeSql 是 null /// public static string S_BaseEntity_Initialization_Error => Language == "cn" ? @"BaseEntity.Initialization 初始化错误,获取到 IFreeSql 是 null" : - @"FreeSql: BaseEntity.Initialization initialization error, get IFreeSql is null"; + @"FreeSql: BaseEntity. Initialization initialization error, get IFreeSql is null"; /// /// 【{thisName}】Block access and wait for recovery: {exMessage} /// - public static string S_BlockAccess_WaitForRecovery(object thisName, object exMessage) => string.Format(Language == "cn" ? - @"【{0}】Block access and wait for recovery: {1}" : - @"FreeSql: [{0}] Block access and wait for recovery: {1}", thisName, exMessage); + public static string S_BlockAccess_WaitForRecovery(object thisName, object exMessage) => Language == "cn" ? + $@"【{thisName}】Block access and wait for recovery: {exMessage}" : + $@"FreeSql: [{thisName}] Block access and wait for recovery: {exMessage}"; /// /// 无法将 IQueryable&lt;{typeofName}&gt; 转换为 ISelect&lt;{typeofName}&gt;,因为他的实现不是 FreeSql.Extensions.Linq.QueryableProvider /// - public static string S_CannotBeConverted_To_ISelect(object typeofName) => string.Format(Language == "cn" ? - @"无法将 IQueryable<{0}> 转换为 ISelect<{0}>,因为他的实现不是 FreeSql.Extensions.Linq.QueryableProvider" : - @"FreeSql: IQueryable<{0}> cannot be converted to ISelect<{0}> because its implementation is not FreeSql.Extensions.Linq.QueryableProvider", typeofName); + public static string S_CannotBeConverted_To_ISelect(object typeofName) => Language == "cn" ? + $@"无法将 IQueryable<{typeofName}> 转换为 ISelect<{typeofName}>,因为他的实现不是 FreeSql.Extensions.Linq.QueryableProvider" : + $@"FreeSql: IQueryable<{typeofName}> cannot be converted to ISelect<{typeofName}> because its implementation is not FreeSql.Extensions.Linq.QueryableProvider"; /// /// 连接字符串错误 /// @@ -819,9 +819,9 @@ namespace FreeSql /// /// 【{thisName}】连接字符串错误,请检查。 /// - public static string S_ConnectionStringError_Check(object thisName) => string.Format(Language == "cn" ? - @"【{0}】连接字符串错误,请检查。" : - @"FreeSql: [{0}] Connection string error, please check.", thisName); + public static string S_ConnectionStringError_Check(object thisName) => Language == "cn" ? + $@"【{thisName}】连接字符串错误,请检查。" : + $@"FreeSql: [{thisName}] Connection string error, please check."; /// /// 连接字符串错误,或者检查项目属性 &gt; 生成 &gt; 目标平台:x86 | x64,或者改用 FreeSql.Provider.SqliteCore 访问 arm 平台 /// @@ -831,9 +831,9 @@ namespace FreeSql /// /// 【{thisName}】连接字符串错误,请检查。或者检查项目属性 &gt; 生成 &gt; 目标平台:x86 | x64,或者改用 FreeSql.Provider.SqliteCore 访问 arm 平台 /// - public static string S_ConnectionStringError_CheckProjectConnection(object thisName) => string.Format(Language == "cn" ? - @"【{0}】连接字符串错误,请检查。或者检查项目属性 > 生成 > 目标平台:x86 | x64,或者改用 FreeSql.Provider.SqliteCore 访问 arm 平台" : - @"FreeSql: [{0}] Connection string error, please check, Or check Project Properties > Build > Target Platform: x86 | x64, Or use FreeSql.Provider.SqliteCore accessing arm platform", thisName); + public static string S_ConnectionStringError_CheckProjectConnection(object thisName) => Language == "cn" ? + $@"【{thisName}】连接字符串错误,请检查。或者检查项目属性 > 生成 > 目标平台:x86 | x64,或者改用 FreeSql.Provider.SqliteCore 访问 arm 平台" : + $@"FreeSql: [{thisName}] Connection string error, please check. Or check Project Properties > Build > Target Platform: x86 | x64, Or use FreeSql.Provider.SqliteCore accessing arm platform"; /// /// FreeSql.Provider.CustomAdapter 无法使用 CreateCommand /// @@ -849,9 +849,9 @@ namespace FreeSql /// /// 达梦 CodeFirst 不支持代码创建 tablespace 与 schemas {tbname} /// - public static string S_Dameng_NotSupport_TablespaceSchemas(object tbname) => string.Format(Language == "cn" ? - @"达梦 CodeFirst 不支持代码创建 tablespace 与 schemas {0}" : - @"FreeSql: Dream CodeFirst does not support code creation tablespace and schemas {0}", tbname); + public static string S_Dameng_NotSupport_TablespaceSchemas(object tbname) => Language == "cn" ? + $@"达梦 CodeFirst 不支持代码创建 tablespace 与 schemas {tbname}" : + $@"FreeSql: Dream CodeFirst does not support code creation tablespace and schemas {tbname}"; /// /// -DB 参数错误,未提供 ConnectionString /// @@ -867,15 +867,15 @@ namespace FreeSql /// /// -DB 参数错误,不支持的类型:"{dbargs}" /// - public static string S_DB_ParameterError_UnsupportedType(object dbargs) => string.Format(Language == "cn" ? - @"-DB 参数错误,不支持的类型:""{0}""" : - @"FreeSql: -DB parameter error, unsupported type: ""{0}""", dbargs); + public static string S_DB_ParameterError_UnsupportedType(object dbargs) => Language == "cn" ? + $@"-DB 参数错误,不支持的类型:""{dbargs}""" : + $@"FreeSql: -DB parameter error, unsupported type: ""{dbargs}"""; /// /// {method} 是 FreeSql.Provider.{provider} 特有的功能 /// - public static string S_Features_Unique(object method, object provider) => string.Format(Language == "cn" ? - @"{0} 是 FreeSql.Provider.{1} 特有的功能" : - @"FreeSql: {0} is FreeSql.Provider.{1} specific features", method, provider); + public static string S_Features_Unique(object method, object provider) => Language == "cn" ? + $@"{method} 是 FreeSql.Provider.{provider} 特有的功能" : + $@"FreeSql: {method} is FreeSql.Provider.{provider} specific features"; /// /// fsql.InsertOrUpdate Sqlite 无法完成 UpdateColumns 操作 /// @@ -885,9 +885,9 @@ namespace FreeSql /// /// MygisGeometry.Parse 未实现 "{wkt}" /// - public static string S_MygisGeometry_NotImplement(object wkt) => string.Format(Language == "cn" ? - @"MygisGeometry.Parse 未实现 ""{0}""" : - @"FreeSql: MygisGeometry.Parse does not implement ""{0}""", wkt); + public static string S_MygisGeometry_NotImplement(object wkt) => Language == "cn" ? + $@"MygisGeometry.Parse 未实现 ""{wkt}""" : + $@"FreeSql: MygisGeometry. Parse does not implement ""{wkt}"""; /// /// -NameOptions 参数错误,格式为:0,0,0,0 /// @@ -909,15 +909,15 @@ namespace FreeSql /// /// FreeSql.Provider.{providerName} 未实现 Skip/Offset 功能,如果需要分页请使用判断上一次 id /// - public static string S_NotImplementSkipOffset(object providerName) => string.Format(Language == "cn" ? - @"FreeSql.Provider.{0} 未实现 Skip/Offset 功能,如果需要分页请使用判断上一次 id" : - @"FreeSql: FreeSql.Provider.{0} does not implement Skip/Offset functionality, use to determine last ID if paging is required", providerName); + public static string S_NotImplementSkipOffset(object providerName) => Language == "cn" ? + $@"FreeSql.Provider.{providerName} 未实现 Skip/Offset 功能,如果需要分页请使用判断上一次 id" : + $@"FreeSql: FreeSql.Provider.{providerName} does not implement Skip/Offset functionality, use to determine last ID if paging is required"; /// /// 旧表(OldName):{tboldname} 存在,数据库已存在 {tbname} 表,无法改名 /// - public static string S_OldTableExists(object tboldname, object tbname) => string.Format(Language == "cn" ? - @"旧表(OldName):{0} 存在,数据库已存在 {1} 表,无法改名" : - @"FreeSql: Old table (OldName): {0} exists, database already exists {1} table, cannot rename", tboldname, tbname); + public static string S_OldTableExists(object tboldname, object tbname) => Language == "cn" ? + $@"旧表(OldName):{tboldname} 存在,数据库已存在 {tbname} 表,无法改名" : + $@"FreeSql: Old table (OldName): {tboldname} exists, database already exists {tbname} table, cannot rename"; /// /// OnConflictDoUpdate 功能要求实体类必须设置 IsPrimary 属性 /// @@ -927,51 +927,51 @@ namespace FreeSql /// /// Oracle CodeFirst 不支持代码创建 tablespace 与 schemas {tbname} /// - public static string S_Oracle_NotSupport_TablespaceSchemas(object tbname) => string.Format(Language == "cn" ? - @"Oracle CodeFirst 不支持代码创建 tablespace 与 schemas {0}" : - @"FreeSql: Oracle CodeFirst does not support code creation of tablespace and schemas {0}", tbname); + public static string S_Oracle_NotSupport_TablespaceSchemas(object tbname) => Language == "cn" ? + $@"Oracle CodeFirst 不支持代码创建 tablespace 与 schemas {tbname}" : + $@"FreeSql: Oracle CodeFirst does not support code creation of tablespace and schemas {tbname}"; /// /// 解析失败 {callExpMethodName} {message},提示:可以使用扩展方法 IQueryable.RestoreToSelect() 还原为 ISelect 再查询 /// - public static string S_ParsingFailed_UseRestoreToSelect(object callExpMethodName, object message) => string.Format(Language == "cn" ? - @"解析失败 {0} {1},提示:可以使用扩展方法 IQueryable.RestoreToSelect() 还原为 ISelect 再查询" : - @"FreeSql: Parsing failed {0} {1}, hint: Extension method IQueryable.RestoreToSelect() can be used", callExpMethodName, message); + public static string S_ParsingFailed_UseRestoreToSelect(object callExpMethodName, object message) => Language == "cn" ? + $@"解析失败 {callExpMethodName} {message},提示:可以使用扩展方法 IQueryable.RestoreToSelect() 还原为 ISelect 再查询" : + $@"FreeSql: Parsing failed {callExpMethodName} {message}, hint: Extension method IQueryable can be used. RestoreToSelect() reverted to ISelect re-query"; /// /// fsql.InsertOrUpdate + IfExistsDoNothing + {providerName}要求实体类 {tableCsName} 必须有主键 /// - public static string S_RequiresEntityPrimaryKey(object providerName, object tableCsName) => string.Format(Language == "cn" ? - @"fsql.InsertOrUpdate + IfExistsDoNothing + {0}要求实体类 {1} 必须有主键" : - @"FreeSql: InsertOrUpdate + IfExistsDoNothing + {0} requires the entity class {1} to have a primary key", providerName, tableCsName); + public static string S_RequiresEntityPrimaryKey(object providerName, object tableCsName) => Language == "cn" ? + $@"fsql.InsertOrUpdate + IfExistsDoNothing + {providerName}要求实体类 {tableCsName} 必须有主键" : + $@"FreeSql: InsertOrUpdate + IfExistsDoNothing + {providerName} requires the entity class {tableCsName} to have a primary key"; /// /// SelectMany 错误的类型:{typeFullName} /// - public static string S_SelectManayErrorType(object typeFullName) => string.Format(Language == "cn" ? - @"SelectMany 错误的类型:{0}" : - @"FreeSql: SelectMany error type: {0}", typeFullName); + public static string S_SelectManayErrorType(object typeFullName) => Language == "cn" ? + $@"SelectMany 错误的类型:{typeFullName}" : + $@"FreeSql: SelectMany error type: {typeFullName}"; /// /// 类型 {objentityTypeFullName} 不可迁移 /// - public static string S_Type_IsNot_Migrable(object objentityTypeFullName) => string.Format(Language == "cn" ? - @"类型 {0} 不可迁移" : - @"FreeSql: Type {0} is not migrable", objentityTypeFullName); + public static string S_Type_IsNot_Migrable(object objentityTypeFullName) => Language == "cn" ? + $@"类型 {objentityTypeFullName} 不可迁移" : + $@"FreeSql: Type {objentityTypeFullName} is not migrable"; /// /// 类型 {objentityTypeFullName} 不可迁移,可迁移属性0个 /// - public static string S_Type_IsNot_Migrable_0Attributes(object objentityTypeFullName) => string.Format(Language == "cn" ? - @"类型 {0} 不可迁移,可迁移属性0个" : - @"FreeSql: Type {0} is not migrable, migratable property 0", objentityTypeFullName); + public static string S_Type_IsNot_Migrable_0Attributes(object objentityTypeFullName) => Language == "cn" ? + $@"类型 {objentityTypeFullName} 不可迁移,可迁移属性0个" : + $@"FreeSql: Type {objentityTypeFullName} is not migrable, migratable property 0"; /// /// 未实现 {columnDbTypeTextFull} 类型映射 /// - public static string S_TypeMappingNotImplemented(object columnDbTypeTextFull) => string.Format(Language == "cn" ? - @"未实现 {0} 类型映射" : - @"FreeSql: {0} type mapping not implemented", columnDbTypeTextFull); + public static string S_TypeMappingNotImplemented(object columnDbTypeTextFull) => Language == "cn" ? + $@"未实现 {columnDbTypeTextFull} 类型映射" : + $@"FreeSql: {columnDbTypeTextFull} type mapping not implemented"; /// /// 错误的参数设置:{args} /// - public static string S_WrongParameter(object args) => string.Format(Language == "cn" ? - @"错误的参数设置:{0}" : - @"FreeSql: Wrong parameter setting: {0}", args); + public static string S_WrongParameter(object args) => Language == "cn" ? + $@"错误的参数设置:{args}" : + $@"FreeSql: Wrong parameter setting: {args}"; /// /// 对象池 /// @@ -2019,7 +2019,13 @@ for (var a= 0; a < datas.length; a++) { en = en.replace(args[b], '{' + csargsdict[argname] + '}'); cn = cn.replace(args[b], '{' + csargsdict[argname] + '}'); } - sb += ') => string.Format(Language == "cn" ? \r\n @"' + cn.replace(/"/g, '""') + '" : \r\n @"' + en.replace(/"/g, '""') + '", ' + csargs.join(', ') + ');'; + var cn = cn.replace(/"/g, '""').replace(/\{/g, '{{').replace(/\}/g, '}}'); + var en = en.replace(/"/g, '""').replace(/\{/g, '{{').replace(/\}/g, '}}'); + for (var b = 0; b < csargs.length; b++) { + cn = cn.replace(new RegExp('\\{\\{' + b + '\\}\\}', 'g'), '{' + csargs[b] + '}'); + en = en.replace(new RegExp('\\{\\{' + b + '\\}\\}', 'g'), '{' + csargs[b] + '}'); + } + sb += ') => Language == "cn" ? \r\n $@"' + cn + '" : \r\n $@"' + en + '";'; } } sb += '\r\n}\r\n'; From 55000de8c598207578ad1a59ff75f808dde5bb0a Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Sat, 23 Nov 2024 12:57:54 +0800 Subject: [PATCH 33/38] =?UTF-8?q?v3.5.100-preview20241123=20-=20=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E5=88=B0=20.net90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Directory.Build.props | 2 +- Examples/base_entity/base_entity.csproj | 1 - .../FreeSql.Extensions.AggregateRoot.csproj | 2 +- .../FreeSql.Extensions.BaseEntity.csproj | 2 +- .../FreeSql.Extensions.JsonMap.csproj | 2 +- .../FreeSql.Extensions.LazyLoading.csproj | 2 +- .../FreeSql.Extensions.Linq.csproj | 2 +- .../FreeSql.Extensions.ZeroEntity.csproj | 2 +- .../FreeSql.Generator.csproj | 2 +- FreeSql.All/FreeSql.All.csproj | 2 +- FreeSql.DbContext/FreeSql.DbContext.csproj | 14 +- FreeSql.Repository/FreeSql.Repository.csproj | 4 +- FreeSql/FreeSql.csproj | 2 +- FreeSql/FreeSql.xml | 198 +++++++++--------- .../FreeSql.Provider.ClickHouse.csproj | 2 +- .../FreeSql.Provider.Custom.csproj | 2 +- .../FreeSql.Provider.Dameng.csproj | 2 +- .../DuckdbAdo/DuckdbAdo.cs | 1 + .../FreeSql.Provider.Duckdb/DuckdbUtils.cs | 1 + .../FreeSql.Provider.Duckdb.csproj | 10 +- .../FreeSql.Provider.Firebird.csproj | 8 +- .../FreeSql.Provider.GBase.csproj | 2 +- .../FreeSql.Provider.KingbaseES.csproj | 6 +- .../FreeSql.Provider.MsAccess.csproj | 2 +- .../FreeSql.Provider.MySql.csproj | 11 +- .../FreeSql.Provider.MySqlConnector.csproj | 14 +- .../FreeSql.Provider.Odbc.csproj | 2 +- .../FreeSql.Provider.Oracle.csproj | 12 +- .../FreeSql.Provider.OracleOledb.csproj | 2 +- .../FreeSql.Provider.PostgreSQL.csproj | 8 +- .../PostgreSQLAdo/PostgreSQLTypesConverter.cs | 111 +++++++++- .../PostgreSQLTypesExtensions.cs | 2 +- .../FreeSql.Provider.QuestDb.csproj | 2 +- .../FreeSql.Provider.ShenTong.csproj | 2 +- .../FreeSql.Provider.SqlServer.csproj | 12 +- ...FreeSql.Provider.SqlServerForSystem.csproj | 6 +- .../FreeSql.Provider.Sqlite.csproj | 2 +- .../FreeSql.Provider.SqliteCore.csproj | 2 +- .../FreeSql.Provider.Xugu.csproj | 2 +- 39 files changed, 280 insertions(+), 183 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 7db6e7191..725e8932b 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -12,7 +12,7 @@ diff --git a/Examples/base_entity/base_entity.csproj b/Examples/base_entity/base_entity.csproj index 9dc7e296a..a6df2b756 100644 --- a/Examples/base_entity/base_entity.csproj +++ b/Examples/base_entity/base_entity.csproj @@ -15,7 +15,6 @@ - diff --git a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj index 6581dff69..16cf1f289 100644 --- a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj +++ b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241113 + 3.5.100-preview20241123 readme.md diff --git a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj index ce12c130c..23bd86112 100644 --- a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj +++ b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj @@ -19,7 +19,7 @@ key.snk false latest - 3.5.100-preview20241113 + 3.5.100-preview20241123 readme.md diff --git a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj index 937570027..f5bce1549 100644 --- a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj +++ b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241113 + 3.5.100-preview20241123 readme.md diff --git a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj index 381868ecc..fb102e8cc 100644 --- a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj +++ b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20241113 + 3.5.100-preview20241123 readme.md diff --git a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj index 227fb1e41..1dfd71ee0 100644 --- a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj +++ b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241113 + 3.5.100-preview20241123 readme.md diff --git a/Extensions/FreeSql.Extensions.ZeroEntity/FreeSql.Extensions.ZeroEntity.csproj b/Extensions/FreeSql.Extensions.ZeroEntity/FreeSql.Extensions.ZeroEntity.csproj index 8770ab876..ae5ce181d 100644 --- a/Extensions/FreeSql.Extensions.ZeroEntity/FreeSql.Extensions.ZeroEntity.csproj +++ b/Extensions/FreeSql.Extensions.ZeroEntity/FreeSql.Extensions.ZeroEntity.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241113 + 3.5.100-preview20241123 readme.md diff --git a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj index 6c8e04278..014c6c68e 100644 --- a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj +++ b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj @@ -13,7 +13,7 @@ https://github.com/2881099/FreeSql https://github.com/2881099/FreeSql FreeSql DbFirst 实体生成器 - 3.5.100-preview20241113 + 3.5.100-preview20241123 readme.md diff --git a/FreeSql.All/FreeSql.All.csproj b/FreeSql.All/FreeSql.All.csproj index 46b55b9f8..0fe802877 100644 --- a/FreeSql.All/FreeSql.All.csproj +++ b/FreeSql.All/FreeSql.All.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.5.100-preview20241113 + 3.5.100-preview20241123 readme.md diff --git a/FreeSql.DbContext/FreeSql.DbContext.csproj b/FreeSql.DbContext/FreeSql.DbContext.csproj index ba90924e9..f049676ee 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.csproj +++ b/FreeSql.DbContext/FreeSql.DbContext.csproj @@ -1,7 +1,7 @@ - net8.0;net7.0;net6.0;net5.0;netstandard2.1;netcoreapp3.1;netstandard2.0;net45;net40 + net9.0;net8.0;net7.0;net6.0;net5.0;netcoreapp3.1;netstandard2.1;netstandard2.0;net45;net40 true FreeSql;ncc;YeXiangQin FreeSql is the ORM in .NetCore, .NetFramework, And Xamarin. It supports Mysql, Postgresql, SqlServer, Oracle, Sqlite, Firebird, Clickhouse, DuckDB, TDengine, QuestDB, Odbc, Oledb, 达梦, 人大金仓, 南大通用, 虚谷, 神舟通用, 翰高, And Access @@ -17,7 +17,7 @@ true key.snk false - 3.5.100-preview20241113 + 3.5.100-preview20241123 readme.md @@ -35,10 +35,13 @@ net40 - + netcoreapp + + + @@ -58,9 +61,4 @@ - - - - - diff --git a/FreeSql.Repository/FreeSql.Repository.csproj b/FreeSql.Repository/FreeSql.Repository.csproj index e885fc124..ccc20c59d 100644 --- a/FreeSql.Repository/FreeSql.Repository.csproj +++ b/FreeSql.Repository/FreeSql.Repository.csproj @@ -1,7 +1,7 @@ - net8.0;net7.0;net6.0;net5.0;netcoreapp3.1;netstandard2.1;netstandard2.0;net45;net40 + net9.0;net8.0;net7.0;net6.0;net5.0;netcoreapp3.1;netstandard2.1;netstandard2.0;net45;net40 FreeSql;ncc;YeXiangQin FreeSql Implementation of General Repository, Support MySql/SqlServer/PostgreSQL/Oracle/Sqlite/Firebird/Clickhouse/DuckDB/TDengine/QuestDB/达梦/人大金仓/南大通用/虚谷/神舟通用/翰高/Access, and read/write separation、and split table. https://github.com/2881099/FreeSql/wiki/Repository @@ -17,7 +17,7 @@ true key.snk false - 3.5.100-preview20241113 + 3.5.100-preview20241123 readme.md diff --git a/FreeSql/FreeSql.csproj b/FreeSql/FreeSql.csproj index 0eff1a6e3..e9d57eaa2 100644 --- a/FreeSql/FreeSql.csproj +++ b/FreeSql/FreeSql.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.5.100-preview20241113 + 3.5.100-preview20241123 readme.md diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index c21ae6656..cb1addf59 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -1660,6 +1660,104 @@ + + + 指定事务对象 + + + + + 原生sql语法条件,Where("id = @id", new { id = 1 }) + 提示:parms 参数还可以传 Dictionary<string, object> + + true 时生效 + sql语法条件 + 参数 + + + + + 传入实体,将主键作为条件 + + 实体 + + + + + 传入实体集合,将主键作为条件 + + 实体集合 + + + + + 传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} + + 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 + 是否标识为NOT + + + + + 动态过滤条件 + + + + + + + 禁用全局过滤功能,不传参数时将禁用所有 + + 零个或多个过滤器名字 + + + + + 设置表名规则,可用于分库/分表,参数1:默认表名;返回值:新表名; + + + + + + + 设置表名 + + + + + + + 动态Type,在使用 Delete<object> 后使用本方法,指定实体类型 + + + + + + + 返回即将执行的SQL语句 + + + + + + 执行SQL语句,返回影响的行数 + + + + + + 执行SQL语句,返回被删除的记录 + 注意:此方法只有 Postgresql/SqlServer/Maridb/Firebird/人大金仓 有效果 + + + + + + 指定事务对象 + + + + 指定事务对象 @@ -4205,105 +4303,7 @@ 同步实体类型到数据库(指定表名) 注意:生产环境中谨慎使用 - 实体类型 - 指定表名对比 - 强制同步结构,无视缓存每次都同步 - - - - 根据 System.Type 获取数据库信息 - - - - - - - FreeSql FluentApi 配置实体,方法名与特性相同 - - - - - - - - FreeSql FluentApi 配置实体,方法名与特性相同 - - - - - - - - 获取 FreeSql FluentApi 配置实体的元数据 - - - 未使用ConfigEntity配置时,返回null - - - - 获取实体类核心配置 - - - - - - - 获取所有数据库 - - - - - - 获取指定数据库的表信息,包括表、列详情、主键、唯一键、索引、外键、备注 - - - - - - - 获取指定单表信息,包括列详情、主键、唯一键、索引、备注 - - 表名,如:dbo.table1 - 是否忽略大小写 - - - - - 判断表是否存在 - - 表名,如:dbo.table1 - 是否忽略大小写 - - - - - 获取数据库枚举类型int值 - - - - - - - 获取c#转换,(int)、(long) - - - - - - - 获取c#值 - - - - - - - 获取c#类型,int、long - - - - - + 获取c#类型对象 diff --git a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj index d6a582082..77b7c67bb 100644 --- a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj +++ b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj @@ -19,7 +19,7 @@ False key.snk false - 3.5.100-preview20241113 + 3.5.100-preview20241123 readme.md diff --git a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj index ae5fbbb08..a62270790 100644 --- a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj +++ b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241113 + 3.5.100-preview20241123 readme.md diff --git a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj index 4d50cd7b4..f55613d9c 100644 --- a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj +++ b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20241113 + 3.5.100-preview20241123 readme.md diff --git a/Providers/FreeSql.Provider.Duckdb/DuckdbAdo/DuckdbAdo.cs b/Providers/FreeSql.Provider.Duckdb/DuckdbAdo/DuckdbAdo.cs index ae55f5817..c3fa1a4ff 100644 --- a/Providers/FreeSql.Provider.Duckdb/DuckdbAdo/DuckdbAdo.cs +++ b/Providers/FreeSql.Provider.Duckdb/DuckdbAdo/DuckdbAdo.cs @@ -10,6 +10,7 @@ using System.Linq; using FreeSql.Internal.CommonProvider; using DuckDB.NET.Data; using static DuckDB.NET.Native.NativeMethods; +using ColumnInfo = FreeSql.Internal.Model.ColumnInfo; namespace FreeSql.Duckdb { diff --git a/Providers/FreeSql.Provider.Duckdb/DuckdbUtils.cs b/Providers/FreeSql.Provider.Duckdb/DuckdbUtils.cs index 14ea176ea..b0bd0a6a3 100644 --- a/Providers/FreeSql.Provider.Duckdb/DuckdbUtils.cs +++ b/Providers/FreeSql.Provider.Duckdb/DuckdbUtils.cs @@ -13,6 +13,7 @@ using System.Numerics; using static DuckDB.NET.Native.NativeMethods; using System.Text; using System.Security.AccessControl; +using ColumnInfo = FreeSql.Internal.Model.ColumnInfo; namespace FreeSql.Duckdb { diff --git a/Providers/FreeSql.Provider.Duckdb/FreeSql.Provider.Duckdb.csproj b/Providers/FreeSql.Provider.Duckdb/FreeSql.Provider.Duckdb.csproj index b60510758..e69f6c6b4 100644 --- a/Providers/FreeSql.Provider.Duckdb/FreeSql.Provider.Duckdb.csproj +++ b/Providers/FreeSql.Provider.Duckdb/FreeSql.Provider.Duckdb.csproj @@ -1,7 +1,7 @@ - net8.0;net7.0;net6.0;netstandard2.0 + net9.0;net8.0;net7.0;net6.0;netstandard2.0 true FreeSql;ncc;YeXiangQin FreeSql + DuckDB is a fast in-process analytical database,supports .NetCore、.NetFramework4.6.1+ @@ -18,24 +18,24 @@ true key.snk false - 3.5.100-preview20241113 + 3.5.100-preview20241123 readme.md - + - + - + net60 diff --git a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj index fb9892b16..93fc741bb 100644 --- a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj +++ b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj @@ -1,7 +1,7 @@ - netstandard2.0;net452 + netstandard2.1;netstandard2.0;net452 true FreeSql;ncc;YeXiangQin FreeSql 数据库实现,基于 Firebird @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241113 + 3.5.100-preview20241123 readme.md @@ -27,8 +27,8 @@ - - + + diff --git a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj index c3d1bb37c..952ce5237 100644 --- a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj +++ b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241113 + 3.5.100-preview20241123 readme.md diff --git a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj index 34d74d719..5ad16ea2c 100644 --- a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj +++ b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj @@ -1,7 +1,7 @@ - net8.0;net7.0;net6.0;netstandard2.0;net461 + net9.0;net8.0;net7.0;net6.0;netstandard2.0;net461 true FreeSql;ncc;YeXiangQin FreeSql 数据库实现,基于 人大金仓数据库 V008R003/V008R006 Ado.Net (Kdbndp) @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20241113 + 3.5.100-preview20241123 readme.md @@ -50,7 +50,7 @@ ns20;netstandard20 - + net60 diff --git a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj index 55890cc22..4e38e702e 100644 --- a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj +++ b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241113 + 3.5.100-preview20241123 readme.md diff --git a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj index d9527bed9..6937f9f53 100644 --- a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj +++ b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj @@ -1,7 +1,7 @@ - net8.0;net7.0;net6.0;netstandard2.0;net452;net451;net45;net40 + net9.0;net8.0;net7.0;net6.0;netstandard2.1;netstandard2.0;net452;net451;net45;net40 true FreeSql;ncc;YeXiangQin FreeSql 数据库实现,基于 MySql 5.6,Ado.Net 驱动是 MySql.Data(Oracle官方) @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241113 + 3.5.100-preview20241123 readme.md @@ -27,7 +27,10 @@ - + + + + @@ -41,7 +44,7 @@ net40 - + net60 diff --git a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj index 2d31ddb6d..104e9fe3f 100644 --- a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj +++ b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj @@ -1,7 +1,7 @@ - net8.0;net7.0;net6.0;netcoreapp3.1;netstandard2.1;netstandard2.0;net45 + net9.0;net8.0;net7.0;net6.0;netstandard2.1;netstandard2.0;net45 true FreeSql;ncc;YeXiangQin FreeSql 数据库实现,基于 MySql 5.6,Ado.Net 驱动是 MySqlConnector @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241113 + 3.5.100-preview20241123 readme.md @@ -27,8 +27,12 @@ - - + + + + + + @@ -45,7 +49,7 @@ MySqlConnector - + net60;MySqlConnector diff --git a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj index 04e826c6d..0acbda797 100644 --- a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj +++ b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241113 + 3.5.100-preview20241123 readme.md diff --git a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj index b1c754c5b..453002fe3 100644 --- a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj +++ b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj @@ -1,7 +1,7 @@ - net6.0;net5.0;netstandard2.1;netstandard2.0;net45;net40 + net9.0;net8.0;net7.0;net6.0;net5.0;netcoreapp31;netstandard2.1;net45;net40 true FreeSql;ncc;YeXiangQin FreeSql 数据库实现,基于 Oracle 11 @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241113 + 3.5.100-preview20241123 readme.md @@ -27,13 +27,9 @@ - - + + - - - - diff --git a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj index b90959036..8b25b6679 100644 --- a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj +++ b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241113 + 3.5.100-preview20241123 readme.md diff --git a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj index 834a72d8a..95eecd044 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj +++ b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj @@ -1,7 +1,7 @@ - net8.0;net7.0;net6.0;netstandard2.0;net461;net452;net451;net45 + net9.0;net8.0;net7.0;net6.0;netstandard2.0;net461;net452;net451;net45 true FreeSql;ncc;YeXiangQin FreeSql 数据库实现,基于 PostgreSQL 9.5 @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241113 + 3.5.100-preview20241123 readme.md @@ -31,7 +31,7 @@ - + @@ -49,7 +49,7 @@ nts - + net60 diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLTypesConverter.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLTypesConverter.cs index 16e05bd09..5703740e5 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLTypesConverter.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLTypesConverter.cs @@ -1,11 +1,14 @@ using Newtonsoft.Json.Linq; -using Npgsql; using NpgsqlTypes; using System; using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.Globalization; using System.Linq; using System.Net; using System.Net.NetworkInformation; +using System.Text.RegularExpressions; namespace Newtonsoft.Json { @@ -57,6 +60,98 @@ namespace Newtonsoft.Json return false; } + + private static readonly Regex NpgsqlPointParseRegex = new Regex("\\((-?\\d+.?\\d*),(-?\\d+.?\\d*)\\)"); + static NpgsqlPoint NpgsqlPointParse(string s) + { + Match match = NpgsqlPointParseRegex.Match(s); + if (!match.Success) + throw new FormatException("Not a valid point: " + s); + + return new NpgsqlPoint(double.Parse(match.Groups[1].ToString(), NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat), double.Parse(match.Groups[2].ToString(), NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat)); + } + static readonly Regex NpgsqlLineRegex = new Regex(@"\{(-?\d+.?\d*),(-?\d+.?\d*),(-?\d+.?\d*)\}"); + static NpgsqlLine NpgsqlLineParse(string s) + { + var m = NpgsqlLineRegex.Match(s); + if (!m.Success) + throw new FormatException("Not a valid line: " + s); + return new NpgsqlLine( + double.Parse(m.Groups[1].ToString(), NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat), + double.Parse(m.Groups[2].ToString(), NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat), + double.Parse(m.Groups[3].ToString(), NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat) + ); + } + static readonly Regex NpgsqlLSegRegex = new Regex(@"\[\((-?\d+.?\d*),(-?\d+.?\d*)\),\((-?\d+.?\d*),(-?\d+.?\d*)\)\]"); + static NpgsqlLSeg NpgsqlLSegParse(string s) + { + var m = NpgsqlLSegRegex.Match(s); + if (!m.Success) + { + throw new FormatException("Not a valid line: " + s); + } + return new NpgsqlLSeg( + double.Parse(m.Groups[1].ToString(), NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat), + double.Parse(m.Groups[2].ToString(), NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat), + double.Parse(m.Groups[3].ToString(), NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat), + double.Parse(m.Groups[4].ToString(), NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat) + ); + } + static readonly Regex NpgsqlBoxRegex = new Regex(@"\((-?\d+.?\d*),(-?\d+.?\d*)\),\((-?\d+.?\d*),(-?\d+.?\d*)\)"); + static NpgsqlBox NpgsqlBoxParse(string s) + { + var m = NpgsqlBoxRegex.Match(s); + return new NpgsqlBox( + new NpgsqlPoint(double.Parse(m.Groups[1].ToString(), NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat), + double.Parse(m.Groups[2].ToString(), NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat)), + new NpgsqlPoint(double.Parse(m.Groups[3].ToString(), NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat), + double.Parse(m.Groups[4].ToString(), NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat)) + ); + } + static NpgsqlPath NpgsqlPathParse(string s) + { + var open = s[0] == '[' ? true : (s[0] == '(' ? false : throw new Exception("Invalid path string: " + s)); + Debug.Assert(s[s.Length - 1] == (open ? ']' : ')')); + var result = new NpgsqlPath(open); + var i = 1; + while (true) + { + var i2 = s.IndexOf(')', i); + result.Add(NpgsqlPointParse(s.Substring(i, i2 - i + 1))); + if (s[i2 + 1] != ',') + break; + i = i2 + 2; + } + return result; + } + static NpgsqlPolygon NpgsqlPolygonParse(string s) + { + var points = new List(); + var i = 1; + while (true) + { + var i2 = s.IndexOf(')', i); + points.Add(NpgsqlPointParse(s.Substring(i, i2 - i + 1))); + if (s[i2 + 1] != ',') + break; + i = i2 + 2; + } + return new NpgsqlPolygon(points); + } + static readonly Regex NpgsqlCircleRegex = new Regex(@"<\((-?\d+.?\d*),(-?\d+.?\d*)\),(\d+.?\d*)>"); + static NpgsqlCircle NpgsqlCircleParse(string s) + { + var m = NpgsqlCircleRegex.Match(s); + if (!m.Success) + throw new FormatException("Not a valid circle: " + s); + + return new NpgsqlCircle( + double.Parse(m.Groups[1].ToString(), NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat), + double.Parse(m.Groups[2].ToString(), NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat), + double.Parse(m.Groups[3].ToString(), NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat) + ); + } + private object YieldJToken(Type ctype, JToken jt, int rank) { if (jt.Type == JTokenType.Null) return null; @@ -65,13 +160,13 @@ namespace Newtonsoft.Json var ctypeGenericType1 = ctype.GenericTypeArguments.FirstOrDefault();//ctype.Namespace == "System" && ctype.Name.StartsWith("Nullable`") ? ctype.GenericTypeArguments.FirstOrDefault() : null; if (ctype == typeof_BitArray) return jt.ToString().ToBitArray(); - if (ctype == typeof_NpgsqlPoint || ctypeGenericType1 == typeof_NpgsqlPoint) return NpgsqlPoint.Parse(jt.ToString()); - if (ctype == typeof_NpgsqlLine || ctypeGenericType1 == typeof_NpgsqlLine) return NpgsqlLine.Parse(jt.ToString()); - if (ctype == typeof_NpgsqlLSeg || ctypeGenericType1 == typeof_NpgsqlLSeg) return NpgsqlLSeg.Parse(jt.ToString()); - if (ctype == typeof_NpgsqlBox || ctypeGenericType1 == typeof_NpgsqlBox) return NpgsqlBox.Parse(jt.ToString()); - if (ctype == typeof_NpgsqlPath || ctypeGenericType1 == typeof_NpgsqlPath) return NpgsqlPath.Parse(jt.ToString()); - if (ctype == typeof_NpgsqlPolygon || ctypeGenericType1 == typeof_NpgsqlPolygon) return NpgsqlPolygon.Parse(jt.ToString()); - if (ctype == typeof_NpgsqlCircle || ctypeGenericType1 == typeof_NpgsqlCircle) return NpgsqlCircle.Parse(jt.ToString()); + if (ctype == typeof_NpgsqlPoint || ctypeGenericType1 == typeof_NpgsqlPoint) return NpgsqlPointParse(jt.ToString()); + if (ctype == typeof_NpgsqlLine || ctypeGenericType1 == typeof_NpgsqlLine) return NpgsqlLineParse(jt.ToString()); + if (ctype == typeof_NpgsqlLSeg || ctypeGenericType1 == typeof_NpgsqlLSeg) return NpgsqlLSegParse(jt.ToString()); + if (ctype == typeof_NpgsqlBox || ctypeGenericType1 == typeof_NpgsqlBox) return NpgsqlBoxParse(jt.ToString()); + if (ctype == typeof_NpgsqlPath || ctypeGenericType1 == typeof_NpgsqlPath) return NpgsqlPathParse(jt.ToString()); + if (ctype == typeof_NpgsqlPolygon || ctypeGenericType1 == typeof_NpgsqlPolygon) return NpgsqlPolygonParse(jt.ToString()); + if (ctype == typeof_NpgsqlCircle || ctypeGenericType1 == typeof_NpgsqlCircle) return NpgsqlCircleParse(jt.ToString()); if (ctype == typeof_Cidr || ctypeGenericType1 == typeof_Cidr) { diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLTypesExtensions.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLTypesExtensions.cs index d3796ea24..0ca73db0e 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLTypesExtensions.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLTypesExtensions.cs @@ -35,7 +35,7 @@ public static partial class PostgreSQLTypesExtensions double radLng2 = (double)(point.X) * Math.PI / 180d; return 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin((radLat1 - radLat2) / 2), 2) + Math.Cos(radLat1) * Math.Cos(radLat2) * Math.Pow(Math.Sin((radLng1 - radLng2) / 2), 2))) * 6378137; } - + public static NpgsqlRange ToNpgsqlRange(this string that) { var s = that; diff --git a/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj b/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj index 3fa8114bb..468264718 100644 --- a/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj +++ b/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241113 + 3.5.100-preview20241123 readme.md diff --git a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj index 4d98e7a0f..cbc25cfa1 100644 --- a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj +++ b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20241113 + 3.5.100-preview20241123 readme.md diff --git a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj index 3c4130b6f..af9f909c7 100644 --- a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj +++ b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj @@ -1,7 +1,7 @@ - net8.0;net7.0;net6.0;netstandard2.0;net451;net45;net40 + net9.0;net8.0;net7.0;net6.0;netstandard2.1;netstandard2.0;net451;net45;net40 true FreeSql;ncc;YeXiangQin FreeSql 数据库实现,基于 SqlServer 2005+,并根据版本适配分页方法:row_number 或 offset fetch next @@ -18,7 +18,7 @@ true false key.snk - 3.5.100-preview20241113 + 3.5.100-preview20241123 readme.md @@ -30,21 +30,21 @@ - - + + - + microsoft net40 - + net60;microsoft diff --git a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj index 731901075..48509e2e6 100644 --- a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj +++ b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj @@ -1,7 +1,7 @@ - net8.0;net7.0;net6.0;netstandard2.0;net451;net45;net40 + net9.0;net8.0;net7.0;net6.0;netstandard2.1;netstandard2.0;net451;net45;net40 true FreeSql;ncc;YeXiangQin FreeSql 数据库实现,基于 System.Data.SqlClient + SqlServer 2005+,并根据版本适配分页方法:row_number 或 offset fetch next @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241113 + 3.5.100-preview20241123 readme.md @@ -42,7 +42,7 @@ net40 - + net60 diff --git a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj index bd86071be..14652bdc9 100644 --- a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj +++ b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241113 + 3.5.100-preview20241123 readme.md diff --git a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj index a9f4cd1e6..687e0d59e 100644 --- a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj +++ b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241113 + 3.5.100-preview20241123 readme.md diff --git a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj index aafabf6b2..91a23d754 100644 --- a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj +++ b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20241113 + 3.5.100-preview20241123 readme.md From cc179602024359eca25e4f9c99717da9d759c388 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Sun, 24 Nov 2024 14:13:25 +0800 Subject: [PATCH 34/38] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20Repository=20+?= =?UTF-8?q?=20AuditValue=20+=20Attach=20=E9=97=AE=E9=A2=98=EF=BC=9B#1931?= =?UTF-8?q?=20#1746?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Examples/base_entity/Program.cs | 26 +- FreeSql.DbContext/DbSet/DbSet.cs | 7 +- FreeSql.DbContext/FreeSql.DbContext.csproj | 2 +- FreeSql/Extensions/EntityUtilExtensions.cs | 6 +- FreeSql/FreeSql.xml | 430 ++++++++++----------- 5 files changed, 232 insertions(+), 239 deletions(-) diff --git a/Examples/base_entity/Program.cs b/Examples/base_entity/Program.cs index c22994491..3056d9fe9 100644 --- a/Examples/base_entity/Program.cs +++ b/Examples/base_entity/Program.cs @@ -574,7 +574,7 @@ namespace base_entity //.UseSlaveWeight(10, 1, 1, 5) - .UseConnectionString(FreeSql.DataType.Firebird, @"database=localhost:D:\fbdata\EXAMPLES.fdb;user=sysdba;password=123456;max pool size=5") + //.UseConnectionString(FreeSql.DataType.Firebird, @"database=localhost:D:\fbdata\EXAMPLES.fdb;user=sysdba;password=123456;max pool size=5") //.UseQuoteSqlName(false) //.UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;min pool size=1;Max pool size=3;AllowLoadLocalInfile=true") @@ -619,6 +619,18 @@ namespace base_entity BaseEntity.Initialization(fsql, () => _asyncUow.Value); #endregion + fsql.Aop.AuditValue += (_, e) => + { + + }; + + var tt1 = new ProjectItem { ID = 1, MaxQuantity = 0, Code = null, Name = null }; + var tt2 = new ProjectItem { ID = 1, MaxQuantity = 100, Code = null, Name = null }; + var repot2 = fsql.GetRepository(); + + repot2.Attach(tt1); + var nt1 = repot2.Update(tt2); + fsql.Delete().Where("1=1").ExecuteAffrows(); fsql.Insert(new List { @@ -721,17 +733,7 @@ namespace base_entity fsql.Select().Where(a => a.Id == new Guid("xxx")).ToList(a => new Guid("zzz")); - fsql.Aop.AuditValue += (_, e) => - { - - }; - - var tt1 = new ProjectItem { ID = 1, MaxQuantity = 0, Code = null, Name = null }; - var tt2 = new ProjectItem { ID = 1, MaxQuantity = 100, Code = null, Name = null }; - var repot2 = fsql.GetRepository(); - - repot2.Attach(tt1); - var nt1 = repot2.Update(tt2); + var fsql2 = fsql; // 动态构建实体类型,树形结构,引用自身类型 diff --git a/FreeSql.DbContext/DbSet/DbSet.cs b/FreeSql.DbContext/DbSet/DbSet.cs index b66df0505..25614a1ab 100644 --- a/FreeSql.DbContext/DbSet/DbSet.cs +++ b/FreeSql.DbContext/DbSet/DbSet.cs @@ -225,7 +225,12 @@ namespace FreeSql { if (isAuditValue) { - FreeSql.Internal.CommonProvider.UpdateProvider.AuditDataValue(this, item, _db.OrmOriginal, _table, null); //与 CanUpdate 同步 + foreach (var col in _table.Columns.Values) //#1746 + { + object val = col.GetValue(item); + if (val == null && col.Attribute.MapType == typeof(string) && col.Attribute.IsNullable == false) + col.SetValue(item, val = ""); + } _db.Options.AuditValue?.Invoke(new DbContextAuditValueEventArgs(Aop.AuditValueType.Update, _table.Type, item)); } var key = _db.OrmOriginal.GetEntityKeyString(_entityType, item, false); diff --git a/FreeSql.DbContext/FreeSql.DbContext.csproj b/FreeSql.DbContext/FreeSql.DbContext.csproj index f049676ee..a61d4ba51 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.csproj +++ b/FreeSql.DbContext/FreeSql.DbContext.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.5.100-preview20241123 + 3.5.100-preview20241124 readme.md diff --git a/FreeSql/Extensions/EntityUtilExtensions.cs b/FreeSql/Extensions/EntityUtilExtensions.cs index d4635e39b..7925fe2c6 100644 --- a/FreeSql/Extensions/EntityUtilExtensions.cs +++ b/FreeSql/Extensions/EntityUtilExtensions.cs @@ -253,9 +253,9 @@ namespace FreeSql.Extensions.EntityUtil ) }); exps.AddRange(new Expression[] { - Expression.Return(returnTarget, var2Ret), - Expression.Label(returnTarget, Expression.Default(typeof(object))) - }); + Expression.Return(returnTarget, var2Ret), + Expression.Label(returnTarget, Expression.Default(typeof(object))) + }); return Expression.Lambda>(Expression.Block(new[] { var1Parm, var2Ret }, exps), new[] { parm1 }).Compile(); }); return func(entity); diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index cb1addf59..4ccbbef74 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -1087,6 +1087,93 @@ + + + 动态创建实体类型 + + + + + 配置Class + + 类名 + 类标记的特性[Table(Name = "xxx")] [Index(xxxx)] + + + + + 获取类型构建器,可作为要构建的Type来引用 + + + + + 配置属性 + + 属性名称 + 属性类型 + 属性标记的特性-支持多个 + + + + + 配置属性 + + 属性名称 + 属性类型 + 该属性是否重写父类属性 + 属性标记的特性-支持多个 + + + + + 配置属性 + + 属性名称 + 属性类型 + 该属性是否重写父类属性 + 属性默认值 + 属性标记的特性-支持多个 + + + + + 配置父类 + + 父类类型 + + + + + Override属性 + + + + + + Emit动态创建出Class - Type + + + + + + Emit动态创建出Class - Type,不附带获取TableInfo + + + + + + 首字母小写 + + + + + + + 首字母大写 + + + + 获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值时,返回 "" @@ -1660,104 +1747,6 @@ - - - 指定事务对象 - - - - - 原生sql语法条件,Where("id = @id", new { id = 1 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - true 时生效 - sql语法条件 - 参数 - - - - - 传入实体,将主键作为条件 - - 实体 - - - - - 传入实体集合,将主键作为条件 - - 实体集合 - - - - - 传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} - - 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 - 是否标识为NOT - - - - - 动态过滤条件 - - - - - - - 禁用全局过滤功能,不传参数时将禁用所有 - - 零个或多个过滤器名字 - - - - - 设置表名规则,可用于分库/分表,参数1:默认表名;返回值:新表名; - - - - - - - 设置表名 - - - - - - - 动态Type,在使用 Delete<object> 后使用本方法,指定实体类型 - - - - - - - 返回即将执行的SQL语句 - - - - - - 执行SQL语句,返回影响的行数 - - - - - - 执行SQL语句,返回被删除的记录 - 注意:此方法只有 Postgresql/SqlServer/Maridb/Firebird/人大金仓 有效果 - - - - - - 指定事务对象 - - - - 指定事务对象 @@ -4303,7 +4292,105 @@ 同步实体类型到数据库(指定表名) 注意:生产环境中谨慎使用 - + 实体类型 + 指定表名对比 + 强制同步结构,无视缓存每次都同步 + + + + 根据 System.Type 获取数据库信息 + + + + + + + FreeSql FluentApi 配置实体,方法名与特性相同 + + + + + + + + FreeSql FluentApi 配置实体,方法名与特性相同 + + + + + + + + 获取 FreeSql FluentApi 配置实体的元数据 + + + 未使用ConfigEntity配置时,返回null + + + + 获取实体类核心配置 + + + + + + + 获取所有数据库 + + + + + + 获取指定数据库的表信息,包括表、列详情、主键、唯一键、索引、外键、备注 + + + + + + + 获取指定单表信息,包括列详情、主键、唯一键、索引、备注 + + 表名,如:dbo.table1 + 是否忽略大小写 + + + + + 判断表是否存在 + + 表名,如:dbo.table1 + 是否忽略大小写 + + + + + 获取数据库枚举类型int值 + + + + + + + 获取c#转换,(int)、(long) + + + + + + + 获取c#值 + + + + + + + 获取c#类型,int、long + + + + + 获取c#类型对象 @@ -5810,6 +5897,28 @@ 对象池 + + + 动态构建Class Type + + + + + + 根据字典,创建 table 对应的实体对象 + + + + + + + + 根据实体对象,创建 table 对应的字典 + + + + + C#: that >= between && that <= and @@ -6376,126 +6485,3 @@ - - - - - 插入数据,传入实体集合 - - - - - - - - 插入数据,传入实体集合 - - - - - - - - 插入或更新数据,此功能依赖数据库特性(低版本可能不支持),参考如下: - MySql 5.6+: on duplicate key update - PostgreSQL 9.4+: on conflict do update - SqlServer 2008+: merge into - Oracle 11+: merge into - Sqlite: replace into - DuckDB: on conflict do update - 达梦: merge into - 人大金仓:on conflict do update - 神通:merge into - MsAccess:不支持 - 注意区别:FreeSql.Repository 仓储也有 InsertOrUpdate 方法(不依赖数据库特性) - - - - - - - 修改数据 - - - - - - - 修改数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} - - - 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 - - - - - 查询数据 - - - - - - - 查询数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} - - - 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 - - - - - 删除数据 - - - - - - - 删除数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} - - - 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 - - - - - 开启事务(不支持异步) - v1.5.0 关闭了线程事务超时自动提交的机制 - - 事务体 () => {} - - - - 开启事务(不支持异步) - v1.5.0 关闭了线程事务超时自动提交的机制 - - - 事务体 () => {} - - - - 数据库访问对象 - - - - - 所有拦截方法都在这里 - - - - - CodeFirst 模式开发相关方法 - - - - - DbFirst 模式开发相关方法 - - - - - 全局过滤设置,可默认附加为 Select/Update/Delete 条件 - - - - From 7e061967197679f822f0df2d4e80106e35b1bb60 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Wed, 27 Nov 2024 20:31:19 +0800 Subject: [PATCH 35/38] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20Xugu=20Ado.DataT?= =?UTF-8?q?ype=20=E8=AE=BE=E7=BD=AE=E9=94=99=E8=AF=AF=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98=EF=BC=9B#1933?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql/FreeSql.xml | 610 +++++++++--------- .../FreeSql.Provider.Xugu/Curd/XuguSelect.cs | 90 +-- .../FreeSql.Provider.Xugu/XuguAdo/XuguAdo.cs | 6 +- 3 files changed, 343 insertions(+), 363 deletions(-) diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index cb1addf59..ebae9250b 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -1087,6 +1087,93 @@ + + + 动态创建实体类型 + + + + + 配置Class + + 类名 + 类标记的特性[Table(Name = "xxx")] [Index(xxxx)] + + + + + 获取类型构建器,可作为要构建的Type来引用 + + + + + 配置属性 + + 属性名称 + 属性类型 + 属性标记的特性-支持多个 + + + + + 配置属性 + + 属性名称 + 属性类型 + 该属性是否重写父类属性 + 属性标记的特性-支持多个 + + + + + 配置属性 + + 属性名称 + 属性类型 + 该属性是否重写父类属性 + 属性默认值 + 属性标记的特性-支持多个 + + + + + 配置父类 + + 父类类型 + + + + + Override属性 + + + + + + Emit动态创建出Class - Type + + + + + + Emit动态创建出Class - Type,不附带获取TableInfo + + + + + + 首字母小写 + + + + + + + 首字母大写 + + + + 获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值时,返回 "" @@ -1661,197 +1748,7 @@ - - 指定事务对象 - - - - - 原生sql语法条件,Where("id = @id", new { id = 1 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - true 时生效 - sql语法条件 - 参数 - - - - - 传入实体,将主键作为条件 - - 实体 - - - - - 传入实体集合,将主键作为条件 - - 实体集合 - - - - - 传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} - - 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 - 是否标识为NOT - - - - - 动态过滤条件 - - - - - - - 禁用全局过滤功能,不传参数时将禁用所有 - - 零个或多个过滤器名字 - - - - - 设置表名规则,可用于分库/分表,参数1:默认表名;返回值:新表名; - - - - - - - 设置表名 - - - - - - - 动态Type,在使用 Delete<object> 后使用本方法,指定实体类型 - - - - - - - 返回即将执行的SQL语句 - - - - - - 执行SQL语句,返回影响的行数 - - - - - - 执行SQL语句,返回被删除的记录 - 注意:此方法只有 Postgresql/SqlServer/Maridb/Firebird/人大金仓 有效果 - - - - - - 指定事务对象 - - - - - - - 指定事务对象 - - - - - - - 命令超时设置(秒) - - - - - - - 追加准备插入的实体 - - 实体 - - - - - 追加准备插入的实体 - - 实体 - - - - - 追加准备插入的实体集合 - - 实体集合 - - - - - 只插入的列,InsertColumns(a => a.Name) | InsertColumns(a => new{a.Name,a.Time}) | InsertColumns(a => new[]{"name","time"}) - - lambda选择列 - - - - - 只插入的列 - - 属性名,或者字段名 - - - - - 忽略的列,IgnoreColumns(a => a.Name) | IgnoreColumns(a => new{a.Name,a.Time}) | IgnoreColumns(a => new[]{"name","time"}) - - lambda选择列 - - - - - 忽略的列 - - 属性名,或者字段名 - - - - - 忽略 InsertValueSql 设置,将使用实体对象的值插入 - IgnoreInsertValueSql(a => a.Name) | IgnoreInsertValueSql(a => new{a.Name,a.Time}) | IgnoreInsertValueSql(a => new[]{"name","time"}) - - 属性名,或者字段名 - - - - - 指定可插入自增字段 - - - - - - 不使用参数化,可通过 IFreeSql.CodeFirst.IsNotCommandParameter 全局性设置 - - 是否不使用参数化 - - - - - 批量执行选项设置,一般不需要使用该方法 - 各数据库 values, parameters 限制不一样,默认设置: - MySql 5000 3000 - PostgreSQL 5000 3000 - SqlServer 1000 2100 - Oracle 500 999 - Sqlite 5000 999 - 若没有事务传入,内部(默认)会自动开启新事务,保证拆包执行的完整性。 + 若没有事务传入,内部(默认)会自动开启新事务,保证拆包执行的完整性。 指定根据 values 上限数量拆分执行 指定根据 parameters 上限数量拆分执行 @@ -2417,6 +2314,92 @@ 参数 + + + 按原生sql语法排序,OrderBy("count(name) FreeSql.ISelect0`2.RightJoin(System.String,System.Object)"> + + 右联查询,使用原生sql语法,RightJoin("type b on b.id = a.id and b.clicks > @clicks", new { clicks = 1 }) + 提示:parms 参数还可以传 Dictionary<string, object> + + sql语法条件 + 参数 + + + + + 在 JOIN 位置插入 SQL 内容 + 如:.RawJoin("OUTER APPLY ( select id from t2 ) b") + + + + + + + 原生sql语法条件,Where("id = @id", new { id = 1 }) + 提示:parms 参数还可以传 Dictionary<string, object> + + sql语法条件 + 参数 + + + + + 原生sql语法条件,WhereIf(true, "id = @id", new { id = 1 }) + 提示:parms 参数还可以传 Dictionary<string, object> + + true 时生效 + sql语法条件 + 参数 + + + + + 动态过滤条件 + + + + + + + 禁用全局过滤功能,不传参数时将禁用所有 + + 零个或多个过滤器名字 + + + + + 排他更新锁 + 注意:务必在开启事务后使用该功能 + MySql: for update + SqlServer: With(UpdLock, RowLock, NoWait) + PostgreSQL: for update nowait + Oracle: for update nowait + Sqlite: 无效果 + 达梦: for update nowait + 人大金仓: for update nowait + 神通: for update + + noawait + + + + + 按原生sql语法分组,GroupBy("concat(name, @cc)", new { cc = 1 }) + 提示:parms 参数还可以传 Dictionary<string, object> + + sql语法 + 参数 + + + + + 按原生sql语法聚合条件过滤,Having("count(name) = @cc", new { cc = 1 }) + 提示:parms 参数还可以传 Dictionary<string, object> + + sql语法条件 + 参数 + + 按原生sql语法排序,OrderBy("count(name) + @cc desc", new { cc = 1 }) @@ -4303,7 +4286,105 @@ 同步实体类型到数据库(指定表名) 注意:生产环境中谨慎使用 - + 实体类型 + 指定表名对比 + 强制同步结构,无视缓存每次都同步 + + + + 根据 System.Type 获取数据库信息 + + + + + + + FreeSql FluentApi 配置实体,方法名与特性相同 + + + + + + + + FreeSql FluentApi 配置实体,方法名与特性相同 + + + + + + + + 获取 FreeSql FluentApi 配置实体的元数据 + + + 未使用ConfigEntity配置时,返回null + + + + 获取实体类核心配置 + + + + + + + 获取所有数据库 + + + + + + 获取指定数据库的表信息,包括表、列详情、主键、唯一键、索引、外键、备注 + + + + + + + 获取指定单表信息,包括列详情、主键、唯一键、索引、备注 + + 表名,如:dbo.table1 + 是否忽略大小写 + + + + + 判断表是否存在 + + 表名,如:dbo.table1 + 是否忽略大小写 + + + + + 获取数据库枚举类型int值 + + + + + + + 获取c#转换,(int)、(long) + + + + + + + 获取c#值 + + + + + + + 获取c#类型,int、long + + + + + 获取c#类型对象 @@ -5810,6 +5891,28 @@ 对象池 + + + 动态构建Class Type + + + + + + 根据字典,创建 table 对应的实体对象 + + + + + + + + 根据实体对象,创建 table 对应的字典 + + + + + C#: that >= between && that <= and @@ -6376,126 +6479,3 @@ - - - - - 插入数据,传入实体集合 - - - - - - - - 插入数据,传入实体集合 - - - - - - - - 插入或更新数据,此功能依赖数据库特性(低版本可能不支持),参考如下: - MySql 5.6+: on duplicate key update - PostgreSQL 9.4+: on conflict do update - SqlServer 2008+: merge into - Oracle 11+: merge into - Sqlite: replace into - DuckDB: on conflict do update - 达梦: merge into - 人大金仓:on conflict do update - 神通:merge into - MsAccess:不支持 - 注意区别:FreeSql.Repository 仓储也有 InsertOrUpdate 方法(不依赖数据库特性) - - - - - - - 修改数据 - - - - - - - 修改数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} - - - 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 - - - - - 查询数据 - - - - - - - 查询数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} - - - 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 - - - - - 删除数据 - - - - - - - 删除数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} - - - 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 - - - - - 开启事务(不支持异步) - v1.5.0 关闭了线程事务超时自动提交的机制 - - 事务体 () => {} - - - - 开启事务(不支持异步) - v1.5.0 关闭了线程事务超时自动提交的机制 - - - 事务体 () => {} - - - - 数据库访问对象 - - - - - 所有拦截方法都在这里 - - - - - CodeFirst 模式开发相关方法 - - - - - DbFirst 模式开发相关方法 - - - - - 全局过滤设置,可默认附加为 Select/Update/Delete 条件 - - - - diff --git a/Providers/FreeSql.Provider.Xugu/Curd/XuguSelect.cs b/Providers/FreeSql.Provider.Xugu/Curd/XuguSelect.cs index 3dfa0ff4c..c889a4590 100644 --- a/Providers/FreeSql.Provider.Xugu/Curd/XuguSelect.cs +++ b/Providers/FreeSql.Provider.Xugu/Curd/XuguSelect.cs @@ -127,98 +127,98 @@ namespace FreeSql.Xugu.Curd } public XuguSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) { } - public override ISelect From(Expression, T2, ISelectFromExpression>> exp) { this.InternalFrom(exp); var ret = new PostgreSQLSelect(_orm, _commonUtils, _commonExpression, null); XuguSelect.CopyData(this, ret, exp?.Parameters); return ret; } - public override ISelect From(Expression, T2, T3, ISelectFromExpression>> exp) { this.InternalFrom(exp); var ret = new PostgreSQLSelect(_orm, _commonUtils, _commonExpression, null); XuguSelect.CopyData(this, ret, exp?.Parameters); return ret; } - public override ISelect From(Expression, T2, T3, T4, ISelectFromExpression>> exp) { this.InternalFrom(exp); var ret = new PostgreSQLSelect(_orm, _commonUtils, _commonExpression, null); XuguSelect.CopyData(this, ret, exp?.Parameters); return ret; } - public override ISelect From(Expression, T2, T3, T4, T5, ISelectFromExpression>> exp) { this.InternalFrom(exp); var ret = new PostgreSQLSelect(_orm, _commonUtils, _commonExpression, null); XuguSelect.CopyData(this, ret, exp?.Parameters); return ret; } - public override ISelect From(Expression, T2, T3, T4, T5, T6, ISelectFromExpression>> exp) { this.InternalFrom(exp); var ret = new PostgreSQLSelect(_orm, _commonUtils, _commonExpression, null); XuguSelect.CopyData(this, ret, exp?.Parameters); return ret; } - public override ISelect From(Expression, T2, T3, T4, T5, T6, T7, ISelectFromExpression>> exp) { this.InternalFrom(exp); var ret = new PostgreSQLSelect(_orm, _commonUtils, _commonExpression, null); XuguSelect.CopyData(this, ret, exp?.Parameters); return ret; } - public override ISelect From(Expression, T2, T3, T4, T5, T6, T7, T8, ISelectFromExpression>> exp) { this.InternalFrom(exp); var ret = new PostgreSQLSelect(_orm, _commonUtils, _commonExpression, null); XuguSelect.CopyData(this, ret, exp?.Parameters); return ret; } - public override ISelect From(Expression, T2, T3, T4, T5, T6, T7, T8, T9, ISelectFromExpression>> exp) { this.InternalFrom(exp); var ret = new PostgreSQLSelect(_orm, _commonUtils, _commonExpression, null); XuguSelect.CopyData(this, ret, exp?.Parameters); return ret; } - public override ISelect From(Expression, T2, T3, T4, T5, T6, T7, T8, T9, T10, ISelectFromExpression>> exp) { this.InternalFrom(exp); var ret = new PostgreSQLSelect(_orm, _commonUtils, _commonExpression, null); XuguSelect.CopyData(this, ret, exp?.Parameters); return ret; } + public override ISelect From(Expression, T2, ISelectFromExpression>> exp) { this.InternalFrom(exp); var ret = new XuguSelect(_orm, _commonUtils, _commonExpression, null); XuguSelect.CopyData(this, ret, exp?.Parameters); return ret; } + public override ISelect From(Expression, T2, T3, ISelectFromExpression>> exp) { this.InternalFrom(exp); var ret = new XuguSelect(_orm, _commonUtils, _commonExpression, null); XuguSelect.CopyData(this, ret, exp?.Parameters); return ret; } + public override ISelect From(Expression, T2, T3, T4, ISelectFromExpression>> exp) { this.InternalFrom(exp); var ret = new XuguSelect(_orm, _commonUtils, _commonExpression, null); XuguSelect.CopyData(this, ret, exp?.Parameters); return ret; } + public override ISelect From(Expression, T2, T3, T4, T5, ISelectFromExpression>> exp) { this.InternalFrom(exp); var ret = new XuguSelect(_orm, _commonUtils, _commonExpression, null); XuguSelect.CopyData(this, ret, exp?.Parameters); return ret; } + public override ISelect From(Expression, T2, T3, T4, T5, T6, ISelectFromExpression>> exp) { this.InternalFrom(exp); var ret = new XuguSelect(_orm, _commonUtils, _commonExpression, null); XuguSelect.CopyData(this, ret, exp?.Parameters); return ret; } + public override ISelect From(Expression, T2, T3, T4, T5, T6, T7, ISelectFromExpression>> exp) { this.InternalFrom(exp); var ret = new XuguSelect(_orm, _commonUtils, _commonExpression, null); XuguSelect.CopyData(this, ret, exp?.Parameters); return ret; } + public override ISelect From(Expression, T2, T3, T4, T5, T6, T7, T8, ISelectFromExpression>> exp) { this.InternalFrom(exp); var ret = new XuguSelect(_orm, _commonUtils, _commonExpression, null); XuguSelect.CopyData(this, ret, exp?.Parameters); return ret; } + public override ISelect From(Expression, T2, T3, T4, T5, T6, T7, T8, T9, ISelectFromExpression>> exp) { this.InternalFrom(exp); var ret = new XuguSelect(_orm, _commonUtils, _commonExpression, null); XuguSelect.CopyData(this, ret, exp?.Parameters); return ret; } + public override ISelect From(Expression, T2, T3, T4, T5, T6, T7, T8, T9, T10, ISelectFromExpression>> exp) { this.InternalFrom(exp); var ret = new XuguSelect(_orm, _commonUtils, _commonExpression, null); XuguSelect.CopyData(this, ret, exp?.Parameters); return ret; } - public override ISelect From(Expression, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, ISelectFromExpression>> exp) { this.InternalFrom(exp); var ret = new PostgreSQLSelect(_orm, _commonUtils, _commonExpression, null); XuguSelect.CopyData(this, ret, exp?.Parameters); return ret; } - public override ISelect From(Expression, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, ISelectFromExpression>> exp) { this.InternalFrom(exp); var ret = new PostgreSQLSelect(_orm, _commonUtils, _commonExpression, null); XuguSelect.CopyData(this, ret, exp?.Parameters); return ret; } - public override ISelect From(Expression, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, ISelectFromExpression>> exp) { this.InternalFrom(exp); var ret = new PostgreSQLSelect(_orm, _commonUtils, _commonExpression, null); XuguSelect.CopyData(this, ret, exp?.Parameters); return ret; } - public override ISelect From(Expression, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, ISelectFromExpression>> exp) { this.InternalFrom(exp); var ret = new PostgreSQLSelect(_orm, _commonUtils, _commonExpression, null); XuguSelect.CopyData(this, ret, exp?.Parameters); return ret; } - public override ISelect From(Expression, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, ISelectFromExpression>> exp) { this.InternalFrom(exp); var ret = new PostgreSQLSelect(_orm, _commonUtils, _commonExpression, null); XuguSelect.CopyData(this, ret, exp?.Parameters); return ret; } - public override ISelect From(Expression, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, ISelectFromExpression>> exp) { this.InternalFrom(exp); var ret = new PostgreSQLSelect(_orm, _commonUtils, _commonExpression, null); XuguSelect.CopyData(this, ret, exp?.Parameters); return ret; } + public override ISelect From(Expression, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, ISelectFromExpression>> exp) { this.InternalFrom(exp); var ret = new XuguSelect(_orm, _commonUtils, _commonExpression, null); XuguSelect.CopyData(this, ret, exp?.Parameters); return ret; } + public override ISelect From(Expression, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, ISelectFromExpression>> exp) { this.InternalFrom(exp); var ret = new XuguSelect(_orm, _commonUtils, _commonExpression, null); XuguSelect.CopyData(this, ret, exp?.Parameters); return ret; } + public override ISelect From(Expression, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, ISelectFromExpression>> exp) { this.InternalFrom(exp); var ret = new XuguSelect(_orm, _commonUtils, _commonExpression, null); XuguSelect.CopyData(this, ret, exp?.Parameters); return ret; } + public override ISelect From(Expression, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, ISelectFromExpression>> exp) { this.InternalFrom(exp); var ret = new XuguSelect(_orm, _commonUtils, _commonExpression, null); XuguSelect.CopyData(this, ret, exp?.Parameters); return ret; } + public override ISelect From(Expression, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, ISelectFromExpression>> exp) { this.InternalFrom(exp); var ret = new XuguSelect(_orm, _commonUtils, _commonExpression, null); XuguSelect.CopyData(this, ret, exp?.Parameters); return ret; } + public override ISelect From(Expression, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, ISelectFromExpression>> exp) { this.InternalFrom(exp); var ret = new XuguSelect(_orm, _commonUtils, _commonExpression, null); XuguSelect.CopyData(this, ret, exp?.Parameters); return ret; } public override string ToSql(string field = null) => ToSqlStatic(_commonUtils, _commonExpression, _select, _distinct, field ?? this.GetAllFieldExpressionTreeLevel2().Field, _join, _where, _groupby, _having, _orderby, _skip, _limit, _tables, this.GetTableRuleUnions(), _aliasRule, _tosqlAppendContent, _whereGlobalFilter, _orm); } - class PostgreSQLSelect : FreeSql.Internal.CommonProvider.Select2Provider where T2 : class + class XuguSelect : FreeSql.Internal.CommonProvider.Select2Provider where T2 : class { - public PostgreSQLSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) { } + public XuguSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) { } public override string ToSql(string field = null) => XuguSelect.ToSqlStatic(_commonUtils, _commonExpression, _select, _distinct, field ?? this.GetAllFieldExpressionTreeLevel2().Field, _join, _where, _groupby, _having, _orderby, _skip, _limit, _tables, this.GetTableRuleUnions(), _aliasRule, _tosqlAppendContent, _whereGlobalFilter, _orm); } - class PostgreSQLSelect : FreeSql.Internal.CommonProvider.Select3Provider where T2 : class where T3 : class + class XuguSelect : FreeSql.Internal.CommonProvider.Select3Provider where T2 : class where T3 : class { - public PostgreSQLSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) { } + public XuguSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) { } public override string ToSql(string field = null) => XuguSelect.ToSqlStatic(_commonUtils, _commonExpression, _select, _distinct, field ?? this.GetAllFieldExpressionTreeLevel2().Field, _join, _where, _groupby, _having, _orderby, _skip, _limit, _tables, this.GetTableRuleUnions(), _aliasRule, _tosqlAppendContent, _whereGlobalFilter, _orm); } - class PostgreSQLSelect : FreeSql.Internal.CommonProvider.Select4Provider where T2 : class where T3 : class where T4 : class + class XuguSelect : FreeSql.Internal.CommonProvider.Select4Provider where T2 : class where T3 : class where T4 : class { - public PostgreSQLSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) { } + public XuguSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) { } public override string ToSql(string field = null) => XuguSelect.ToSqlStatic(_commonUtils, _commonExpression, _select, _distinct, field ?? this.GetAllFieldExpressionTreeLevel2().Field, _join, _where, _groupby, _having, _orderby, _skip, _limit, _tables, this.GetTableRuleUnions(), _aliasRule, _tosqlAppendContent, _whereGlobalFilter, _orm); } - class PostgreSQLSelect : FreeSql.Internal.CommonProvider.Select5Provider where T2 : class where T3 : class where T4 : class where T5 : class + class XuguSelect : FreeSql.Internal.CommonProvider.Select5Provider where T2 : class where T3 : class where T4 : class where T5 : class { - public PostgreSQLSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) { } + public XuguSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) { } public override string ToSql(string field = null) => XuguSelect.ToSqlStatic(_commonUtils, _commonExpression, _select, _distinct, field ?? this.GetAllFieldExpressionTreeLevel2().Field, _join, _where, _groupby, _having, _orderby, _skip, _limit, _tables, this.GetTableRuleUnions(), _aliasRule, _tosqlAppendContent, _whereGlobalFilter, _orm); } - class PostgreSQLSelect : FreeSql.Internal.CommonProvider.Select6Provider where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class + class XuguSelect : FreeSql.Internal.CommonProvider.Select6Provider where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class { - public PostgreSQLSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) { } + public XuguSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) { } public override string ToSql(string field = null) => XuguSelect.ToSqlStatic(_commonUtils, _commonExpression, _select, _distinct, field ?? this.GetAllFieldExpressionTreeLevel2().Field, _join, _where, _groupby, _having, _orderby, _skip, _limit, _tables, this.GetTableRuleUnions(), _aliasRule, _tosqlAppendContent, _whereGlobalFilter, _orm); } - class PostgreSQLSelect : FreeSql.Internal.CommonProvider.Select7Provider where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class + class XuguSelect : FreeSql.Internal.CommonProvider.Select7Provider where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class { - public PostgreSQLSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) { } + public XuguSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) { } public override string ToSql(string field = null) => XuguSelect.ToSqlStatic(_commonUtils, _commonExpression, _select, _distinct, field ?? this.GetAllFieldExpressionTreeLevel2().Field, _join, _where, _groupby, _having, _orderby, _skip, _limit, _tables, this.GetTableRuleUnions(), _aliasRule, _tosqlAppendContent, _whereGlobalFilter, _orm); } - class PostgreSQLSelect : FreeSql.Internal.CommonProvider.Select8Provider where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class + class XuguSelect : FreeSql.Internal.CommonProvider.Select8Provider where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class { - public PostgreSQLSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) { } + public XuguSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) { } public override string ToSql(string field = null) => XuguSelect.ToSqlStatic(_commonUtils, _commonExpression, _select, _distinct, field ?? this.GetAllFieldExpressionTreeLevel2().Field, _join, _where, _groupby, _having, _orderby, _skip, _limit, _tables, this.GetTableRuleUnions(), _aliasRule, _tosqlAppendContent, _whereGlobalFilter, _orm); } - class PostgreSQLSelect : FreeSql.Internal.CommonProvider.Select9Provider where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class + class XuguSelect : FreeSql.Internal.CommonProvider.Select9Provider where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class { - public PostgreSQLSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) { } + public XuguSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) { } public override string ToSql(string field = null) => XuguSelect.ToSqlStatic(_commonUtils, _commonExpression, _select, _distinct, field ?? this.GetAllFieldExpressionTreeLevel2().Field, _join, _where, _groupby, _having, _orderby, _skip, _limit, _tables, this.GetTableRuleUnions(), _aliasRule, _tosqlAppendContent, _whereGlobalFilter, _orm); } - class PostgreSQLSelect : FreeSql.Internal.CommonProvider.Select10Provider where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class + class XuguSelect : FreeSql.Internal.CommonProvider.Select10Provider where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class { - public PostgreSQLSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) { } + public XuguSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) { } public override string ToSql(string field = null) => XuguSelect.ToSqlStatic(_commonUtils, _commonExpression, _select, _distinct, field ?? this.GetAllFieldExpressionTreeLevel2().Field, _join, _where, _groupby, _having, _orderby, _skip, _limit, _tables, this.GetTableRuleUnions(), _aliasRule, _tosqlAppendContent, _whereGlobalFilter, _orm); } - class PostgreSQLSelect : FreeSql.Internal.CommonProvider.Select11Provider where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class + class XuguSelect : FreeSql.Internal.CommonProvider.Select11Provider where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class { - public PostgreSQLSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) { } + public XuguSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) { } public override string ToSql(string field = null) => XuguSelect.ToSqlStatic(_commonUtils, _commonExpression, _select, _distinct, field ?? this.GetAllFieldExpressionTreeLevel2().Field, _join, _where, _groupby, _having, _orderby, _skip, _limit, _tables, this.GetTableRuleUnions(), _aliasRule, _tosqlAppendContent, _whereGlobalFilter, _orm); } - class PostgreSQLSelect : FreeSql.Internal.CommonProvider.Select12Provider where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class + class XuguSelect : FreeSql.Internal.CommonProvider.Select12Provider where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class { - public PostgreSQLSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) { } + public XuguSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) { } public override string ToSql(string field = null) => XuguSelect.ToSqlStatic(_commonUtils, _commonExpression, _select, _distinct, field ?? this.GetAllFieldExpressionTreeLevel2().Field, _join, _where, _groupby, _having, _orderby, _skip, _limit, _tables, this.GetTableRuleUnions(), _aliasRule, _tosqlAppendContent, _whereGlobalFilter, _orm); } - class PostgreSQLSelect : FreeSql.Internal.CommonProvider.Select13Provider where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class + class XuguSelect : FreeSql.Internal.CommonProvider.Select13Provider where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class { - public PostgreSQLSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) { } + public XuguSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) { } public override string ToSql(string field = null) => XuguSelect.ToSqlStatic(_commonUtils, _commonExpression, _select, _distinct, field ?? this.GetAllFieldExpressionTreeLevel2().Field, _join, _where, _groupby, _having, _orderby, _skip, _limit, _tables, this.GetTableRuleUnions(), _aliasRule, _tosqlAppendContent, _whereGlobalFilter, _orm); } - class PostgreSQLSelect : FreeSql.Internal.CommonProvider.Select14Provider where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class + class XuguSelect : FreeSql.Internal.CommonProvider.Select14Provider where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class { - public PostgreSQLSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) { } + public XuguSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) { } public override string ToSql(string field = null) => XuguSelect.ToSqlStatic(_commonUtils, _commonExpression, _select, _distinct, field ?? this.GetAllFieldExpressionTreeLevel2().Field, _join, _where, _groupby, _having, _orderby, _skip, _limit, _tables, this.GetTableRuleUnions(), _aliasRule, _tosqlAppendContent, _whereGlobalFilter, _orm); } - class PostgreSQLSelect : FreeSql.Internal.CommonProvider.Select15Provider where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class where T15 : class + class XuguSelect : FreeSql.Internal.CommonProvider.Select15Provider where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class where T15 : class { - public PostgreSQLSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) { } + public XuguSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) { } public override string ToSql(string field = null) => XuguSelect.ToSqlStatic(_commonUtils, _commonExpression, _select, _distinct, field ?? this.GetAllFieldExpressionTreeLevel2().Field, _join, _where, _groupby, _having, _orderby, _skip, _limit, _tables, this.GetTableRuleUnions(), _aliasRule, _tosqlAppendContent, _whereGlobalFilter, _orm); } - class PostgreSQLSelect : FreeSql.Internal.CommonProvider.Select16Provider where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class where T15 : class where T16 : class + class XuguSelect : FreeSql.Internal.CommonProvider.Select16Provider where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class where T15 : class where T16 : class { - public PostgreSQLSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) { } + public XuguSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) { } public override string ToSql(string field = null) => XuguSelect.ToSqlStatic(_commonUtils, _commonExpression, _select, _distinct, field ?? this.GetAllFieldExpressionTreeLevel2().Field, _join, _where, _groupby, _having, _orderby, _skip, _limit, _tables, this.GetTableRuleUnions(), _aliasRule, _tosqlAppendContent, _whereGlobalFilter, _orm); } } diff --git a/Providers/FreeSql.Provider.Xugu/XuguAdo/XuguAdo.cs b/Providers/FreeSql.Provider.Xugu/XuguAdo/XuguAdo.cs index 7a7a6be55..d99fe0b57 100644 --- a/Providers/FreeSql.Provider.Xugu/XuguAdo/XuguAdo.cs +++ b/Providers/FreeSql.Provider.Xugu/XuguAdo/XuguAdo.cs @@ -16,13 +16,13 @@ namespace FreeSql.Xugu { class XuguAdo : FreeSql.Internal.CommonProvider.AdoProvider { - public XuguAdo() : base(DataType.PostgreSQL, null, null) { } - public XuguAdo(CommonUtils util, string masterConnectionString, string[] slaveConnectionStrings, Func connectionFactory) : base(DataType.PostgreSQL, masterConnectionString, slaveConnectionStrings) + public XuguAdo() : base(DataType.Xugu, null, null) { } + public XuguAdo(CommonUtils util, string masterConnectionString, string[] slaveConnectionStrings, Func connectionFactory) : base(DataType.Xugu, masterConnectionString, slaveConnectionStrings) { base._util = util; if (connectionFactory != null) { - MasterPool = new FreeSql.Internal.CommonProvider.DbConnectionPool(DataType.PostgreSQL, connectionFactory); + MasterPool = new FreeSql.Internal.CommonProvider.DbConnectionPool(DataType.Xugu, connectionFactory); return; } From ccd13ba47f37a93ccb970b2f630a94b05a4e0cb5 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Wed, 27 Nov 2024 20:35:55 +0800 Subject: [PATCH 36/38] v3.5.100-preview20241127 #1933 --- Directory.Build.props | 2 +- .../FreeSql.Extensions.AggregateRoot.csproj | 2 +- .../FreeSql.Extensions.BaseEntity.csproj | 2 +- .../FreeSql.Extensions.JsonMap.csproj | 2 +- .../FreeSql.Extensions.LazyLoading.csproj | 2 +- .../FreeSql.Extensions.Linq.csproj | 2 +- .../FreeSql.Extensions.ZeroEntity.csproj | 2 +- .../FreeSql.Generator.csproj | 2 +- FreeSql.All/FreeSql.All.csproj | 2 +- FreeSql.DbContext/FreeSql.DbContext.csproj | 2 +- FreeSql.Repository/FreeSql.Repository.csproj | 2 +- FreeSql/FreeSql.csproj | 2 +- FreeSql/FreeSql.xml | 762 ++---------------- .../FreeSql.Provider.ClickHouse.csproj | 2 +- .../FreeSql.Provider.Custom.csproj | 2 +- .../FreeSql.Provider.Dameng.csproj | 2 +- .../FreeSql.Provider.Duckdb.csproj | 2 +- .../FreeSql.Provider.Firebird.csproj | 2 +- .../FreeSql.Provider.GBase.csproj | 2 +- .../FreeSql.Provider.KingbaseES.csproj | 2 +- .../FreeSql.Provider.MsAccess.csproj | 2 +- .../FreeSql.Provider.MySql.csproj | 2 +- .../FreeSql.Provider.MySqlConnector.csproj | 2 +- .../FreeSql.Provider.Odbc.csproj | 2 +- .../FreeSql.Provider.Oracle.csproj | 2 +- .../FreeSql.Provider.OracleOledb.csproj | 2 +- .../FreeSql.Provider.PostgreSQL.csproj | 2 +- .../FreeSql.Provider.QuestDb.csproj | 2 +- .../FreeSql.Provider.ShenTong.csproj | 2 +- .../FreeSql.Provider.SqlServer.csproj | 2 +- ...FreeSql.Provider.SqlServerForSystem.csproj | 2 +- .../FreeSql.Provider.Sqlite.csproj | 2 +- .../FreeSql.Provider.SqliteCore.csproj | 2 +- .../FreeSql.Provider.Xugu.csproj | 2 +- 34 files changed, 119 insertions(+), 709 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 725e8932b..5bd1bd0ff 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -12,7 +12,7 @@ diff --git a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj index 16cf1f289..0b0c72069 100644 --- a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj +++ b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241123 + 3.5.100-preview20241127 readme.md diff --git a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj index 23bd86112..b3187dbaa 100644 --- a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj +++ b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj @@ -19,7 +19,7 @@ key.snk false latest - 3.5.100-preview20241123 + 3.5.100-preview20241127 readme.md diff --git a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj index f5bce1549..b2925fc0c 100644 --- a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj +++ b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241123 + 3.5.100-preview20241127 readme.md diff --git a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj index fb102e8cc..bb0be9448 100644 --- a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj +++ b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20241123 + 3.5.100-preview20241127 readme.md diff --git a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj index 1dfd71ee0..32865f68a 100644 --- a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj +++ b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241123 + 3.5.100-preview20241127 readme.md diff --git a/Extensions/FreeSql.Extensions.ZeroEntity/FreeSql.Extensions.ZeroEntity.csproj b/Extensions/FreeSql.Extensions.ZeroEntity/FreeSql.Extensions.ZeroEntity.csproj index ae5ce181d..840e9850d 100644 --- a/Extensions/FreeSql.Extensions.ZeroEntity/FreeSql.Extensions.ZeroEntity.csproj +++ b/Extensions/FreeSql.Extensions.ZeroEntity/FreeSql.Extensions.ZeroEntity.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241123 + 3.5.100-preview20241127 readme.md diff --git a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj index 014c6c68e..1aa9ec9ab 100644 --- a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj +++ b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj @@ -13,7 +13,7 @@ https://github.com/2881099/FreeSql https://github.com/2881099/FreeSql FreeSql DbFirst 实体生成器 - 3.5.100-preview20241123 + 3.5.100-preview20241127 readme.md diff --git a/FreeSql.All/FreeSql.All.csproj b/FreeSql.All/FreeSql.All.csproj index 0fe802877..c896d8138 100644 --- a/FreeSql.All/FreeSql.All.csproj +++ b/FreeSql.All/FreeSql.All.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.5.100-preview20241123 + 3.5.100-preview20241127 readme.md diff --git a/FreeSql.DbContext/FreeSql.DbContext.csproj b/FreeSql.DbContext/FreeSql.DbContext.csproj index a61d4ba51..9ad37210c 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.csproj +++ b/FreeSql.DbContext/FreeSql.DbContext.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.5.100-preview20241124 + 3.5.100-preview20241127 readme.md diff --git a/FreeSql.Repository/FreeSql.Repository.csproj b/FreeSql.Repository/FreeSql.Repository.csproj index ccc20c59d..000130ac7 100644 --- a/FreeSql.Repository/FreeSql.Repository.csproj +++ b/FreeSql.Repository/FreeSql.Repository.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.5.100-preview20241123 + 3.5.100-preview20241127 readme.md diff --git a/FreeSql/FreeSql.csproj b/FreeSql/FreeSql.csproj index e9d57eaa2..a7541163f 100644 --- a/FreeSql/FreeSql.csproj +++ b/FreeSql/FreeSql.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.5.100-preview20241123 + 3.5.100-preview20241127 readme.md diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 5fc7529a8..91534b2e5 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -1087,93 +1087,6 @@ - - - 动态创建实体类型 - - - - - 配置Class - - 类名 - 类标记的特性[Table(Name = "xxx")] [Index(xxxx)] - - - - - 获取类型构建器,可作为要构建的Type来引用 - - - - - 配置属性 - - 属性名称 - 属性类型 - 属性标记的特性-支持多个 - - - - - 配置属性 - - 属性名称 - 属性类型 - 该属性是否重写父类属性 - 属性标记的特性-支持多个 - - - - - 配置属性 - - 属性名称 - 属性类型 - 该属性是否重写父类属性 - 属性默认值 - 属性标记的特性-支持多个 - - - - - 配置父类 - - 父类类型 - - - - - Override属性 - - - - - - Emit动态创建出Class - Type - - - - - - Emit动态创建出Class - Type,不附带获取TableInfo - - - - - - 首字母小写 - - - - - - - 首字母大写 - - - - 获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值时,返回 "" @@ -1747,104 +1660,6 @@ - - - 指定事务对象 - - - - - - - 命令超时设置(秒) - - - - - - - 追加准备插入的实体 - - 实体 - - - - - 追加准备插入的实体 - - 实体 - - - - - 追加准备插入的实体集合 - - 实体集合 - - - - - 只插入的列,InsertColumns(a => a.Name) | InsertColumns(a => new{a.Name,a.Time}) | InsertColumns(a => new[]{"name","time"}) - - lambda选择列 - - - - - 只插入的列 - - 属性名,或者字段名 - - - - - 忽略的列,IgnoreColumns(a => a.Name) | IgnoreColumns(a => new{a.Name,a.Time}) | IgnoreColumns(a => new[]{"name","time"}) - - lambda选择列 - - - - - 忽略的列 - - 属性名,或者字段名 - - - - - 忽略 InsertValueSql 设置,将使用实体对象的值插入 - IgnoreInsertValueSql(a => a.Name) | IgnoreInsertValueSql(a => new{a.Name,a.Time}) | IgnoreInsertValueSql(a => new[]{"name","time"}) - - 属性名,或者字段名 - - - - - 指定可插入自增字段 - - - - - - 不使用参数化,可通过 IFreeSql.CodeFirst.IsNotCommandParameter 全局性设置 - - 是否不使用参数化 - - - - - 批量执行选项设置,一般不需要使用该方法 - 各数据库 values, parameters 限制不一样,默认设置: - MySql 5000 3000 - PostgreSQL 5000 3000 - SqlServer 1000 2100 - Oracle 500 999 - Sqlite 5000 999 - 若没有事务传入,内部(默认)会自动开启新事务,保证拆包执行的完整性。 - - - - 指定事务对象 @@ -2504,92 +2319,6 @@ 参数 - - - 按原生sql语法排序,OrderBy("count(name) FreeSql.ISelect0`2.RightJoin(System.String,System.Object)"> - - 右联查询,使用原生sql语法,RightJoin("type b on b.id = a.id and b.clicks > @clicks", new { clicks = 1 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - sql语法条件 - 参数 - - - - - 在 JOIN 位置插入 SQL 内容 - 如:.RawJoin("OUTER APPLY ( select id from t2 ) b") - - - - - - - 原生sql语法条件,Where("id = @id", new { id = 1 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - sql语法条件 - 参数 - - - - - 原生sql语法条件,WhereIf(true, "id = @id", new { id = 1 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - true 时生效 - sql语法条件 - 参数 - - - - - 动态过滤条件 - - - - - - - 禁用全局过滤功能,不传参数时将禁用所有 - - 零个或多个过滤器名字 - - - - - 排他更新锁 - 注意:务必在开启事务后使用该功能 - MySql: for update - SqlServer: With(UpdLock, RowLock, NoWait) - PostgreSQL: for update nowait - Oracle: for update nowait - Sqlite: 无效果 - 达梦: for update nowait - 人大金仓: for update nowait - 神通: for update - - noawait - - - - - 按原生sql语法分组,GroupBy("concat(name, @cc)", new { cc = 1 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - sql语法 - 参数 - - - - - 按原生sql语法聚合条件过滤,Having("count(name) = @cc", new { cc = 1 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - sql语法条件 - 参数 - - 按原生sql语法排序,OrderBy("count(name) + @cc desc", new { cc = 1 }) @@ -3560,13 +3289,6 @@ - - - 执行SQL语句,返回更新后的记录 - 注意:此方法只有 Postgresql/SqlServer 有效果 - - - 指定事务对象 @@ -3911,177 +3633,6 @@ - - - 测试数据库是否连接正确,本方法执行如下命令: - MySql/SqlServer/PostgreSQL/达梦/人大金仓/神通: SELECT 1 - Oracle: SELECT 1 FROM dual - - 命令超时设置(秒) - - true: 成功, false: 失败 - - - - 查询,若使用读写分离,查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】 - - - - - - - - - - 查询,ExecuteReaderAsync(dr => {}, "select * from user where age > @age", new { age = 25 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - - - - - - - - 查询 - - - - - - - - - 查询,ExecuteArrayAsync("select * from user where age > @age", new { age = 25 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - - - - - - - - 查询 - - - - - - - - - 查询,ExecuteDataSetAsync("select * from user where age > @age; select 2", new { age = 25 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - - - - - - - - 查询 - - - - - - - - - 查询,ExecuteDataTableAsync("select * from user where age > @age", new { age = 25 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - - - - - - - - 在【主库】执行 - - - - - - - - - 在【主库】执行,ExecuteNonQueryAsync("delete from user where age > @age", new { age = 25 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - - - - - - - - 在【主库】执行 - - - - - - - - - 在【主库】执行,ExecuteScalarAsync("select 1 from user where age > @age", new { age = 25 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - - - - - - - - 执行SQL返回对象集合,QueryAsync<User>("select * from user where age > @age", new SqlParameter { ParameterName = "age", Value = 25 }) - - - - - - - - - - - 执行SQL返回对象集合,QueryAsync<User>("select * from user where age > @age", new { age = 25 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - - - - - - - - - 执行SQL返回对象集合,Query<User>("select * from user where age > @age; select * from address", new SqlParameter { ParameterName = "age", Value = 25 }) - - - - - - - - - - - - 执行SQL返回对象集合,Query<User, Address>("select * from user where age > @age; select * from address", new { age = 25 }) - 提示:parms 参数还可以传 Dictionary<string, object> - - - - - - - - 可自定义解析表达式 @@ -5081,12 +4632,6 @@ 超时 - - - 获取资源 - - - 使用完毕后,归还资源 @@ -5162,12 +4707,6 @@ 资源对象 - - - 从对象池获取对象成功的时候触发,通过该方法统计或初始化对象 - - 资源对象 - 归还对象给对象池的时候触发 @@ -5997,14 +5536,6 @@ - - - 根据实体对象,创建 table 对应的字典 - - - - - fsql.InsertOrUpdate Sqlite 无法完成 UpdateColumns 操作 @@ -6089,20 +5620,6 @@ 对象池 - - - 动态构建Class Type - - - - - - 根据字典,创建 table 对应的实体对象 - - - - - C#: that >= between && that <= and @@ -6450,211 +5967,104 @@ - - 插入数据,传入实体集合 + 使用 and 拼接两个 lambda 表达式 + + + true 时生效 + + + + + + 使用 or 拼接两个 lambda 表达式 + + + + + + 使用 or 拼接两个 lambda 表达式 + + + true 时生效 + + + + + + 将 lambda 表达式取反 + + + true 时生效 + + + + + 使用 and 拼接两个 lambda 表达式 + + + + + + 使用 and 拼接两个 lambda 表达式 + + + true 时生效 + + + + + + 使用 or 拼接两个 lambda 表达式 + + + + + + 使用 or 拼接两个 lambda 表达式 + + + true 时生效 + + + + + + 将 lambda 表达式取反 + + + true 时生效 + + + + + 生成类似Mongodb的ObjectId有序、不重复Guid + + + + + + 插入数据 + + + + + + + 插入数据,传入实体 - + - 插入数据,传入实体集合 + 插入数据,传入实体数组 - - - 插入或更新数据,此功能依赖数据库特性(低版本可能不支持),参考如下: - MySql 5.6+: on duplicate key update - PostgreSQL 9.4+: on conflict do update - SqlServer 2008+: merge into - Oracle 11+: merge into - Sqlite: replace into - DuckDB: on conflict do update - 达梦: merge into - 人大金仓:on conflict do update - 神通:merge into - MsAccess:不支持 - 注意区别:FreeSql.Repository 仓储也有 InsertOrUpdate 方法(不依赖数据库特性) - - - - - - - 修改数据 - - - - - - - 修改数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} - - - 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 - - - - - 查询数据 - - - - - - - 查询数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} - - - 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 - - - - - 删除数据 - - - - - - - 删除数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} - - - 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 - - - - - 开启事务(不支持异步) - v1.5.0 关闭了线程事务超时自动提交的机制 - - 事务体 () => {} - - - - 开启事务(不支持异步) - v1.5.0 关闭了线程事务超时自动提交的机制 - - - 事务体 () => {} - - - - 数据库访问对象 - - - - - 所有拦截方法都在这里 - - - - - CodeFirst 模式开发相关方法 - - - - - DbFirst 模式开发相关方法 - - - - - 全局过滤设置,可默认附加为 Select/Update/Delete 条件 - - - - - - - - - 修改数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} - - - 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 - - - - - 查询数据 - - - - - - - 查询数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} - - - 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 - - - - - 删除数据 - - - - - - - 删除数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1} - - - 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 - - - - - 开启事务(不支持异步) - v1.5.0 关闭了线程事务超时自动提交的机制 - - 事务体 () => {} - - - - 开启事务(不支持异步) - v1.5.0 关闭了线程事务超时自动提交的机制 - - - 事务体 () => {} - - - - 数据库访问对象 - - - - - 所有拦截方法都在这里 - - - - - CodeFirst 模式开发相关方法 - - - - - DbFirst 模式开发相关方法 - - - - - 全局过滤设置,可默认附加为 Select/Update/Delete 条件 - - - - - - 插入数据,传入实体集合 diff --git a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj index 77b7c67bb..b22e5ce10 100644 --- a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj +++ b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj @@ -19,7 +19,7 @@ False key.snk false - 3.5.100-preview20241123 + 3.5.100-preview20241127 readme.md diff --git a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj index a62270790..0a626d5bb 100644 --- a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj +++ b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241123 + 3.5.100-preview20241127 readme.md diff --git a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj index f55613d9c..f649d1af0 100644 --- a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj +++ b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20241123 + 3.5.100-preview20241127 readme.md diff --git a/Providers/FreeSql.Provider.Duckdb/FreeSql.Provider.Duckdb.csproj b/Providers/FreeSql.Provider.Duckdb/FreeSql.Provider.Duckdb.csproj index e69f6c6b4..2ac2e5d76 100644 --- a/Providers/FreeSql.Provider.Duckdb/FreeSql.Provider.Duckdb.csproj +++ b/Providers/FreeSql.Provider.Duckdb/FreeSql.Provider.Duckdb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241123 + 3.5.100-preview20241127 readme.md diff --git a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj index 93fc741bb..9bf46f9fe 100644 --- a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj +++ b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241123 + 3.5.100-preview20241127 readme.md diff --git a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj index 952ce5237..a640d04d9 100644 --- a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj +++ b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241123 + 3.5.100-preview20241127 readme.md diff --git a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj index 5ad16ea2c..685e902e3 100644 --- a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj +++ b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20241123 + 3.5.100-preview20241127 readme.md diff --git a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj index 4e38e702e..be75550be 100644 --- a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj +++ b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241123 + 3.5.100-preview20241127 readme.md diff --git a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj index 6937f9f53..703057029 100644 --- a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj +++ b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241123 + 3.5.100-preview20241127 readme.md diff --git a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj index 104e9fe3f..ee16eabaa 100644 --- a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj +++ b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241123 + 3.5.100-preview20241127 readme.md diff --git a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj index 0acbda797..ffd9abc47 100644 --- a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj +++ b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241123 + 3.5.100-preview20241127 readme.md diff --git a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj index 453002fe3..7629cce4d 100644 --- a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj +++ b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241123 + 3.5.100-preview20241127 readme.md diff --git a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj index 8b25b6679..ff35332ed 100644 --- a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj +++ b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241123 + 3.5.100-preview20241127 readme.md diff --git a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj index 95eecd044..7f00115bd 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj +++ b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241123 + 3.5.100-preview20241127 readme.md diff --git a/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj b/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj index 468264718..1122b24b4 100644 --- a/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj +++ b/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241123 + 3.5.100-preview20241127 readme.md diff --git a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj index cbc25cfa1..706d7f778 100644 --- a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj +++ b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20241123 + 3.5.100-preview20241127 readme.md diff --git a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj index af9f909c7..54ca11e1b 100644 --- a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj +++ b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj @@ -18,7 +18,7 @@ true false key.snk - 3.5.100-preview20241123 + 3.5.100-preview20241127 readme.md diff --git a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj index 48509e2e6..c8e220544 100644 --- a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj +++ b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241123 + 3.5.100-preview20241127 readme.md diff --git a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj index 14652bdc9..31391b8f6 100644 --- a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj +++ b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241123 + 3.5.100-preview20241127 readme.md diff --git a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj index 687e0d59e..c6d944bb0 100644 --- a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj +++ b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241123 + 3.5.100-preview20241127 readme.md diff --git a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj index 91a23d754..5a1ab5de8 100644 --- a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj +++ b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20241123 + 3.5.100-preview20241127 readme.md From cfb3bfa8842cf414378e182d4f05d303b5b5cacd Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Fri, 29 Nov 2024 20:42:30 +0800 Subject: [PATCH 37/38] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20Xugu=20DataType?= =?UTF-8?q?=20=E5=AF=B9=E5=BA=94=E9=97=AE=E9=A2=98=EF=BC=9B#1934?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Extensions/FreeSql.Extensions.ZeroEntity/ZeroDbContext.cs | 1 + FreeSql.DbContext/DbSet/DbSetAsync.cs | 1 + FreeSql.DbContext/DbSet/DbSetSync.cs | 1 + FreeSql/Extensions/FreeSqlGlobalExtensions.cs | 3 +++ .../Internal/CommonProvider/SelectProvider/Select0Provider.cs | 1 + FreeSql/Internal/CommonProvider/UpdateJoinProvider.cs | 2 ++ FreeSql/Internal/CommonProvider/UpdateProvider.cs | 1 + FreeSql/Internal/UtilsExpressionTree.cs | 4 +++- 8 files changed, 13 insertions(+), 1 deletion(-) diff --git a/Extensions/FreeSql.Extensions.ZeroEntity/ZeroDbContext.cs b/Extensions/FreeSql.Extensions.ZeroEntity/ZeroDbContext.cs index 2a1343751..abf35f95a 100644 --- a/Extensions/FreeSql.Extensions.ZeroEntity/ZeroDbContext.cs +++ b/Extensions/FreeSql.Extensions.ZeroEntity/ZeroDbContext.cs @@ -705,6 +705,7 @@ ManyToMany 级联删除中间表(注意不删除外部根) case DataType.ShenTong: case DataType.DuckDB: case DataType.Firebird: //firebird 只支持单条插入 returning + case DataType.Xugu: if (_tableIdentitys.Length == 1 && _tableReturnColumns.Length == 1) { var idtval = OrmInsert(table).AppendData(data).ExecuteIdentity(); diff --git a/FreeSql.DbContext/DbSet/DbSetAsync.cs b/FreeSql.DbContext/DbSet/DbSetAsync.cs index 4db2fbe4f..6b0c353e0 100644 --- a/FreeSql.DbContext/DbSet/DbSetAsync.cs +++ b/FreeSql.DbContext/DbSet/DbSetAsync.cs @@ -49,6 +49,7 @@ namespace FreeSql case DataType.ShenTong: case DataType.DuckDB: case DataType.Firebird: //firebird 只支持单条插入 returning + case DataType.Xugu: if (_tableIdentitys.Length == 1 && _tableReturnColumns.Length == 1) { await DbContextFlushCommandAsync(cancellationToken); diff --git a/FreeSql.DbContext/DbSet/DbSetSync.cs b/FreeSql.DbContext/DbSet/DbSetSync.cs index 5d639539f..98ba7b49b 100644 --- a/FreeSql.DbContext/DbSet/DbSetSync.cs +++ b/FreeSql.DbContext/DbSet/DbSetSync.cs @@ -48,6 +48,7 @@ namespace FreeSql case DataType.ShenTong: case DataType.DuckDB: case DataType.Firebird: //firebird 只支持单条插入 returning + case DataType.Xugu: if (_tableIdentitys.Length == 1 && _tableReturnColumns.Length == 1) { DbContextFlushCommand(); diff --git a/FreeSql/Extensions/FreeSqlGlobalExtensions.cs b/FreeSql/Extensions/FreeSqlGlobalExtensions.cs index 77421e705..e5656ab17 100644 --- a/FreeSql/Extensions/FreeSqlGlobalExtensions.cs +++ b/FreeSql/Extensions/FreeSqlGlobalExtensions.cs @@ -751,6 +751,7 @@ JOIN {select._commonUtils.QuoteSqlName(tbDbName)} a ON cte_tbc.cte_id = a.{selec case DataType.Firebird: case DataType.ClickHouse: case DataType.DuckDB: + case DataType.Xugu: sql1ctePath = select._commonExpression.ExpressionWhereLambda(select._tables, select._tableRule, Expression.Call(typeof(Convert).GetMethod("ToString", new Type[] { typeof(string) }), pathSelector?.Body), select._diymemexpWithTempQuery, null, null); break; @@ -847,6 +848,7 @@ JOIN {select._commonUtils.QuoteSqlName(tbDbName)} a ON cte_tbc.cte_id = a.{selec case DataType.CustomMySql: case DataType.Firebird: case DataType.DuckDB: + case DataType.Xugu: nsselsb.Append("RECURSIVE "); break; } @@ -900,6 +902,7 @@ SELECT "); case DataType.KingbaseES: case DataType.ShenTong: case DataType.DuckDB: + case DataType.Xugu: return that.OrderBy("random()"); case DataType.Oracle: case DataType.OdbcOracle: diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs index 1d65a44ca..e33020c18 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs @@ -1291,6 +1291,7 @@ namespace FreeSql.Internal.CommonProvider case DataType.OdbcPostgreSQL: case DataType.CustomPostgreSQL: case DataType.KingbaseES: + case DataType.Xugu: _tosqlAppendContent = $"{_tosqlAppendContent} for update{(noawait ? " nowait" : "")}"; break; case DataType.Oracle: diff --git a/FreeSql/Internal/CommonProvider/UpdateJoinProvider.cs b/FreeSql/Internal/CommonProvider/UpdateJoinProvider.cs index 8624d566b..30ea469a5 100644 --- a/FreeSql/Internal/CommonProvider/UpdateJoinProvider.cs +++ b/FreeSql/Internal/CommonProvider/UpdateJoinProvider.cs @@ -82,6 +82,7 @@ namespace FreeSql.Internal.CommonProvider case DataType.KingbaseES: case DataType.ShenTong: case DataType.DuckDB: + case DataType.Xugu: InterceptPostgreSQL?.Invoke(); break; case DataType.Oracle: case DataType.OdbcOracle: @@ -216,6 +217,7 @@ namespace FreeSql.Internal.CommonProvider case DataType.CustomPostgreSQL: case DataType.KingbaseES: case DataType.ShenTong: + case DataType.Xugu: break; default: var tbalias = _query2Provider._tables.Where(tb => tb.Table == col.Table).FirstOrDefault()?.Alias ?? _query2Provider._tables[0].Alias; diff --git a/FreeSql/Internal/CommonProvider/UpdateProvider.cs b/FreeSql/Internal/CommonProvider/UpdateProvider.cs index 593a3165e..66d3fe650 100644 --- a/FreeSql/Internal/CommonProvider/UpdateProvider.cs +++ b/FreeSql/Internal/CommonProvider/UpdateProvider.cs @@ -1197,6 +1197,7 @@ namespace FreeSql.Internal.CommonProvider case DataType.CustomPostgreSQL: case DataType.KingbaseES: case DataType.ShenTong: + case DataType.Xugu: vcvalue = $"{_tableAlias}.{vcname}"; //set name = b.name break; default: diff --git a/FreeSql/Internal/UtilsExpressionTree.cs b/FreeSql/Internal/UtilsExpressionTree.cs index e67833c6a..053c92646 100644 --- a/FreeSql/Internal/UtilsExpressionTree.cs +++ b/FreeSql/Internal/UtilsExpressionTree.cs @@ -397,6 +397,7 @@ namespace FreeSql.Internal case DataType.CustomPostgreSQL: case DataType.KingbaseES: case DataType.ShenTong: + case DataType.Xugu: if (strlen < 0) colattr.DbType = $"TEXT{strNotNull}"; else colattr.DbType = Regex.Replace(colattr.DbType, charPattern, m => replaceCounter++ == 0 ? $"{m.Groups[1].Value}({strlen})" : m.Groups[0].Value); @@ -470,7 +471,8 @@ namespace FreeSql.Internal case DataType.CustomPostgreSQL: case DataType.KingbaseES: case DataType.ShenTong: //驱动引发的异常:“System.Data.OscarClient.OscarException”(位于 System.Data.OscarClient.dll 中) - colattr.DbType = $"BYTEA{strNotNull}"; //变长二进制串 + case DataType.Xugu: + colattr.DbType = $"BYTEA{strNotNull}"; //变长二进制串 break; case DataType.Oracle: case DataType.OdbcOracle: From 688960aba3f617d114bd04ec7ec9b28cfe1c522c Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Fri, 29 Nov 2024 20:54:17 +0800 Subject: [PATCH 38/38] v3.5.100-preview20241127 #1934 #1933 --- Directory.Build.props | 2 +- .../FreeSql.Extensions.AggregateRoot.csproj | 2 +- .../FreeSql.Extensions.BaseEntity.csproj | 2 +- .../FreeSql.Extensions.JsonMap.csproj | 2 +- .../FreeSql.Extensions.LazyLoading.csproj | 2 +- .../FreeSql.Extensions.Linq.csproj | 2 +- .../FreeSql.Extensions.ZeroEntity.csproj | 2 +- .../FreeSql.Generator.csproj | 2 +- FreeSql.All/FreeSql.All.csproj | 2 +- FreeSql.DbContext/FreeSql.DbContext.csproj | 2 +- FreeSql.Repository/FreeSql.Repository.csproj | 2 +- FreeSql/FreeSql.csproj | 2 +- FreeSql/FreeSql.xml | 299 ++++++++++++++++++ .../FreeSql.Provider.ClickHouse.csproj | 2 +- .../FreeSql.Provider.Custom.csproj | 2 +- .../FreeSql.Provider.Dameng.csproj | 2 +- .../FreeSql.Provider.Duckdb.csproj | 2 +- .../FreeSql.Provider.Firebird.csproj | 2 +- .../FreeSql.Provider.GBase.csproj | 2 +- .../FreeSql.Provider.KingbaseES.csproj | 2 +- .../FreeSql.Provider.MsAccess.csproj | 2 +- .../FreeSql.Provider.MySql.csproj | 2 +- .../FreeSql.Provider.MySqlConnector.csproj | 2 +- .../FreeSql.Provider.Odbc.csproj | 2 +- .../FreeSql.Provider.Oracle.csproj | 2 +- .../FreeSql.Provider.OracleOledb.csproj | 2 +- .../FreeSql.Provider.PostgreSQL.csproj | 2 +- .../FreeSql.Provider.QuestDb.csproj | 2 +- .../FreeSql.Provider.ShenTong.csproj | 2 +- .../FreeSql.Provider.SqlServer.csproj | 2 +- ...FreeSql.Provider.SqlServerForSystem.csproj | 2 +- .../FreeSql.Provider.Sqlite.csproj | 2 +- .../FreeSql.Provider.SqliteCore.csproj | 2 +- .../FreeSql.Provider.Xugu.csproj | 2 +- 34 files changed, 332 insertions(+), 33 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 5bd1bd0ff..032b3109c 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -12,7 +12,7 @@ diff --git a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj index 0b0c72069..c1b4aad09 100644 --- a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj +++ b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241127 + 3.5.100-preview20241128 readme.md diff --git a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj index b3187dbaa..045c8cbbb 100644 --- a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj +++ b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj @@ -19,7 +19,7 @@ key.snk false latest - 3.5.100-preview20241127 + 3.5.100-preview20241128 readme.md diff --git a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj index b2925fc0c..3a3576b25 100644 --- a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj +++ b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241127 + 3.5.100-preview20241128 readme.md diff --git a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj index bb0be9448..140b6e74c 100644 --- a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj +++ b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20241127 + 3.5.100-preview20241128 readme.md diff --git a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj index 32865f68a..e0ce5f8f9 100644 --- a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj +++ b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241127 + 3.5.100-preview20241128 readme.md diff --git a/Extensions/FreeSql.Extensions.ZeroEntity/FreeSql.Extensions.ZeroEntity.csproj b/Extensions/FreeSql.Extensions.ZeroEntity/FreeSql.Extensions.ZeroEntity.csproj index 840e9850d..15f1d37d3 100644 --- a/Extensions/FreeSql.Extensions.ZeroEntity/FreeSql.Extensions.ZeroEntity.csproj +++ b/Extensions/FreeSql.Extensions.ZeroEntity/FreeSql.Extensions.ZeroEntity.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241127 + 3.5.100-preview20241128 readme.md diff --git a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj index 1aa9ec9ab..c3c217577 100644 --- a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj +++ b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj @@ -13,7 +13,7 @@ https://github.com/2881099/FreeSql https://github.com/2881099/FreeSql FreeSql DbFirst 实体生成器 - 3.5.100-preview20241127 + 3.5.100-preview20241128 readme.md diff --git a/FreeSql.All/FreeSql.All.csproj b/FreeSql.All/FreeSql.All.csproj index c896d8138..025076df9 100644 --- a/FreeSql.All/FreeSql.All.csproj +++ b/FreeSql.All/FreeSql.All.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.5.100-preview20241127 + 3.5.100-preview20241128 readme.md diff --git a/FreeSql.DbContext/FreeSql.DbContext.csproj b/FreeSql.DbContext/FreeSql.DbContext.csproj index 9ad37210c..1c653b43f 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.csproj +++ b/FreeSql.DbContext/FreeSql.DbContext.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.5.100-preview20241127 + 3.5.100-preview20241128 readme.md diff --git a/FreeSql.Repository/FreeSql.Repository.csproj b/FreeSql.Repository/FreeSql.Repository.csproj index 000130ac7..277b1270e 100644 --- a/FreeSql.Repository/FreeSql.Repository.csproj +++ b/FreeSql.Repository/FreeSql.Repository.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.5.100-preview20241127 + 3.5.100-preview20241128 readme.md diff --git a/FreeSql/FreeSql.csproj b/FreeSql/FreeSql.csproj index a7541163f..be0a8976e 100644 --- a/FreeSql/FreeSql.csproj +++ b/FreeSql/FreeSql.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.5.100-preview20241127 + 3.5.100-preview20241128 readme.md diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 91534b2e5..4ccbbef74 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -1087,6 +1087,93 @@ + + + 动态创建实体类型 + + + + + 配置Class + + 类名 + 类标记的特性[Table(Name = "xxx")] [Index(xxxx)] + + + + + 获取类型构建器,可作为要构建的Type来引用 + + + + + 配置属性 + + 属性名称 + 属性类型 + 属性标记的特性-支持多个 + + + + + 配置属性 + + 属性名称 + 属性类型 + 该属性是否重写父类属性 + 属性标记的特性-支持多个 + + + + + 配置属性 + + 属性名称 + 属性类型 + 该属性是否重写父类属性 + 属性默认值 + 属性标记的特性-支持多个 + + + + + 配置父类 + + 父类类型 + + + + + Override属性 + + + + + + Emit动态创建出Class - Type + + + + + + Emit动态创建出Class - Type,不附带获取TableInfo + + + + + + 首字母小写 + + + + + + + 首字母大写 + + + + 获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值时,返回 "" @@ -3289,6 +3376,13 @@ + + + 执行SQL语句,返回更新后的记录 + 注意:此方法只有 Postgresql/SqlServer 有效果 + + + 指定事务对象 @@ -3633,6 +3727,177 @@ + + + 测试数据库是否连接正确,本方法执行如下命令: + MySql/SqlServer/PostgreSQL/达梦/人大金仓/神通: SELECT 1 + Oracle: SELECT 1 FROM dual + + 命令超时设置(秒) + + true: 成功, false: 失败 + + + + 查询,若使用读写分离,查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】 + + + + + + + + + + 查询,ExecuteReaderAsync(dr => {}, "select * from user where age > @age", new { age = 25 }) + 提示:parms 参数还可以传 Dictionary<string, object> + + + + + + + + + 查询 + + + + + + + + + 查询,ExecuteArrayAsync("select * from user where age > @age", new { age = 25 }) + 提示:parms 参数还可以传 Dictionary<string, object> + + + + + + + + + 查询 + + + + + + + + + 查询,ExecuteDataSetAsync("select * from user where age > @age; select 2", new { age = 25 }) + 提示:parms 参数还可以传 Dictionary<string, object> + + + + + + + + + 查询 + + + + + + + + + 查询,ExecuteDataTableAsync("select * from user where age > @age", new { age = 25 }) + 提示:parms 参数还可以传 Dictionary<string, object> + + + + + + + + + 在【主库】执行 + + + + + + + + + 在【主库】执行,ExecuteNonQueryAsync("delete from user where age > @age", new { age = 25 }) + 提示:parms 参数还可以传 Dictionary<string, object> + + + + + + + + + 在【主库】执行 + + + + + + + + + 在【主库】执行,ExecuteScalarAsync("select 1 from user where age > @age", new { age = 25 }) + 提示:parms 参数还可以传 Dictionary<string, object> + + + + + + + + + 执行SQL返回对象集合,QueryAsync<User>("select * from user where age > @age", new SqlParameter { ParameterName = "age", Value = 25 }) + + + + + + + + + + + 执行SQL返回对象集合,QueryAsync<User>("select * from user where age > @age", new { age = 25 }) + 提示:parms 参数还可以传 Dictionary<string, object> + + + + + + + + + + 执行SQL返回对象集合,Query<User>("select * from user where age > @age; select * from address", new SqlParameter { ParameterName = "age", Value = 25 }) + + + + + + + + + + + + 执行SQL返回对象集合,Query<User, Address>("select * from user where age > @age; select * from address", new { age = 25 }) + 提示:parms 参数还可以传 Dictionary<string, object> + + + + + + + + 可自定义解析表达式 @@ -4632,6 +4897,12 @@ 超时 + + + 获取资源 + + + 使用完毕后,归还资源 @@ -4707,6 +4978,12 @@ 资源对象 + + + 从对象池获取对象成功的时候触发,通过该方法统计或初始化对象 + + 资源对象 + 归还对象给对象池的时候触发 @@ -5620,6 +5897,28 @@ 对象池 + + + 动态构建Class Type + + + + + + 根据字典,创建 table 对应的实体对象 + + + + + + + + 根据实体对象,创建 table 对应的字典 + + + + + C#: that >= between && that <= and diff --git a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj index b22e5ce10..08425e7e9 100644 --- a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj +++ b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj @@ -19,7 +19,7 @@ False key.snk false - 3.5.100-preview20241127 + 3.5.100-preview20241128 readme.md diff --git a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj index 0a626d5bb..375d2c005 100644 --- a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj +++ b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241127 + 3.5.100-preview20241128 readme.md diff --git a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj index f649d1af0..1dce2b768 100644 --- a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj +++ b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20241127 + 3.5.100-preview20241128 readme.md diff --git a/Providers/FreeSql.Provider.Duckdb/FreeSql.Provider.Duckdb.csproj b/Providers/FreeSql.Provider.Duckdb/FreeSql.Provider.Duckdb.csproj index 2ac2e5d76..53eba8eca 100644 --- a/Providers/FreeSql.Provider.Duckdb/FreeSql.Provider.Duckdb.csproj +++ b/Providers/FreeSql.Provider.Duckdb/FreeSql.Provider.Duckdb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241127 + 3.5.100-preview20241128 readme.md diff --git a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj index 9bf46f9fe..32a15fe20 100644 --- a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj +++ b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241127 + 3.5.100-preview20241128 readme.md diff --git a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj index a640d04d9..3e02f371a 100644 --- a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj +++ b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241127 + 3.5.100-preview20241128 readme.md diff --git a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj index 685e902e3..176eedd90 100644 --- a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj +++ b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20241127 + 3.5.100-preview20241128 readme.md diff --git a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj index be75550be..34059d3f6 100644 --- a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj +++ b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241127 + 3.5.100-preview20241128 readme.md diff --git a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj index 703057029..7183e2c42 100644 --- a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj +++ b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241127 + 3.5.100-preview20241128 readme.md diff --git a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj index ee16eabaa..f57d8af98 100644 --- a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj +++ b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241127 + 3.5.100-preview20241128 readme.md diff --git a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj index ffd9abc47..4582906b2 100644 --- a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj +++ b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241127 + 3.5.100-preview20241128 readme.md diff --git a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj index 7629cce4d..b6ad8d982 100644 --- a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj +++ b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241127 + 3.5.100-preview20241128 readme.md diff --git a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj index ff35332ed..74541ddb9 100644 --- a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj +++ b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241127 + 3.5.100-preview20241128 readme.md diff --git a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj index 7f00115bd..d1572f5f7 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj +++ b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241127 + 3.5.100-preview20241128 readme.md diff --git a/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj b/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj index 1122b24b4..e4db6e86f 100644 --- a/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj +++ b/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241127 + 3.5.100-preview20241128 readme.md diff --git a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj index 706d7f778..591f73169 100644 --- a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj +++ b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20241127 + 3.5.100-preview20241128 readme.md diff --git a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj index 54ca11e1b..e2d7d2a93 100644 --- a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj +++ b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj @@ -18,7 +18,7 @@ true false key.snk - 3.5.100-preview20241127 + 3.5.100-preview20241128 readme.md diff --git a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj index c8e220544..9426b1075 100644 --- a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj +++ b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241127 + 3.5.100-preview20241128 readme.md diff --git a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj index 31391b8f6..9c5a45535 100644 --- a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj +++ b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241127 + 3.5.100-preview20241128 readme.md diff --git a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj index c6d944bb0..0c2c4c250 100644 --- a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj +++ b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.5.100-preview20241127 + 3.5.100-preview20241128 readme.md diff --git a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj index 5a1ab5de8..ec46c814a 100644 --- a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj +++ b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.5.100-preview20241127 + 3.5.100-preview20241128 readme.md