mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 09:15:27 +08:00 
			
		
		
		
	- 增加 FreeSqlBuilder UseNameConvert 方法,类名、属性名都生效;
- 调整 FreeSqlBuilder,准备移除 UseEntityPropertyNameConvert/UseSyncStructureToLower/UseSyncStructureToUpper 方法;#260
This commit is contained in:
		@@ -902,10 +902,11 @@
 | 
			
		||||
            </summary>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IInsert`1.NoneParameter">
 | 
			
		||||
        <member name="M:FreeSql.IInsert`1.NoneParameter(System.Boolean)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            不使用参数化,可通过 IFreeSql.CodeFirst.IsNotCommandParameter 全局性设置
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="isNotCommandParameter">是否不使用参数化</param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IInsert`1.BatchOptions(System.Int32,System.Int32,System.Boolean)">
 | 
			
		||||
@@ -1937,10 +1938,11 @@
 | 
			
		||||
            <param name="connection"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IUpdate`1.NoneParameter">
 | 
			
		||||
        <member name="M:FreeSql.IUpdate`1.NoneParameter(System.Boolean)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            不使用参数化,可通过 IFreeSql.CodeFirst.IsNotCommandParameter 全局性设置
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="isNotCommandParameter">是否不使用参数化</param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IUpdate`1.BatchOptions(System.Int32,System.Int32,System.Boolean)">
 | 
			
		||||
@@ -2692,12 +2694,12 @@
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="P:FreeSql.ICodeFirst.IsSyncStructureToLower">
 | 
			
		||||
            <summary>
 | 
			
		||||
            转小写同步结构
 | 
			
		||||
            转小写同步结构,适用 PostgreSQL
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="P:FreeSql.ICodeFirst.IsSyncStructureToUpper">
 | 
			
		||||
            <summary>
 | 
			
		||||
            转大写同步结构
 | 
			
		||||
            转大写同步结构,适用 Oracle/达梦
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="P:FreeSql.ICodeFirst.IsConfigEntityFromDbFirst">
 | 
			
		||||
@@ -3178,14 +3180,52 @@
 | 
			
		||||
            BigApple -> bigapple
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.Internal.StringUtils.PascalCaseToUnderScore(System.String)">
 | 
			
		||||
        <member name="F:FreeSql.Internal.NameConvertType.None">
 | 
			
		||||
            <summary>
 | 
			
		||||
            不进行任何处理
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="F:FreeSql.Internal.NameConvertType.PascalCaseToUnderscore">
 | 
			
		||||
            <summary>
 | 
			
		||||
            将帕斯卡命名字符串转换为下划线分隔字符串
 | 
			
		||||
            <para></para>
 | 
			
		||||
            BigApple -> Big_Apple
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="str"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="F:FreeSql.Internal.NameConvertType.PascalCaseToUnderscoreWithUpper">
 | 
			
		||||
            <summary>
 | 
			
		||||
            将帕斯卡命名字符串转换为下划线分隔字符串,且转换为全大写
 | 
			
		||||
            <para></para>
 | 
			
		||||
            BigApple -> BIG_APPLE
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="F:FreeSql.Internal.NameConvertType.PascalCaseToUnderscoreWithLower">
 | 
			
		||||
            <summary>
 | 
			
		||||
            将帕斯卡命名字符串转换为下划线分隔字符串,且转换为全小写
 | 
			
		||||
            <para></para>
 | 
			
		||||
            BigApple -> big_apple
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="F:FreeSql.Internal.NameConvertType.UnderscoreToPascalCase">
 | 
			
		||||
            <summary>
 | 
			
		||||
            将下划线分隔字符串命名字符串转换为帕斯卡
 | 
			
		||||
            <para></para>
 | 
			
		||||
            big_apple -> BigApple
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="F:FreeSql.Internal.NameConvertType.ToUpper">
 | 
			
		||||
            <summary>
 | 
			
		||||
            将字符串转换为大写
 | 
			
		||||
            <para></para>
 | 
			
		||||
            BigApple -> BIGAPPLE
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="F:FreeSql.Internal.NameConvertType.ToLower">
 | 
			
		||||
            <summary>
 | 
			
		||||
            将字符串转换为小写
 | 
			
		||||
            <para></para>
 | 
			
		||||
            BigApple -> bigapple
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSqlGlobalExpressionCall.Between(System.DateTime,System.DateTime,System.DateTime)">
 | 
			
		||||
            <summary>
 | 
			
		||||
 
 | 
			
		||||
@@ -21,6 +21,7 @@ namespace FreeSql
 | 
			
		||||
        bool _isGenerateCommandParameterWithLambda = false;
 | 
			
		||||
        bool _isLazyLoading = false;
 | 
			
		||||
        StringConvertType _entityPropertyConvertType = StringConvertType.None;
 | 
			
		||||
        NameConvertType _nameConvertType = NameConvertType.None;
 | 
			
		||||
        Action<DbCommand> _aopCommandExecuting = null;
 | 
			
		||||
        Action<DbCommand, string> _aopCommandExecuted = null;
 | 
			
		||||
        Type _providerType = null;
 | 
			
		||||
@@ -82,6 +83,7 @@ namespace FreeSql
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="value">true:转小写, false:不转</param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        [Obsolete("请使用 UseNameConvert(NameConvertType.ToLower),或者 fsql.CodeFirst.IsSyncStructureToLower = value")]
 | 
			
		||||
        public FreeSqlBuilder UseSyncStructureToLower(bool value)
 | 
			
		||||
        {
 | 
			
		||||
            _isSyncStructureToLower = value;
 | 
			
		||||
@@ -92,6 +94,7 @@ namespace FreeSql
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="value">true:转大写, false:不转</param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        [Obsolete("请使用 UseNameConvert(NameConvertType.ToUpper),或者 fsql.CodeFirst.IsSyncStructureToUpper = value")]
 | 
			
		||||
        public FreeSqlBuilder UseSyncStructureToUpper(bool value)
 | 
			
		||||
        {
 | 
			
		||||
            _isSyncStructureToUpper = value;
 | 
			
		||||
@@ -163,12 +166,25 @@ namespace FreeSql
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="convertType"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        [Obsolete("请使用 UseNameConvert 功能")]
 | 
			
		||||
        public FreeSqlBuilder UseEntityPropertyNameConvert(StringConvertType convertType)
 | 
			
		||||
        {
 | 
			
		||||
            _entityPropertyConvertType = convertType;
 | 
			
		||||
            return this;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 实体类名 -> 数据库表名,命名转换(类名、属性名都生效)<para></para>
 | 
			
		||||
        /// 优先级小于 [Table(Name = "xxx")]、[Column(Name = "xxx")]
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="convertType"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public FreeSqlBuilder UseNameConvert(NameConvertType convertType)
 | 
			
		||||
        {
 | 
			
		||||
            _nameConvertType = convertType;
 | 
			
		||||
            return this;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public IFreeSql Build() => Build<IFreeSql>();
 | 
			
		||||
        public IFreeSql<TMark> Build<TMark>()
 | 
			
		||||
        {
 | 
			
		||||
@@ -263,27 +279,60 @@ namespace FreeSql
 | 
			
		||||
                //添加实体属性名全局AOP转换处理
 | 
			
		||||
                if (_entityPropertyConvertType != StringConvertType.None)
 | 
			
		||||
                {
 | 
			
		||||
                    string PascalCaseToUnderScore(string str) => string.Concat(str.Select((x, i) => i > 0 && char.IsUpper(x) ? "_" + x.ToString() : x.ToString()));
 | 
			
		||||
 | 
			
		||||
                    switch (_entityPropertyConvertType)
 | 
			
		||||
                    {
 | 
			
		||||
                        case StringConvertType.Lower:
 | 
			
		||||
                            ret.Aop.ConfigEntityProperty += (_, e) =>
 | 
			
		||||
                                e.ModifyResult.Name = e.Property.Name.ToLower();
 | 
			
		||||
                            ret.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = e.Property.Name.ToLower();
 | 
			
		||||
                            break;
 | 
			
		||||
                        case StringConvertType.Upper:
 | 
			
		||||
                            ret.Aop.ConfigEntityProperty += (_, e) =>
 | 
			
		||||
                                e.ModifyResult.Name = e.Property.Name.ToUpper();
 | 
			
		||||
                            ret.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = e.Property.Name.ToUpper();
 | 
			
		||||
                            break;
 | 
			
		||||
                        case StringConvertType.PascalCaseToUnderscore:
 | 
			
		||||
                            ret.Aop.ConfigEntityProperty += (_, e) =>
 | 
			
		||||
                                e.ModifyResult.Name = StringUtils.PascalCaseToUnderScore(e.Property.Name);
 | 
			
		||||
                            ret.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = PascalCaseToUnderScore(e.Property.Name);
 | 
			
		||||
                            break;
 | 
			
		||||
                        case StringConvertType.PascalCaseToUnderscoreWithLower:
 | 
			
		||||
                            ret.Aop.ConfigEntityProperty += (_, e) =>
 | 
			
		||||
                                e.ModifyResult.Name = StringUtils.PascalCaseToUnderScore(e.Property.Name).ToLower();
 | 
			
		||||
                            ret.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = PascalCaseToUnderScore(e.Property.Name).ToLower();
 | 
			
		||||
                            break;
 | 
			
		||||
                        case StringConvertType.PascalCaseToUnderscoreWithUpper:
 | 
			
		||||
                            ret.Aop.ConfigEntityProperty += (_, e) =>
 | 
			
		||||
                                e.ModifyResult.Name = StringUtils.PascalCaseToUnderScore(e.Property.Name).ToUpper();
 | 
			
		||||
                            ret.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = PascalCaseToUnderScore(e.Property.Name).ToUpper();
 | 
			
		||||
                            break;
 | 
			
		||||
                        default:
 | 
			
		||||
                            break;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                //添加实体属性名全局AOP转换处理
 | 
			
		||||
                if (_nameConvertType != NameConvertType.None)
 | 
			
		||||
                {
 | 
			
		||||
                    string PascalCaseToUnderScore(string str) => string.Concat(str.Select((x, i) => i > 0 && char.IsUpper(x) ? "_" + x.ToString() : x.ToString()));
 | 
			
		||||
                    string UnderScorePascalCase(string str) => string.Join("", str.Split('_').Select(a => a.Length > 0 ? string.Concat(char.ToUpper(a[0]), a.Substring(1)) : ""));
 | 
			
		||||
 | 
			
		||||
                    switch (_nameConvertType)
 | 
			
		||||
                    {
 | 
			
		||||
                        case NameConvertType.ToLower:
 | 
			
		||||
                            ret.Aop.ConfigEntity += (_, e) => e.ModifyResult.Name = e.EntityType.Name.ToLower();
 | 
			
		||||
                            ret.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = e.Property.Name.ToLower();
 | 
			
		||||
                            break;
 | 
			
		||||
                        case NameConvertType.ToUpper:
 | 
			
		||||
                            ret.Aop.ConfigEntity += (_, e) => e.ModifyResult.Name = e.EntityType.Name.ToUpper();
 | 
			
		||||
                            ret.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = e.Property.Name.ToUpper();
 | 
			
		||||
                            break;
 | 
			
		||||
                        case NameConvertType.PascalCaseToUnderscore:
 | 
			
		||||
                            ret.Aop.ConfigEntity += (_, e) => e.ModifyResult.Name = PascalCaseToUnderScore(e.EntityType.Name);
 | 
			
		||||
                            ret.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = PascalCaseToUnderScore(e.Property.Name);
 | 
			
		||||
                            break;
 | 
			
		||||
                        case NameConvertType.PascalCaseToUnderscoreWithLower:
 | 
			
		||||
                            ret.Aop.ConfigEntity += (_, e) => e.ModifyResult.Name = PascalCaseToUnderScore(e.EntityType.Name).ToLower();
 | 
			
		||||
                            ret.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = PascalCaseToUnderScore(e.Property.Name).ToLower();
 | 
			
		||||
                            break;
 | 
			
		||||
                        case NameConvertType.PascalCaseToUnderscoreWithUpper:
 | 
			
		||||
                            ret.Aop.ConfigEntity += (_, e) => e.ModifyResult.Name = PascalCaseToUnderScore(e.EntityType.Name).ToUpper();
 | 
			
		||||
                            ret.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = PascalCaseToUnderScore(e.Property.Name).ToUpper();
 | 
			
		||||
                            break;
 | 
			
		||||
                        case NameConvertType.UnderscoreToPascalCase:
 | 
			
		||||
                            ret.Aop.ConfigEntity += (_, e) => e.ModifyResult.Name = UnderScorePascalCase(e.EntityType.Name);
 | 
			
		||||
                            ret.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = UnderScorePascalCase(e.Property.Name);
 | 
			
		||||
                            break;
 | 
			
		||||
                        default:
 | 
			
		||||
                            break;
 | 
			
		||||
 
 | 
			
		||||
@@ -13,11 +13,11 @@ namespace FreeSql
 | 
			
		||||
        bool IsAutoSyncStructure { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 转小写同步结构
 | 
			
		||||
        /// 转小写同步结构,适用 PostgreSQL
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        bool IsSyncStructureToLower { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 转大写同步结构
 | 
			
		||||
        /// 转大写同步结构,适用 Oracle/达梦
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        bool IsSyncStructureToUpper { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,6 @@
 | 
			
		||||
namespace FreeSql.Internal
 | 
			
		||||
using System;
 | 
			
		||||
 | 
			
		||||
namespace FreeSql.Internal
 | 
			
		||||
{
 | 
			
		||||
    public enum StringConvertType
 | 
			
		||||
    {
 | 
			
		||||
@@ -42,4 +44,54 @@
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        Lower
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public enum NameConvertType
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 不进行任何处理
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        None = 0,
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 将帕斯卡命名字符串转换为下划线分隔字符串
 | 
			
		||||
        /// <para></para>
 | 
			
		||||
        /// BigApple -> Big_Apple
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        PascalCaseToUnderscore,
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 将帕斯卡命名字符串转换为下划线分隔字符串,且转换为全大写
 | 
			
		||||
        /// <para></para>
 | 
			
		||||
        /// BigApple -> BIG_APPLE
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        PascalCaseToUnderscoreWithUpper,
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 将帕斯卡命名字符串转换为下划线分隔字符串,且转换为全小写
 | 
			
		||||
        /// <para></para>
 | 
			
		||||
        /// BigApple -> big_apple
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        PascalCaseToUnderscoreWithLower,
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 将下划线分隔字符串命名字符串转换为帕斯卡
 | 
			
		||||
        /// <para></para>
 | 
			
		||||
        /// big_apple -> BigApple
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        UnderscoreToPascalCase,
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 将字符串转换为大写
 | 
			
		||||
        /// <para></para>
 | 
			
		||||
        /// BigApple -> BIGAPPLE
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        ToUpper,
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 将字符串转换为小写
 | 
			
		||||
        /// <para></para>
 | 
			
		||||
        /// BigApple -> bigapple
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        ToLower
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,20 +0,0 @@
 | 
			
		||||
using System.Linq;
 | 
			
		||||
 | 
			
		||||
namespace FreeSql.Internal
 | 
			
		||||
{
 | 
			
		||||
    public static class StringUtils
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 将帕斯卡命名字符串转换为下划线分隔字符串
 | 
			
		||||
        /// <para></para>
 | 
			
		||||
        /// BigApple -> Big_Apple
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="str"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public static string PascalCaseToUnderScore(string str)
 | 
			
		||||
        {
 | 
			
		||||
            return string.Concat(str.Select((x, i) =>
 | 
			
		||||
                i > 0 && char.IsUpper(x) ? "_" + x.ToString() : x.ToString()));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user