asp.net mvc+jquery easyui開發實戰教程之網站後臺管理系統開發2-Model層建立
上篇(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());跟第二條對應。
|
數據庫鏈接在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 ; }
}
}
|
上面代碼只是列舉了兩個,將其他代碼也必須考入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 ; }
}
|
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>
|
至此項目的M層創建完成,還需要進一步進行修改,具體修改知識介紹如下:
三、Model驗證知識講解.net mvc中前端輸入label提示及輸入驗證都是在M層實現的。
1、label輸入提示[DisplayName("新聞標題")]
public string TITLE { get; set; }
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層建立