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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM