1. 程式人生 > >asp.net mvc+jquery easyui開發實戰教程之網站後臺管理系統開發2-Model層建立

asp.net mvc+jquery easyui開發實戰教程之網站後臺管理系統開發2-Model層建立

ack 前端 strong syn eee 名稱 lar led tegra

上篇(asp.net mvc+jquery easyui開發實戰教程之網站後臺管理系統開發1-準備工作)文章講解了開發過程中的準備工作,主要創建了項目數據庫及項目,本文主要講解項目M層的實現,M層這裏講的主要是通過Codefirst方式實現的。

一、M層簡單介紹 1、M層很形象的將數據庫裏面的各個表格映射成了C#當中的類,比如上篇文章創建的用戶表: ?
1 2 3 4 5 6 7 8 9 10 11 12 CREATE TABLE [dbo].[SYS_USER]( [ID] [nvarchar](36) NOT
NULL,--ID [USERNAME] [nvarchar](20) NULL,--用戶名 [REALNAME] [nvarchar](30) NULL,--真實姓名 [USERPASS] [nvarchar](32) NULL,--用戶密碼 [RULEID] [nvarchar](36) NULL,--角色ID [RULENAME] [nvarchar](60) NULL,--角色名稱 CONSTRAINT [PK_SYS_USER] PRIMARY KEY CLUSTERED (
[ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]

映射成Model類為:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public partial class SYS_USER
{ public string ID { get; set; } [Required(ErrorMessage = "{0}不能為空")] [DisplayName("用戶名")] public string USERNAME { get; set; } [Required(ErrorMessage = "{0}不能為空")] [DisplayName("真實姓名")] public string REALNAME { get; set; } [Required(ErrorMessage = "{0}不能為空")] [DisplayName("用戶密碼")] public string USERPASS { get; set; } [Required(ErrorMessage = "{0}不能為空")] [DisplayName("所屬角色")] public string RULEID { get; set; } [DisplayName("所屬角色")] public string RULENAME { get; set; } }

類名跟表明對應,屬性名跟字段名對應。到這一般實際中表跟類是沒有關系的,還需進一步配置。

2、通過EntityTypeConfiguration將類跟數據庫裏面的表依依做對應

通過EntityTypeConfiguration可以設置類跟數據庫裏面哪個表做對應,本步好像可以不做也行,默認有對應關系,默認對應關系中數據庫表後面好像得有個s,具體對應代碼如下:

?
1 2 3 4 5 6 7 public class SYS_USERMapping : EntityTypeConfiguration<SYS_USER> { public SYS_USERMapping() { ToTable("dbo.SYS_USER"); } }

不難看出ToTable("dbo.SYS_USER")這裏指定了對應數據庫裏面的哪個表格。

3、使用DbContext做統籌

以上兩步介紹的必須DbContext做個關聯才行,codefirst中所有對數據庫表的增刪改查都必須通過DbContext提供的方法去做。具體代碼如下:

?
1 2 3 4 5 6 7 8 9 public class SiteDataBaseDbContent : DbContext { protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Configurations.Add(new SYS_USERMapping()); base.OnModelCreating(modelBuilder); } public DbSet<SYS_USER> SYS_USER { get; set; } }
?
1 modelBuilder.Configurations.Add(new SYS_USERMapping());跟第二條對應。
4、至此還缺一個數據庫鏈接,有了數據庫鏈接M層就做完了,貌似很簡單。

數據庫鏈接在web.config中實現就可以了,鏈接名稱跟public class SiteDataBaseDbContent : DbContext這裏的SiteDataBaseDbContent 名稱一致就行,名稱一致了codefirst會自己去找這個鏈接,代碼如下:

?
1 2 3 <connectionStrings> <add name="SiteDataBaseDbContent" connectionString="Data Source=.;Initial Catalog=SiteDataBase;Persist Security Info=True;User ID=sa;Password=t145879" providerName="System.Data.SqlClient" /> </connectionStrings>

M層的相關知識簡單的就這些了,能滿足一般項目需求。

二、本項目M層具體建立操作步驟

M層的主要工作量就在於寫數據表對應類,有簡單的方法不用自己去寫,步驟如下:

在解決方案資源管理器的Models文件夾右鍵點擊,選擇添加-》新建項菜單,如下圖:

技術分享

打開新建對話框,左側選擇數據菜單,右側選擇ADO.NET實體數據模型,然後點擊添加按鈕,如下圖:

技術分享

然後選擇從數據庫生成,然後點擊下一步,如下圖:

技術分享

然後點擊新建鏈接按鈕,根據你數據庫配置情況建立數據庫鏈接,如下圖:

技術分享

數據庫鏈接創建成功後點擊下一步按鈕,然後選擇全部表格,如下圖:

技術分享

最後點擊完成按鈕即可,此時所有表對應的類都已經生成,如下圖:

技術分享

說明:這裏的Model1.edmx只是臨時使用文件,M層創建完後刪除就行。

1、創建項目的CodeFirst Model類

在解決方案資源管理器的Models文件夾右鍵點擊,選擇添加-》類菜單,如下圖:

技術分享

創建一個名為DatabaseModels的類文件。然後將Model1.tt下面的類都考入DatabaseModels文件中,代碼如下:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 namespace SiteDataBase.Models { public partial class SYS_USER { public string ID { get; set; } public string USERNAME { get; set; } public string REALNAME { get; set; } public string USERPASS { get; set; } public string RULEID { get; set; } public string RULENAME { get; set; } } public partial class SYS_ROLE { public string ID { get; set; } public string NAME { get; set; } public string ROLEDESC { get; set; } public string SHOWORDER { get; set; } public string LOCKSTATE { get; set; } public string POWERLIST { get; set; } public Nullable<System.DateTime> CREATETIME { get; set; } public string CREATEIP { get; set; } public string CREATEUSER { get; set; } public Nullable<System.DateTime> MODIFYTIME { get; set; } public string MODIFYIP { get; set; } public string MODIFYUSER { get; set; } } }
2、創建數據庫表跟類對應關系代碼EntityAnnotations.cs

上面代碼只是列舉了兩個,將其他代碼也必須考入DatabaseModels文件中,第二步是根據類創建數據庫表跟類的對應關系類:EntityAnnotations.cs,具體代碼如下:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 namespace SiteDataBase.Models { public class SYS_ROLEMapping : EntityTypeConfiguration<SYS_ROLE> { public SYS_ROLEMapping() { ToTable("dbo.SYS_ROLE"); } } public class SYS_USERMapping : EntityTypeConfiguration<SYS_USER> { public SYS_USERMapping() { ToTable("dbo.SYS_USER"); } } }

同理所有表格都必須做對應。

3、創建項目的DbContext文件,最終代碼如下: ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 public class SiteDataBaseDbContent : DbContext { protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Configurations.Add(new SITE_ARTICLEMapping()); modelBuilder.Configurations.Add(new SITE_COLUMNMapping()); modelBuilder.Configurations.Add(new SITE_PROJECTMapping()); modelBuilder.Configurations.Add(new SYS_DICTIONARYMapping()); modelBuilder.Configurations.Add(new SYS_INFOMATIONMapping()); modelBuilder.Configurations.Add(new SYS_LOGMapping()); modelBuilder.Configurations.Add(new SYS_MENUMapping()); modelBuilder.Configurations.Add(new SYS_ROLEMapping()); modelBuilder.Configurations.Add(new SYS_USERMapping()); modelBuilder.Configurations.Add(new FRIENDLY_LINKMapping()); base.OnModelCreating(modelBuilder); } public DbSet<FRIENDLY_LINK> FRIENDLY_LINK { get; set; } public DbSet<SITE_ARTICLE> SITE_ARTICLE { get; set; } public DbSet<SITE_COLUMN> SITE_COLUMN { get; set; } public DbSet<SITE_PROJECT> SITE_PROJECT { get; set; } public DbSet<SYS_DICTIONARY> SYS_DICTIONARY { get; set; } public DbSet<SYS_INFOMATION> SYS_INFOMATION { get; set; } public DbSet<SYS_LOG> SYS_LOG { get; set; } public DbSet<SYS_MENU> SYS_MENU { get; set; } public DbSet<SYS_ROLE> SYS_ROLE { get; set; } public DbSet<SYS_USER> SYS_USER { get; set; } }
4、創建數據庫鏈接,代碼如下: ?
1 2 3 4 <connectionStrings> <add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-SiteDataBase-20170902172943;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-SiteDataBase-20170902172943.mdf" /> <add name="SiteDataBaseDbContent" connectionString="Data Source=.;Initial Catalog=SiteDataBase;Persist Security Info=True;User ID=sa;Password=t145879" providerName="System.Data.SqlClient" /> </connectionStrings>
5、刪除剛才新建的Model1.edmx文件,最終Models目錄如下:

