Asp.net Webform 使用Repository模式實現CRUD操做代碼生成工具

Asp.net Webform 使用Repository模式實現CRUD操做代碼生成工具

介紹

該工具是經過一個github上的開源項目修改的原始做者https://github.com/Superexpert/WebFormsScaffolding 我在他的基礎上添加了一對多實體類的新增,修改,刪除操做,並實現了Repository設計模式,修改了一些頁面佈局,添加了一些DynamicData動態字段,個人開源項目地址https://github.com/neozhu/WebFormsScaffolding,歡迎你們下載或一塊兒完善。css

該工具集成在vs.net 2013纔有的Scaffolding一個代碼生成的組件本來自帶的是用於MVC項目根據Entity class生成MVC Controller和View的新增,修改,刪除操做。安裝了這個工具後那麼Webfrom項目也能夠根據事先定義好的Entity 生成查詢,新增,修改,刪除 頁面和後臺數據操做。git

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

代碼生成的例子設計模式

 

使用方法

安裝

訪問https://github.com/neozhu/WebFormsScaffoldingide

獲取最新代碼,使用vs.net 2013打開後編譯完成就能夠安裝工具

安裝完成後在vs.net 中就有Web Forms Scaffolding這個組件佈局

 

新建Web Forms項目

使用Code-First EntityFrameworkui

新建一個Product實體類編碼

public class Productspa

{

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

相關文章
相關標籤/搜索