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

.NET 6 Razor Pages基于ADO.NET实现多表CRUD泛型通用视图

结论

完全可以实现。针对大量结构相似的查找表CRUD场景,基于.NET 6 Razor Pages的泛型+动态路由+ADO.NET元数据反射能力做通用方案,是行业里很常用的降本手段,能把150+页面的开发量压缩到1个通用页面+少量基础配置的工作量。

具体实现步骤
  • 第一步:预生成实体类与基础标记
    用T4模板或简单的代码生成脚本,连接数据库一次性生成150张查找表对应的C#实体类,每个类只需要定义和表字段对应的属性,再配合自定义特性标记表名、主键名即可,示例:
    [TableName("sys_order_status")]
    [PrimaryKey("StatusId")]
    public class OrderStatus
    {
        public int StatusId { get; set; }
        public string StatusName { get; set; }
        public int Sort { get; set; }
        public bool IsEnabled { get; set; }
    }
    
    这一步生成全程自动化,150张表的实体类几秒钟就能生成完,不需要手写。
  • 第二步:实现泛型通用PageModel基类
    定义泛型抽象类GenericLookupModel<T> where T : class, new(),把所有CRUD的公共逻辑全部写在这个基类里:包括列表分页查询、单条数据查询、新增提交、编辑提交、删除提交的处理方法,所有方法不依赖具体表类型,只依赖泛型T的元数据。
  • 第三步:封装基于ADO.NET的通用数据访问层
    写一个通用仓储类,启动时一次性把所有实体类型、对应表名、字段、主键的映射关系缓存到内存(避免每次请求反射带来的性能损耗),根据传入的泛型类型自动拼接参数化的CRUD SQL:
    • 列表查询自动拼接SELECT [字段列表] FROM [表名],附加分页、模糊查询的参数化条件
    • 新增/编辑自动根据实体属性拼接参数化的INSERT/UPDATE语句,所有传值全部走SqlParameter,从根源避免SQL注入
    • 删除操作自动根据主键字段拼接参数化的DELETE语句
      整个数据层不需要为单张表写任何单独SQL。
  • 第四步:配置动态路由映射
    不需要为每张表单独创建.cshtml和.cshtml.cs文件,在Program.cs里配置Razor Pages路由约定,把/LookupAdmin/{tableKey}/{handler?}格式的请求统一路由到你唯一的通用查找表管理页面,路由参数里的tableKey用来匹配对应的实体类型,运行时动态绑定泛型PageModel的类型参数。
  • 第五步:实现动态渲染的通用视图
    唯一的通用Razor视图不写死任何表的字段,根据当前绑定实体的属性元数据、数据注解特性动态渲染UI:
    • 列表页根据实体属性动态生成表格列,自动加排序、筛选控件
    • 新增/编辑表单根据属性类型(数字、字符串、日期、布尔值)渲染对应输入控件,自动读取必填、长度等校验规则生成前后端校验逻辑
方案适配说明
  • 这套方案对结构简单的查找表适配度接近100%,如果少数表有特殊业务逻辑,单独新增对应页面覆盖路由即可,完全不影响通用逻辑的使用。
  • 权限控制、操作日志这类横切逻辑可以全部写在泛型基类里,根据路由传入的tableKey做权限校验,不需要重复编写。
  • 性能层面因为做了元数据缓存,和单独写每个页面的表现没有可感知的差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:30:53