You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EF Core 3.1.15:脚手架生成时如何为实体属性添加自定义特性?

在EF Core 3.1.15中实现脚手架生成时为指定属性添加特性

可以通过自定义EF Core脚手架的属性生成器来实现这个需求,具体步骤如下:

1. 实现自定义属性生成器

继承默认的CSharpPropertyGenerator,重写Generate方法,在生成属性代码时检查当前列是否在目标配置列表中,若是则追加自定义特性。

using Microsoft.EntityFrameworkCore.Scaffolding;
using Microsoft.EntityFrameworkCore.Scaffolding.Metadata;
using System.Collections.Generic;

public class CustomPropertyGenerator : CSharpPropertyGenerator
{
    // 配置需要添加特性的列,格式为「schema.table.column」
    private readonly HashSet<string> _targetColumns = new HashSet<string>
    {
        "dbo.Users.Name",
        "dbo.Users.Email"
    };

    public CustomPropertyGenerator(ICSharpHelper cSharpHelper) : base(cSharpHelper)
    {
    }

    public override string Generate(IProperty property, string entityNamespace)
    {
        // 先调用基类生成默认的属性代码
        var basePropertyCode = base.Generate(property, entityNamespace);
        
        // 构建当前列的全限定标识
        var fullColumnId = $"{property.Table.Schema}.{property.Table.Name}.{property.Name}";
        
        // 如果是目标列,在属性代码前添加特性
        if (_targetColumns.Contains(fullColumnId))
        {
            return $"    [MyAttribute]\n{basePropertyCode}";
        }

        return basePropertyCode;
    }
}

2. 注册自定义生成器

创建IDesignTimeServices实现类,将自定义属性生成器注入到脚手架服务中,替换默认实现。

using Microsoft.EntityFrameworkCore.Design;
using Microsoft.EntityFrameworkCore.Scaffolding;
using Microsoft.Extensions.DependencyInjection;

public class CustomDesignTimeServices : IDesignTimeServices
{
    public void ConfigureDesignTimeServices(IServiceCollection services)
    {
        services.AddSingleton<IPropertyGenerator, CustomPropertyGenerator>();
    }
}

注意事项

  • 确保MyAttribute的命名空间已被生成的实体类引用:可以在自定义生成器中额外添加using语句,或者通过Scaffold-DbContext命令的--namespace参数统一配置,避免编译错误。
  • 上述代码需放在能被EF Core设计时工具扫描到的项目中(如与DbContext同项目),编译后执行Scaffold-DbContext命令时,工具会自动加载并应用自定义逻辑。

内容的提问来源于stack exchange,提问作者thisextendsthat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 14:00:20