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選項卡