程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 基於.net mvc的校友錄 三、實體模型實現

基於.net mvc的校友錄 三、實體模型實現

編輯:關於.NET

由於是實際開發,而且是時間比較緊的,所以,在開發實現過程中,總有一些對原計劃的改動:

AlumniBookModel數據庫實體模型

這是主數據實體類,EF會根據此實體生成數據庫,它的每一個成員都是DbSet類型,這是數據集類型,也就是內存中的表,數據庫AlumniBookModel中共有九張表,它們的名字分別是成員的名字,但是,若是打開數據庫,就會發現,它們的表名是這些成員名的復數,而這個機制,開篇已經有講過,這裡不再多說。再來看一下它的構造函數:

public class AlumniBookModel : DbContext
    
    {
    
        public AlumniBookModel()
    
            : base("ABConnection")
    
        {
    
        }
    
        public DbSet<Admin> Admin { get; set; }
    
        public DbSet<User> User { get; set; }
    
        public DbSet<UserInfo> UserInfo { get; set; }
    
        public DbSet<Class> Class { get; set; }
    
     
    
     public DbSet<School> School { get; set; }
    
AlumniBookModel繼承了DbContext,也就是數據庫上下文類,這個類就想當一個數據庫類型,它對不同的數據進行了封裝,構造方法中傳進去參數ABConnection是web.config中
    
  <connectionStrings>
    
    <add name="ABConnection" connectionString="Data Source=|DataDirectory|AlumniBook.sdf" providerName="System.Data.SqlServerCe.4.0" />
    
  </connectionStrings>

connectionString數據庫連接字符串,數據庫會根據它在合適的時候創建數據庫,具體細節,我在介紹EF的時候已經說過了,這裡不在詳細說。

下面介紹一個普通數據實體模型類(表)--UserInfo

UserName實體模型圖

這個類中,它的每一個屬性都是表的列,其中DateTime的類型是可為空的DateTime類型,是C#新添加的類型,目的是解決時間為null的異常問題。UserInfo裡面包含了用戶的個人資料,但是不包含用戶的密碼,用戶的密碼放在User裡面,因為密碼驗證的時候,總是要取密碼,因此將它放到特定的實體(相當於其它系統中的表,這裡再說成表的話,可能不是太科學)裡面了。凡是寫為DbContext子類的成員屬性的實體類,都是表,也都是數據模型,除此之外,其它的實體模型都是視圖模型,用來作為前後台交互數據的對象用的。

比如下面的這個注冊視圖模型:

ReginModel實體模型圖

視圖模型與數據模型有所不同,因為,數據模型是與用戶直接接觸的,而且多數時候還會返回數據,所以要多一項驗證,對於本系統的注冊視圖模型源代碼是這樣的:

public class ReginModel
    
{
    
        [Required]
    
        [MinLength(3), MaxLength(10)]
    
        [Display(Name = "用戶名")]
    
        public string UserName { get; set; }
    
        [Required]
    
        [Display(Name = "昵稱")]
    
        [DataType(DataType.Text)]
    
        [StringLength(20, ErrorMessage = "昵稱的長度應在3到20之間", MinimumLength = 3)]
    
        public string NickName { get; set; }
    
        [Required]
    
        [StringLength(100, ErrorMessage = "{0} 必須至少包含 {2} 個字符。", MinimumLength = 6)]
    
        [DataType(DataType.Password)]
    
        [Display(Name = "新密碼")]
    
        public string Password { get; set; }
    
        [DataType(DataType.Password)]
    
        [Display(Name = "確認新密碼")]
    
        [Compare("NewPassword", ErrorMessage = "新密碼和確認密碼不匹配。")]
    
        public string CPassword { get; set; }
    
        [Display(Name = "生日")]
    
        [DataType(DataType.DateTime, ErrorMessage = "請填寫正確的日期格式")]
    
        public DateTime Birthday { get; set; }
    
        [Display(Name = "性別")]
    
        [Required]
    
        public bool Sex { get; set; }
    
        [Display(Name = "郵箱地址")]
    
        [DataType(DataType.EmailAddress,ErrorMessage="此處必須是郵箱")]
    
        [Required]
    
        public string email { get; set; }
    
}

EF充分使用了C#語言的特性,使用屬性來作為字段控制。比如第一個成員UserName,Required的意思是這個成員是必須,不能為null,MinLenth(3)則表示最小長度為3,不能比3再小,當然,它只限於對字符串類型以及數字類型的驗證。Display這個特性,是給UserName這個屬性又加上的一個屬性,可以通過前台Razor中的代碼看一下。

<legend>注冊表單</legend>
    
      <table>
    

           <tr>
    
               <td>@Html.LabelFor(m=>m.UserName)</td>
    
               <td>@Html.TextBoxFor(m => m.UserName)</td>
    
           </tr>

查看本欄目

可以看見這裡沒有使用常規的<input>標簽,但其實是使用的,只是@html.TextBoxFor幫我們生成了,它會以本頁的強類型的UserName作為數據元來生成<input>也就是說,當這個form提交給後台之後,這個input裡面的數據將會被自動封裝在UserName屬性中。而上面的LabelFor則是將UserName這個屬性的Display中的Name屬性作為label顯示出來,正好就是我們上面的UserName屬性的Display特性值。

總的的數據實體模型類:

數據庫實體模型(一)

數據庫實體模型(二)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved