[ASP.NET MVC]Code First 定義資料模型的Metadata,常用Attribute)

[ASP.NET MVC]Code First 建立資料模型,常用Attribute)

 

如果你是用Code First開發方式,小弟這邊整理了一些在定義資料模型時常用的Attribute。

 

Attribute 說明  

[Table]

宣告資料表名稱

範例

[Key]

宣告主索引鍵

範例

[Required]

宣告必填欄位

範例

[MaxLength]

允許陣列或字串的最大長度

範例

[MinLength]

允許陣列或字串的最小長度

範例

[EmailAddress]

驗證電子郵件地址

範例

[DisplayName]

輸出顯示名稱

範例

[Range]

允許的數值範圍

範例

[Url]

驗證網址

範例

 

自訂錯誤訊息

範例

 

 


 

 

[Table]

說明:

  • 宣告資料表名稱

 

引用命名空間:

  • using System.ComponentModel.DataAnnotations.Schema;

 

範例:

  • [Table("MyMember")] 
  • 在此範例中把Table命名成MyMember,因此Member的property加上[Table]這個attribute:

 


using System.ComponentModel.DataAnnotations.Schema;


namespace MvcApplication3.Models
{
    [Table("MyMember")]
    public class Member
    {
        public int Id { get; set; }
        public string name { get; set; }
        public string password { get; set; }
    }
    
}

 

image

完成更名MyMember

 

另外,如果沒有加上[Table]這個attribue,資料表的預設命名規則舉例:

class 名稱 資料表名稱(預設) 說明
Member Members 英文結尾會自動加上s
Guestbook Guestbooks 英文結尾會自動加上s
Member2 Member2 數字結尾則與class 名稱一樣
GuestBook2 Guestbook2 數字結尾則與class 名稱一樣

 


namespace MvcApplication3.Models
{
    
    public class Member
    {
        public int Id { get; set; }
        public string name { get; set; }
        public string password { get; set; }
    }
    public class Guestbook
    {
        public int id { get; set; }
        public string name { get; set; }
    }
    public class Member2
    {
        public int Id { get; set; }
        public string name { get; set; }
        public string password { get; set; }
    }
    public class Guestbook2
    {
        public int id { get; set; }
        public string name { get; set; }
    }
}

 

 

image

產生的資料表

 


 

 

 

[Key]

說明:

  • 宣告主索引鍵
  • 在 EF Code First中,如果把屬性設為Id且型別設為int,會自動識別出這個欄位就是主索引鍵,
       但如果你想要把屬性名稱自行命名例如uid,就必須告宣告這個是主索引鍵。

 

引用命名空間:

  • using System.ComponentModel.DataAnnotations;

 

範例:

  • 在此範例中把uid設為主索引鍵,因此把uid的property加上[Key]這個attribute:

using System.ComponentModel.DataAnnotations;

namespace MvcApplication3.Models
{
    public class Member
    {
        [Key]   
        public int uid { get; set; }
        public string name { get; set; }
        public string password { get; set; }
    }
}

image

uid變成主索引鍵後且還有自動編號的規格設定

 


 

 

 

[Required]

說明:

  • 宣告必填欄位(NOT NULL)
  • .NET中string 的型別是屬於Reference Type是允許Null的資料,因此轉換到資料庫也會是允許Null,如果我們想要把欄位改成NOT NULL就必須加上[Required]
  • 前端(JS)與後端都會驗證

 

引用命名空間:

  • using System.ComponentModel.DataAnnotations;

 

範例:

  • 在此範例中把name設為必填欄位(NOT NULL),因此把name的property加上[Required]這個attribute:

using System.ComponentModel.DataAnnotations;




namespace MvcApplication3.Models
{
    public class Member
    {
        [Key]   
        public int uid { get; set; }
        [Required]
        public string name { get; set; }
    }
}

 

imagename欄位標示為NOT NULL

 

image

前端(JS)與後端都會做驗證

 


 

 

 

[MaxLength]

說明:

  • 允許陣列或字串的最大長度

 

引用命名空間:

  • using System.ComponentModel.DataAnnotations;

 

範例:

  • 在此範例中把name的字串最大長度設為5,因此把name的property加上[MaxLength]這個attribute:

using System.ComponentModel.DataAnnotations;

namespace MvcApplication3.Models
{
    public class Member
    {
        [Key]   
        public int uid { get; set; }

        [Required]
        [MaxLength(5)]
        public string name { get; set; }
    }
}

image

後端驗證

 


 

 

 

[MinLength]

說明:

  • 允許陣列或字串的最小長度

 

引用命名空間:

  • using System.ComponentModel.DataAnnotations;

 

範例:

  • 在此範例中把phone的字串最小長度設為6,因此把phone的property加上[MinLength]這個attribute:

