EF Core 使用自定义Attribute来标记注释

一、在实体层中添加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);
    }

}

五、效果

在这里插入图片描述
在这里插入图片描述

网上还有其它方法也可以实现的


  1. 记录学习时刻 ↩︎

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值