目录
一、在实体层中添加Documentation、SummaryAttribute类1
/// <summary>
/// 获取注释
/// </summary>
public static class Documentation
{
/// <summary>
/// 通过自定义特性获取注释
/// </summary>
/// <param name="member"></param>
/// <returns></returns>
public static string GetDocumentation(this MemberInfo member)
{
return member.GetCustomAttributes<SummaryAttribute>()
.Select(attr => attr.Summary)
.FirstOrDefault();
}
}
/// <summary>
/// 自定义特性 用于生成表时添加注释
/// Inherited = true表示这个特性可以被子类继承
/// AllowMultiple = true表示这个特性可以在一个属性上应用多次
/// </summary>
[AttributeUsage(AttributeTargets.Property, Inherited = true, AllowMultiple = true)]
sealed class SummaryAttribute : Attribute
{
public string Summary { get; }
public SummaryAttribute(string summary)
{
Summary = summary;
}
}
二、在EF Core层添加ConfigNote类
public static class ConfigNote
{
public static void AddEntityComments<T>(this ModelBuilder modelBuilder, string tableTxt) where T : class
{
var entityType = typeof(T);
var tableName = entityType.Name;
//var tableComment = entityType.GetDocumentation();
modelBuilder.Entity<T>()
.ToTable(tableName)
.HasComment(tableTxt);
var properties = entityType.GetProperties();
foreach (var property in properties)
{
var columnName = property.Name;
var comment = GetPropertySummary(property);
modelBuilder.Entity<T>()
.Property(columnName)
.HasComment(comment);
}
}
private static string GetPropertySummary(PropertyInfo property)
{
return property.GetDocumentation();
}
}
三、在实体层中实体类字段中添加需要的注释
例: BaseEntity类中的主键生成表时需要添加注释就加上[Summary(“主键”)]
/// <summary>
/// 创建通用类
/// </summary>
/// <typeparam name="Tkey"></typeparam>
public class BaseEntity<Tkey>
{
/// <summary>
/// 主键
/// </summary>
[Summary("主键")]
public Tkey Id { get; set; }
/// <summary>
/// 排序
/// </summary>
[Summary("排序")]
public int Sort { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; } = DateTime.Now;
/// <summary>
/// 创建人名称
/// </summary>
public string CreateBy { get; set; }
/// <summary>
/// 创建人名称
/// </summary>
public string? UpdataBy { get; set; }
/// <summary>
/// 修改时间
/// </summary>
public DateTime? UpdateTime { get; set; }
/// <summary>
/// 是否删除
/// </summary>
[Summary("是否删除")]
public bool IsDeleted { get; set; }
}
四、在public class SqlDbContext : DbContext中调用
public class SqlDbContext : DbContext
{
/// <summary>
/// 构造方法
/// </summary>
/// <param name="db">数据库连接字符串</param>
public SqlDbContext(DbContextOptions db) : base(db)
{
}
public virtual DbSet<SysUser> SysUser { get; set; } // 用户表
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.AddEntityComments<SysUser>("用户表");
base.OnModelCreating(modelBuilder);
}
}
五、效果
网上还有其它方法也可以实现的
记录学习时刻↩︎