技術分享

至此項目的M層創建完成,還需要進一步進行修改,具體修改知識介紹如下:

三、Model驗證知識講解

.net mvc中前端輸入label提示及輸入驗證都是在M層實現的。

1、label輸入提示

[DisplayName("新聞標題")]
public string TITLE { get; set; }

2、輸入驗證

Model類中可以添加的驗證標記:

1. 必填字段

[Required(ErrorMessage = "{0}不能為空")]

public string FirstName { get; set; }

2. 字段長度

至多n位:

[StringLength(160)]

public string FirstName { get; set; }

要求至少n位:

[StringLength(160, MinimumLength=3)]

public string FirstName { get; set; }

3. 正則驗證

[RegularExpression(@”[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}”)]

public string Email { get; set; }

4. 範圍

[Range(35,44)]

public int Age { get; set; }

小數的情況:

[Range(typeof(decimal), “0.00”, “49.99”)]

public decimal Price { get; set; }

5. 服務端參與的驗證

[Remote(“CheckUserName”, “Account”)]

public string UserName { get; set; }

然後在AccountController裏指定一個CheckUserName方法:

?
1 2 3 4 5 public JsonResult CheckUserName(string username) { var result = Membership.FindUsersByName(username).Count == 0; return Json(result, JsonRequestBehavior.AllowGet); }

