博客
关于我
Asp.net Webform 使用Repository模式实现CRUD操作代码生成工具
阅读量:799 次
发布时间:2023-04-17

本文共 3073 字,大约阅读时间需要 10 分钟。

Asp.net Webform 使用Repository模式实现CRUD操作代码生成工具

项目概述

本工具通过修改GitHub上开源项目,扩展了原始作者的工作,实现了一对多实体类的增删改查操作,并采取了Repository设计模式。同时,页面布局进行了优化,新增了DynamicData动态字段。该工具适用于VS.NET 2013及以上版本的Web Forms项目,能够根据事先定义的Entity类自动生成查询、新增、修改和删除页面及后台操作。

安装与使用

安装步骤

  • 访问GitHub获取最新代码
  • 使用VS.NET 2013打开项目文件,完成编译
  • 进行安装,完成后VS.NET中将新增“Web Forms Scaffolding”组件
  • 项目创建

  • 新建Web Forms项目,选择Code-First Entity Framework
  • 创建Product实体类,示例代码如下:
  • public class Product
    {
    public int Id { get; set; }
    [Display(Name = "商品编码")]
    [MaxLength(10)]
    [Required]
    public string SKU { get; set; }
    [Display(Name = "品名")]
    [MaxLength(50)]
    [Required]
    public string Name { get; set; }
    [Display(Name = "规格")]
    [MaxLength(20)]
    public string Model { get; set; }
    [Display(Name = "单位")]
    [MaxLength(10)]
    public string Unit { get; set; }
    [Display(Name = "单价")]
    public decimal Price { get; set; }
    [Display(Name = "数量")]
    public int Qty { get; set; }
    }
    1. 创建Company和Department实体类,实体间建立一对多关系,代码示例如下:
    2. public class Company
      {
      public Company()
      {
      Departments = new HashSet
      ();
      }
      [Key]
      [Display(Name = "系统编码")]
      public int Id { get; set; }
      [Display(Name = "公司名称")]
      [MaxLength(10)]
      [Required]
      public string Name { get; set; }
      [Display(Name = "地址")]
      [MaxLength(50)]
      public string Address { get; set; }
      [Display(Name = "联系人")]
      [MaxLength(10)]
      public string ContactName { get; set; }
      [Display(Name = "联系电话")]
      [MaxLength(20)]
      public string ContactPhone { get; set; }
      public virtual ICollection
      Departments { get; set; }
      }
      public class Department
      {
      public Department()
      {
      }
      [Key]
      [Display(Name = "系统编码")]
      public int Id { get; set; }
      [Display(Name = "部门名称")]
      [Required]
      [MaxLength(20)]
      public string Name { get; set; }
      public int Company_Id { get; set; }
      [ForeignKey("Company_Id")]
      public virtual Company Company { get; set; }
      }

      路由配置

      在App_Start目录下的RouteConfig.cs中添加以下路由配置:

      public static class RouteConfig
      {
      public static void RegisterRoutes(RouteCollection routes)
      {
      var settings = new FriendlyUrlSettings
      {
      AutoRedirectMode = RedirectMode.Permanent
      };
      routes.EnableFriendlyUrls(settings);
      // 添加路由配置
      var defaultModel = new MetaModel(true);
      defaultModel.RegisterContext(new ModelProvider(
      () => new WebAPP.Models.MyDbContext(),
      new ContextConfiguration { ScaffoldAllTables = true }
      ));
      }
      }

      动态数据字段

      项目目录下DynamicData文件夹支持添加新的动态字段(如DateTime),使GridView和编辑页面更加灵活。

      界面操作

      CRUD操作

    3. 使用“Add New Scaffolding Item”创建新的操作页面
    4. 选择Product模型,输入模板文件路径
    5. 生成页面后,系统会自动生成 Repositories文件夹下的Repository实现类
    6. Extensions文件夹包含自定义控件扩展
    7. Projects文件夹下自动生成五个操作页面:List、Create、Edit、Delete、Details
    8. 页面展示

      编译后运行项目,访问相关页面即可完成数据操作。新增页面支持文件上传和数据验证,修改页面保留所有动态字段信息。

      存在的问题

    9. T4模板支持的中文显示存在问题,生成代码可能出现乱码。
    10. 在多个子表使用Bootstrap Tabs控制时,切换Tab无法保持停留在当前选项卡。
    11. 解决方案

    12. 在T4模板中避免使用中文字符或使用额外的编码处理。
    13. 使用其他Tab控制方式或自定义JavaScript实现多Tab切换功能。
    14. 通过以上步骤,可以轻松完成ASP.NET Web Forms项目的CRUD操作,充分发挥Repository模式的优势。

    转载地址:http://bvgfk.baihongyu.com/

    你可能感兴趣的文章
    MySQL: Host '127.0.0.1' is not allowed to connect to this MySQL server
    查看>>
    Mysql: 对换(替换)两条记录的同一个字段值
    查看>>
    mysql:Can‘t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock‘解决方法
    查看>>
    MYSQL:基础——3N范式的表结构设计
    查看>>
    MYSQL:基础——触发器
    查看>>
    Mysql:连接报错“closing inbound before receiving peer‘s close_notify”
    查看>>
    mysqlbinlog报错unknown variable ‘default-character-set=utf8mb4‘
    查看>>
    mysqldump 参数--lock-tables浅析
    查看>>
    mysqldump 导出中文乱码
    查看>>
    mysqldump 导出数据库中每张表的前n条
    查看>>
    mysqldump: Got error: 1044: Access denied for user ‘xx’@’xx’ to database ‘xx’ when using LOCK TABLES
    查看>>
    Mysqldump参数大全(参数来源于mysql5.5.19源码)
    查看>>
    mysqldump备份时忽略某些表
    查看>>
    mysqldump实现数据备份及灾难恢复
    查看>>
    mysqldump数据库备份无法进行操作只能查询 --single-transaction
    查看>>
    mysqldump的一些用法
    查看>>
    mysqli
    查看>>
    MySQLIntegrityConstraintViolationException异常处理
    查看>>
    mysqlreport分析工具详解
    查看>>
    MySQLSyntaxErrorException: Unknown error 1146和SQLSyntaxErrorException: Unknown error 1146
    查看>>