diff --git a/framework/Furion/DatabaseAccessor/Contexts/Attributes/AppDbContextAttribute.cs b/framework/Furion/DatabaseAccessor/Contexts/Attributes/AppDbContextAttribute.cs index 16957f34a260dd9a47e691bf1a0c8c2888379f3d..d63bad695d8cc722d03d15b316e8b09b7c64d273 100644 --- a/framework/Furion/DatabaseAccessor/Contexts/Attributes/AppDbContextAttribute.cs +++ b/framework/Furion/DatabaseAccessor/Contexts/Attributes/AppDbContextAttribute.cs @@ -85,4 +85,9 @@ public class AppDbContextAttribute : Attribute /// 指定从库定位器 /// public Type[] SlaveDbContextLocators { get; set; } + + /// + /// 表名使用蛇形命名 + /// + public bool UseSnakeCaseNaming { get; set; } } \ No newline at end of file diff --git a/framework/Furion/DatabaseAccessor/Contexts/Builders/AppDbContextBuilder.cs b/framework/Furion/DatabaseAccessor/Contexts/Builders/AppDbContextBuilder.cs index 700a33f484404f268c5ee160f621609c66bdb89a..031935dc59d24112053deac7e7f11867f66e194a 100644 --- a/framework/Furion/DatabaseAccessor/Contexts/Builders/AppDbContextBuilder.cs +++ b/framework/Furion/DatabaseAccessor/Contexts/Builders/AppDbContextBuilder.cs @@ -18,6 +18,7 @@ using Microsoft.EntityFrameworkCore.Metadata.Builders; using System.Collections.Concurrent; using System.ComponentModel.DataAnnotations.Schema; using System.Reflection; +using System.Text.RegularExpressions; namespace Furion.DatabaseAccessor; @@ -179,6 +180,12 @@ internal static class AppDbContextBuilder var tablePrefix = (tableFixsAttribute?.Prefix ?? appDbContextAttribute?.TablePrefix)?.Trim(); var tableSuffix = (tableFixsAttribute?.Suffix ?? appDbContextAttribute?.TableSuffix)?.Trim(); + //表名使用蛇形命名 + if (appDbContextAttribute?.UseSnakeCaseNaming == true) + { + tableName = string.Join("_", Regex.Split(tableName, @"(?=\p{Lu}\p{Ll})|(?<=\p{Ll})(?=\p{Lu})").Where(u => u.Length > 0).ToArray()); + } + // 如果没有定义 Table 特性且没有定义 TableFixs 特性,且没有实现 IMultiTenantOnSchema 接口且 AppDbContextAttribute 没有配置前后缀 // 满足以上条件则不配置表名 if (!(tableAttribute == null && tableFixsAttribute == null && string.IsNullOrWhiteSpace(tablePrefix) && string.IsNullOrWhiteSpace(tableSuffix)))