diff --git a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj index 9bdebfbe..8bc7b7da 100644 --- a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj +++ b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj @@ -2,7 +2,7 @@ netstandard2.0 - 2.8.100-preview1013 + 2.6.100 true FreeSql;GBase FreeSql 数据库实现,基于 南大通用 8.0 diff --git a/Providers/FreeSql.Provider.GBase/GBaseProvider.cs b/Providers/FreeSql.Provider.GBase/GBaseProvider.cs index a95465cf..e2feb933 100644 --- a/Providers/FreeSql.Provider.GBase/GBaseProvider.cs +++ b/Providers/FreeSql.Provider.GBase/GBaseProvider.cs @@ -1,8 +1,10 @@ using FreeSql.GBase.Curd; using FreeSql.Internal.CommonProvider; using System; +using System.Data; using System.Data.Common; using System.IO; +using System.Linq; using System.Text; using System.Threading; @@ -28,6 +30,26 @@ namespace FreeSql.GBase this.DbFirst = new GBaseDbFirst(this, this.InternalCommonUtils, this.InternalCommonExpression); this.CodeFirst = new GBaseCodeFirst(this, this.InternalCommonUtils, this.InternalCommonExpression); + this.Aop.CommandBefore += (_, e) => + { + if (e.Command.CommandType == CommandType.StoredProcedure) + { + if (e.Command.CommandText.Trim().StartsWith("{call ", StringComparison.OrdinalIgnoreCase) == false) + { + var args = string.Join(", ", Enumerable.Range(0, e.Command.Parameters.Count) + .Select(a => "?")); + var cmdText = $"{{call {e.Command.CommandText}({args})}}"; + + foreach (DbParameter parameter in e.Command.Parameters) + { + if (parameter.DbType == DbType.String && parameter.Size <= 0) + parameter.Size = 255; + } + e.Command.CommandText = cmdText; + } + } + }; + this.Aop.AuditDataReader += (_, e) => { var dbtype = e.DataReader.GetDataTypeName(e.Index);