6. 比較

[RegularExpression(@”[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}”)]

public string Email { get; set; }

[Compare(“Email”)]

public string EmailConfirm { get; set; }

7. 自定義錯誤消息

正則:

[RegularExpression(@”[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}”, ErrorMessage=”Email doesn’t look like a valid email address.”)]

public string Email { get; set; }

普通文本:

[Required(ErrorMessage=”Your last name is required”)]

[StringLength(160, ErrorMessage=”Your last name is too long”)]

public string LastName { get; set; }

占位符:

[Required(ErrorMessage=”Your {0} is required.”)]

[StringLength(160, ErrorMessage=”{0} is too long.”)]

public string LastName { get; set; }

3、常用正則表達式整理

數字:"^[0-9]*$"。

n位的數字:"^\d{n}$"。

至少n位的數字:"^\d{n,}$"。

m~n位的數字:。"^\d{m,n}$"

零和非零開頭的數字:"^(0|[1-9][0-9]*)$"。

有兩位小數的正實數:"^[0-9]+(.[0-9]{2})?$"。

有1~3位小數的正實數:"^[0-9]+(.[0-9]{1,3})?$"。

非零的正整數:"^\+?[1-9][0-9]*$"。

非零的負整數:"^\-[1-9][]0-9"*$。

長度為3的字符:"^.{3}$"。

由26個英文字母組成的字符串:"^[A-Za-z]+$"。

由26個大寫英文字母組成的字符串:"^[A-Z]+$"。

由26個小寫英文字母組成的字符串:"^[a-z]+$"。

由數字和26個英文字母組成的字符串:"^[A-Za-z0-9]+$"。

由數字、26個英文字母或者下劃線組成的字符串:"^\w+$"。

驗證用戶密碼:"^[a-zA-Z]\w{5,17}$"正確格式為:以字母開頭,長度在6~18之間,只能包含字符、數字和下劃線。

驗證是否含有^%&’,;=?$\"等字符:"[^%&’,;=?$\x22]+"。

只能輸入漢字:"^[\u4e00-\u9fa5]{0,}$"

驗證Email地址:"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"。

驗證InternetURL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。

驗證電話號碼:"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$"正確格式為:"XXX-XXXXXXX"、"XXXX- XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。

驗證身份證號(15位或18位數字):"^\d{15}|\d{18}$"。

驗證一年的12個月:"^(0?[1-9]|1[0-2])$"正確格式為:"01"~"09"和"1"~"12"。

驗證一個月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正確格式為;"01"~"09"和"1"~"31"。

至此本文完畢

點擊下載Model層代碼

技術交流QQ:806693619

asp.net mvc+jquery easyui開發實戰教程之網站後臺管理系統開發2-Model層建立