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

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

介绍

该工具是通过一个github上的开源项目修改的原始作者https://github.com/Superexpert/WebFormsScaffolding 我在他的基础上添加了一对多实体类的新增,修改,删除操作,并实现了Repository设计模式,修改了一些页面布局,添加了一些DynamicData动态字段,我的开源项目地址https://github.com/neozhu/WebFormsScaffolding,欢迎大家下载或一起完善。

该工具集成在vs.net 2013才有的Scaffolding一个代码生成的组件原本自带的是用于MVC项目根据Entity class生成MVC Controller和View的新增,修改,删除操作。安装了这个工具后那么Webfrom项目也可以根据事先定义好的Entity 生成查询,新增,修改,删除 页面和后台数据操作。

 http://files.cnblogs.com/neozhu/WebAPP.zip

代码生成的例子

使用方法

安装

访问https://github.com/neozhu/WebFormsScaffolding

获取最新代码,使用vs.net 2013打开后编译完成就可以安装

安装完成后在vs.net 中就有Web Forms Scaffolding这个组件

新建Web Forms项目

使用Code-First EntityFramework

新建一个Product实体类

public class Product

{

[Key]

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; }

}

一个Company实体类+Department实体类,一对多的关系

public class Company

{

public Company()

{

Departments = new HashSet<Department>();

}

[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<Department> 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 Company Company { get; set; }

}

实体类字段上的验证比如Required,Display会在生成的Form和Gridview中体现,包括负责的正则表达验证都可以实现。

修改App Start目录下RouteConfig.cs

public static class RouteConfig

{

public static void RegisterRoutes(RouteCollection routes)

{

var settings = new FriendlyUrlSettings();

settings.AutoRedirectMode = RedirectMode.Permanent;

routes.EnableFriendlyUrls(settings);

var DefaultModel = new MetaModel(true);

DefaultModel.RegisterContext(

new Microsoft.AspNet.DynamicData.ModelProviders.EFDataModelProvider(() => new WebAPP.Models.MyDbContext()),

new ContextConfiguration { ScaffoldAllTables = true });

}

}

用于GridView绑定外键字段列时,系统自动判断使用ForeignKey 动态字段类型

新建Product实体的查询,新增,修改,删除页面

在你项目的文件夹下add-new scaffolded item…

选择Product Model,Data Context,选择模板页文件

创建完成后,项目会新增一个Repositories文件

DataProvider文件夹下就是实现Repistory设计模式的产生的类库文件,包括CRUD方法和一个Context工厂类模型

Extensions文件夹下的ControlExtensions用于扩展formview,gridview的一些方法

DynamicData文件夹下动态列字段,也可以新建比如DateTime

Products文件夹实现Product模型相关的方法

项目目录下Products目下生成的5个操作页面

编译成功后运行

查询页面,

新增页面

编辑页面

所有页面功能都已经实现,页面的css完全使用最近Boostrap 3.3

下面是一对多的模板

公司下面会有多个部门。生成的样式如下

子表编辑,单击add

上述功能的实现无需再添加任何代码就可以完成。

还存在的问题

T4模板在生成页面时竟然不支持中文,在模板中输入中文,生成代码后是乱码

如果存在多个子表的情况使用Boostrap tabs控制时

$(function () {

//$("#tabs").tabs();

$('.nav-tabs a:first').tab('show')

每次操作无法停留在当前的Tab选项卡

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏实战docker

修改,编译,GDB调试openjdk8源码(docker环境下)

在上一章《在docker上编译openjdk8》里,我们在docker容器内成功编译了openjdk8的源码,有没有读者朋友产生过这个念头:“能不能修改open...

5269
来自专栏云端漫步

go设计模式之单例模式

单例模式在系统设计中很常用,如数据库的连接对象等,该类只有一个实例存在,实现很简单,就是在创建实例时,判断一下,实例是否已经存在。

1120
来自专栏大内老A

ASP.NET MVC集成EntLib实现“自动化”异常处理[实例篇]

个人觉得异常处理对于程序员来说是最为熟悉的同时也是最难掌握的。说它熟悉,因为仅仅就是try/catch/finally而已。说它难以掌握,则是因为很多开发人员却...

21410
来自专栏大内老A

[WCF REST] 通过ASP.NET Output Caching实现声明式缓存

ASP.NET的输出缓存(Output Caching)机制允许我们针对整个Web页面或者页面的某个部分(主要针对用户控件)最终呈现的HTML进行缓存。对于后续...

1916
来自专栏lzj_learn_note

Volley源码分析学习

2)根据SDK版本来创建HttpStack的实现,如果是2.3以上的,则使用基于HttpUrlConnection实现的HurlStack,反之,则利用Http...

1106
来自专栏移动端开发

iOS 从实际出发理解多线程

前言 ----       多线程很多开发者多多少少相信也都有了解,以前有些东西理解的不是很透,慢慢的积累之后,这方面的东西也需要自己好好的总结一下。多线程从我...

2147
来自专栏恰童鞋骚年

设计模式的征途—19.命令(Command)模式

在生活中,我们装修新房的最后几道工序之一是安装插座和开关,通过开关可以控制一些电器的打开和关闭,例如电灯或换气扇。在购买开关时,用户并不知道它将来到底用于控制什...

612
来自专栏坚毅的PHP

jersey处理支付宝异步回调通知的问题:java.lang.IllegalArgumentException: Error parsing media type 'application/x-www

tcpflow以流为单位分析请求内容,非常适合服务器端接口类服务查问题 这次遇到的问题跟支付宝支付后的回调post结果有关 淘宝的代码例子: publi...

5995
来自专栏Java帮帮-微信公众号-技术文章全总结

Web-第十天 Cookie&Session学习

当用户访问某些Web应用时,经常会显示出该用户上一次的访问时间。例如,QQ登录成功后,会显示用户上次的登录时间。通过本任务,读者将学会如何使用Cookie技术实...

1573
来自专栏大内老A

[WCF权限控制]利用WCF自定义授权模式提供当前Principal[实例篇]

在《原理篇》中我们谈到:如果采用自定义安全主体权限模式,我们可以通过自定义AuthorizationPolicy或者ServiceAuthorizationMa...

26010

扫码关注云+社区

领取腾讯云代金券