2026-04-22
数据库字段名不统一:
TenantId(Pascal命名)tenant_id(下划线命名)决策:统一使用 tenant_id(小写下划线格式)
修正了 12个 Entity 文件 的 SugarColumn 属性:
// 修正前
[SugarColumn(ColumnName = "TenantId", IsNullable = true)]
public long? TenantId { get; set; }
// 修正后
[SugarColumn(ColumnName = "tenant_id", IsNullable = true)]
public long? TenantId { get; set; }
已修正的文件:
AsnShipperDetail.csAsnShipperMaster.csContractReview.csContractReviewFlow.csLinkagePlan.csProductDesign.csProductDesignBom.csProductDesignRouting.csSeOrderEntry.csShippingPlan.csShippingPlanDetail.csScheduleExceptionMaster.cs原本正确的文件:
SeOrder.cs - 原本就是 tenant_idSeOrderChange.cs - 原本就是 tenant_id修正了所有 SQL 查询中的字段名:
// 修正前
var conditions = new List<string> { "TenantId = @TenantId" };
WHERE BillNo LIKE 'CR{month}%' AND TenantId = @TenantId
// 修正后
var conditions = new List<string> { "tenant_id = @TenantId" };
WHERE BillNo LIKE 'CR{month}%' AND tenant_id = @TenantId
完整添加了租户过滤(之前遗漏):
修正内容:
WHERE h.IsActive = 1 AND h.tenant_id = @TenantIdWHERE RecID = @Id AND tenant_id = @TenantIdtenant_id 字段WHERE RecID = @Id AND tenant_id = @TenantIdWHERE RecID = @Id AND tenant_id = @TenantId原本就正确使用 tenant_id,无需修改 ✅
更新文件: d:\DEMONET\tools\sql\add_tenant_id_to_business_tables.sql
修正内容:
ALTER TABLE 语句统一使用 tenant_idtenant_id验证查询统一使用 tenant_id
-- 示例(修正后)
ALTER TABLE ado_contract_review
ADD COLUMN IF NOT EXISTS tenant_id BIGINT NULL COMMENT '租户ID(多租户隔离)';
CREATE INDEX IF NOT EXISTS idx_tenant_id ON ado_contract_review(tenant_id);
// 属性名:Pascal命名(TenantId)
public long? TenantId { get; set; }
// 数据库列名:小写下划线(tenant_id)
[SugarColumn(ColumnName = "tenant_id", IsNullable = true)]
// SQL 中使用:tenant_id
"WHERE tenant_id = @TenantId"
# 检查是否还有 TenantId 作为 ColumnName 的情况
grep -r 'ColumnName = "TenantId"' server/Plugins/Admin.NET.Plugin.AiDOP/
# 应该返回:无结果
# 检查 SQL 查询中的字段名
grep -r 'TenantId = @TenantId' server/Plugins/Admin.NET.Plugin.AiDOP/Order/
grep -r 'TenantId = @TenantId' server/Plugins/Admin.NET.Plugin.AiDOP/Production/
# 应该返回:无结果(已全部改为 tenant_id)
执行迁移脚本后,检查所有表:
SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'aidopdev'
AND COLUMN_NAME IN ('TenantId', 'tenant_id')
ORDER BY TABLE_NAME, COLUMN_NAME;
-- 预期结果:所有字段名都应该是 tenant_id(小写)
tenant_id(小写下划线)idx_tenant_idBIGINT NULL租户ID(多租户隔离)TenantId(Pascal命名)[SugarColumn(ColumnName = "tenant_id")]tenant_id@TenantId(C# 风格)共 13张业务表 已统一为 tenant_id:
ado_contract_review - 合同评审主表ado_contract_review_flow - 合同评审流程节点表LinkagePlan - 计划联动看板ProductDesign - 产品设计主表ProductDesignBom - 产品设计BOM表ProductDesignRouting - 产品设计工艺表crm_seorder - 销售订单主表crm_seorderentry - 销售订单明细表ShippingPlan - 发货计划主表ShippingPlanDetail - 发货计划明细表AsnShipperMaster - ASN发货单主表AsnShipperDetail - ASN发货单明细表ScheduleExceptionMaster - 排产异常日志HolidayMaster - 产线节假日(Service 已支持租户过滤)mysql -u root -p你的密码 aidopdev < d:\DEMONET\tools\sql\add_tenant_id_to_business_tables.sql
ALTER TABLE HolidayMaster
ADD COLUMN IF NOT EXISTS tenant_id BIGINT NULL COMMENT '租户ID(多租户隔离)';
CREATE INDEX IF NOT EXISTS idx_tenant_id ON HolidayMaster(tenant_id);
-- 检查所有业务表的 tenant_id 字段
SELECT TABLE_NAME, COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'aidopdev'
AND COLUMN_NAME = 'tenant_id'
ORDER BY TABLE_NAME;
📄 字段名统一脚本
d:\DEMONET\tools\fix_tenant_id_column_name.ps1
💾 数据库迁移脚本(已更新)
d:\DEMONET\tools\sql\add_tenant_id_to_business_tables.sql
✅ 已完成:
✅ 统一标准:
tenant_id(小写下划线)TenantId(Pascal命名)📌 重要提示:
现在所有代码和脚本都已统一使用 tenant_id 作为数据库字段名,可以安全执行数据库迁移!
修正时间:2026-04-22
字段名标准:tenant_id(小写下划线格式)