diff --git a/Src/Asp.Net/SqlSugar/Abstract/AdoProvider/AdoProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/AdoProvider/AdoProvider.cs index 38f3ccfb4..414c4f617 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/AdoProvider/AdoProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/AdoProvider/AdoProvider.cs @@ -31,6 +31,7 @@ namespace SqlSugar #endregion #region Properties + public virtual bool IsNoSql { get; set; } internal bool IsOpenAsync { get; set; } protected List OutputParameters { get; set; } public virtual string SqlParameterKeyWord { get { return "@"; } } diff --git a/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/DbBindAccessory.cs b/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/DbBindAccessory.cs index 980b85dae..dd3254b5d 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/DbBindAccessory.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/DbBindAccessory.cs @@ -281,7 +281,14 @@ namespace SqlSugar sbTypes.Append(type.Name.Substring(0, 2)); } } - types = sbTypes.ToString(); + types = sbTypes.ToString(); + if (this.QueryBuilder?.Context?.Ado is AdoProvider adoProvider) + { + if (adoProvider.IsNoSql) + { + types = "NoSql"; + } + } return keys; } diff --git a/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs b/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs index 6a002ba7c..e8e4ce374 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs @@ -300,6 +300,21 @@ namespace SqlSugar validPropertyName = validPropertyName == "byte[]" ? "byteArray" : validPropertyName; CSharpDataType validPropertyType = (CSharpDataType)Enum.Parse(typeof(CSharpDataType), validPropertyName); + #region NoSql + if (this.Context.Ado is AdoProvider provider) + { + if (provider.IsNoSql) + { + method = isNullableType ? getOtherNull.MakeGenericMethod(bindPropertyType) : getOther.MakeGenericMethod(bindPropertyType); + if (method.IsVirtual) + generator.Emit(OpCodes.Callvirt, method); + else + generator.Emit(OpCodes.Call, method); + return; + } + } + #endregion + #region Sqlite Logic if (this.Context.CurrentConnectionConfig.DbType == DbType.Sqlite) { diff --git a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryMethodInfo.cs b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryMethodInfo.cs index f760439ff..a36a08c4f 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryMethodInfo.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryMethodInfo.cs @@ -4,6 +4,7 @@ using System.Data; using System.Linq; using System.Reflection; using System.Text; +using System.Text.RegularExpressions; using System.Threading.Tasks; @@ -30,6 +31,10 @@ namespace SqlSugar public QueryMethodInfo AS(string tableName) { string shortName = $"{tableName}_1"; + if (!Regex.IsMatch(shortName, @"^\w+$")) + { + shortName = "maintable"; + } var method = QueryableObj.GetType().GetMyMethod("AS", 2, typeof(string), typeof(string)); this.QueryableObj = method.Invoke(QueryableObj, new object[] { tableName, shortName }); return this; diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs index 42e5d1198..16e5f31bf 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs @@ -156,6 +156,14 @@ namespace SqlSugar string parameterName = this.Context.SqlParameterKeyWord + ExpressionConst.Const + this.Context.ParameterIndex; parameter.Context.Result.Append(base.Context.GetEqString(memberName, parameterName)); var addItem = new SugarParameter(parameterName, parameter.CommonTempData); + if (addItem.Value == null&&item.Type?.Name== "Nullable`1") + { + var genericType = item.Type?.GenericTypeArguments?.FirstOrDefault(); + if (genericType != null) + { + addItem.DbType = new SugarParameter(parameterName, UtilMethods.GetDefaultValue(genericType)).DbType; + } + } ConvertParameterTypeByType(item, addItem); this.Context.Parameters.Add(addItem);