using System.Reflection; namespace BrilliantSightClient.Model.Entity.Base; public abstract class BaseEntity { public Guid GUID { get; set; } public static string TableName => throw new NotImplementedException("Table name is not implemented."); // 获取字段映射的实际名称 private static Dictionary GetFieldMappings() { var properties = typeof(BaseEntity).GetProperties(BindingFlags.Public | BindingFlags.Instance); return properties .Where(p => Attribute.IsDefined(p, typeof(DbFieldAttribute))) .ToDictionary( p => p.Name, p => ((DbFieldAttribute)p.GetCustomAttribute(typeof(DbFieldAttribute))).FieldName ); } // 生成 Insert 语句 public string GenerateInsertSQL() { var mappings = GetFieldMappings(); var columns = string.Join(", ", mappings.Values); var values = string.Join(", ", mappings.Keys.Select(k => $"@{k}")); return $"INSERT INTO {TableName} ({columns}) VALUES ({values});"; } // 生成 Update 语句 public string GenerateUpdateSQL(Dictionary fieldsToUpdate = null) { if (fieldsToUpdate == null || fieldsToUpdate.Count == 0) { // 默认根据 ID 更新所有字段 var mappings = GetFieldMappings(); var setClause = string.Join(", ", mappings.Values.Select(f => $"{f} = @{f}")); return $"UPDATE {TableName} SET {setClause} WHERE id = @id;"; } else { // 根据传入的字段更新 var setClause = string.Join(", ", fieldsToUpdate.Keys.Select(f => $"{f} = @{f}")); return $"UPDATE {TableName} SET {setClause} WHERE id = @id;"; } } // 生成 Delete 语句 public string GenerateDeleteSQL(Dictionary conditions = null) { if (conditions == null || conditions.Count == 0) { // 默认根据 ID 删除 return $"DELETE FROM {TableName} WHERE id = @id;"; } else { // 根据传入条件删除 var whereClause = string.Join(" AND ", conditions.Keys.Select(f => $"{f} = @{f}")); return $"DELETE FROM {TableName} WHERE {whereClause};"; } } } [AttributeUsage(AttributeTargets.Property)] public class DbFieldAttribute : Attribute { public string FieldName { get; } public DbFieldAttribute(string fieldName) { FieldName = fieldName; } }