using System.ComponentModel.DataAnnotations;


namespace MvcApplication3.Models
{
    public class Member
    {
        [Key]   
        public int uid { get; set; }

        [Required]
        [MaxLength(5)]
        public string name { get; set; }

        [MinLength(6)]
        public string phone { get; set; }
    
    }
}

image name的欄位已被設定了長度

 

image後端驗證

 


 

 

 

[EmailAddress]

說明:

  • 驗證電子郵件地址
 

引用命名空間:

  • using System.ComponentModel.DataAnnotations;

 

範例:

  • 在此範例中把email設定需要驗證是否為正確格式,因此把email的property加上[EmailAddress]這個attribute:

 

image 前端(JS)與後端驗證

 

image 把瀏覽器JS不啟用後,變成html5的驗證

 


 

 

 

[DisplayName]

說明:

  • 輸出顯示名稱

  • 當你輸出名稱不想使用欄位名稱時,就可以使用[DisplayName]來做設定。

 

引用命名空間:

  • using System.ComponentModel;

 

範例:

  • [DisplayName("姓名")]
  • 在此範例中把name的顯示名稱設定姓名,因此把name的property加上[DisplayName]這個attribute:

 


using System.ComponentModel;
using System.ComponentModel.DataAnnotations;


namespace MvcApplication3.Models
{
    public class Member
    {
        [Key]   
        public int uid { get; set; }

        [Required]
        [MaxLength(5)]
        [DisplayName("姓名")]
        public string name { get; set; }

        [MinLength(6)]
        public string phone { get; set; }

        [EmailAddress]
        public string email { get; set; }
    
    }
}

image在顯示頁面中則以更改

image

欄位名稱還是為原本的name

 


 

 

 

[Range]
 
說明:
  • 允許的數值範圍。

 

引用命名空間:

  • using System.ComponentModel.DataAnnotations;

 

範例:

  • [Range(50, 60)]
  • 在此範例中把weight的允許的數值範圍設定50~60,因此把weight的property加上[Range]這個attribute:

 


using System.ComponentModel;
using System.ComponentModel.DataAnnotations;


namespace MvcApplication3.Models
{
    public class Member
    {
        [Key]   
        public int uid { get; set; }

        [Required]
        [MaxLength(5)]
        [DisplayName("姓名")]
        public string name { get; set; }

        [MinLength(6)]
        public string phone { get; set; }

        [EmailAddress]
        public string email { get; set; }

        [Range(50, 60)]
        public int weight { get; set; }
    
    }
}

image

前端(JS)與後端都會驗證

 

image

因為.NET的int型別屬於實質型別是不允許NULL,因此轉換到資料庫後一樣也是NOT NULL

 


 

 

 

[Url]

說明:

  • 驗證網址格式

 

引用命名空間:

  • using System.ComponentModel.DataAnnotations;

 

範例:

  • 在此範例中把url設定要驗證網址格式,因此把url的property加上[Url]這個attribute:

 


using System.ComponentModel;
using System.ComponentModel.DataAnnotations;


namespace MvcApplication3.Models
{
    public class Member
    {
        [Key]   
        public int uid { get; set; }

        [Required]
        [MaxLength(5)]
        [DisplayName("姓名")]
        public string name { get; set; }

        [MinLength(6)]
        public string phone { get; set; }

        [EmailAddress]
        public string email { get; set; }

        [Range(50, 60)]
        public int weight { get; set; }

        [Url]
        public string url { get; set; }
    
    }
}

image

前端(JS)與後端驗證

 

image 把瀏覽器JS不啟用後,變成html5的驗證

 


 

 

 

自訂錯誤訊息(ErrorMessage)

說明:

  • 自訂錯誤時所產的的文字

 

 image

預設的錯誤訊息,不容易讓使用者了解  。

 

 

image

改成這樣,就比較容易了解。

範例:

  • [Range(50, 60,ErrorMessage="您的體重必須在50~60之間唷")]
  • [Url(ErrorMessage="網址不完整,例如:http://google.com.tw")]

 


using System.ComponentModel;
using System.ComponentModel.DataAnnotations;


namespace MvcApplication3.Models
{
    public class Member
    {
        [Key]   
        public int uid { get; set; }

        [Required]
        [MaxLength(5)]
        [DisplayName("姓名")]
        public string name { get; set; }

        [MinLength(6)]
        public string phone { get; set; }

        [EmailAddress]
        public string email { get; set; }

        [Range(50, 60,ErrorMessage="您的體重必須在50~60之間唷")]
        public int weight { get; set; }

        [Url(ErrorMessage="網址不完整,例如:http://google.com.tw")]
        public string url { get; set; }
    
    }
}

 

 

 

 

 


如有錯誤還請各位先進前輩們不吝嗇的指教,謝謝。