EF Codefirst(二)數據注釋


CodeFirst通過分析我們在代碼里編寫的類,以及類之間的關系生成數據庫表,以及表之間的各種關系。數據庫的表會涉及到主鍵,外鍵,列是否為空,列類型等等。 我們要通過怎樣的方式來暴露這些信息呢?
 
CodeFirst通過DataAnnotations(在 System.ComponentModel.DataAnnotations 命名空間中 )特性類標示這些信息。

常用的一些標識如下 

主鍵

     如果不存在符合EF默認規則的主鍵時,用key標注也可。個人不贊成這樣,遵守默認規則就好,免去不必要麻煩。
    public class Category
    {
        [ Key ]
        public string TrackingKey { get; set; }
        public string CategoryName { get; set; }
        public string BlogID { get; set; }
    }

自增長

如果主鍵是int類型,EF為默認設置為增長。但如果是GUID類型,則要手動的設置自增長
   public class User
    {
        [Key ,DatabaseGenerated (DatabaseGeneratedOption .Identity)]
        public Guid UserGuid { get; set; }
        public string UserName { get; set; }
    }
查看數據表的創建腳本,我們會發現多了這樣的一句話
ALTER   TABLE  [dbo] .  [Users]   ADD     DEFAULT  (  newsequentialid  ())   FOR [UserGuid]

必需 MaxLength 和 MinLength

    public class Category
    {
        [ Key ]
        public string TrackingKey { get; set; }
        [ Required ][MaxLength (30), MinLength(5)]
        public string CategoryName { get; set; }
        public string BlogID { get; set; }      
        public string Description { get; set; }
    }

NotMapped

Code First 約定指示具有受支持數據類型的每個屬性都要在數據庫中有表示。但在您的應用程序中並不總是如此。例如,您可以在 Blog 類中使用一個屬性來基於 Title 和 BloggerName 字段創建代碼。該屬性可以動態創建,無需存儲。您可以使用 NotMapped 注釋來標記不映射到數據庫的所有屬性。
並且這個標示還可以用於對整個類進行標示,那這個類也就不會被映射了。
 

ComplexType

 BlogDetails 作為 Blog 類中的一個屬性,將作為 Blog 對象的一部分被跟蹤。為了讓 Code First 認識到這一點,必須將 BlogDetails 類標記為 ComplexType。
 
     public class Blog
    {
        public string ID { get; set; }
        public string BlogName { get; set; }
        public string BlogAuthor { get; set; }
        public virtual List < Post> Posts { get ; set ; }      //導航屬性        
        public BlogDetails Detail { get; set; }
    }

    [ ComplexType]
    public class BlogDetails
    {
        public string BlogDescription { get; set; }
        public string CreateTime { get; set; }
    }

但是運行的時候卻報錯,提示Detail屬性,不可以為空 。原來,雖然復雜類型的每個屬性都可以為空,但當作為復雜屬性出現時,卻是不可以為空的,必須初始化!
需要修改如下
修改之后運行如下
會發現 復雜類型將自己的屬性並入了所屬類型,並以復雜類型名+屬性名作為新列名
 
數據注釋就到這里。喜歡歡迎推薦!
 


免責聲明!

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



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