第十五节: EF的CodeFirst模式通过DataAnnotations修改默认协定
一. 簡介
1. DataAnnotations說明:EF提供以特性的方式添加到 domain classes上,其中包括兩類:
?A:System.ComponentModel.DataAnnotations命名空間下的特性是表中列的屬性的。
包括:Key、Required、MinLength和MaxLength、StringLength、Timestamp、ConcurrencyCheck。
B:System.ComponentModel.DataAnnotations.Schema命名空間下的特性是控制數據庫結構的。
包括:Table、Column、ForeignKey、NotMapped。
2. 特性介紹
?① Key :聲明主鍵
?② Required:非空聲明
?③ MinLength和MaxLength:設置string類型的最大長度和最小長度,數據庫的對應nvarchar
?④ StringLength:設置string類型的長度,數據庫對應nvarchar
?⑤ Timestamp:將byte[]類型設置為timestamp類型
?⑥ ConcurrencyCheck:并發檢查,執行update操作時,會檢查并發性(樂觀鎖)
?⑦ Table: 給代碼中的類換一個名來映射數據庫中的表名.(還可以設置表的架構名稱??[Table("myAddress", Schema = "Admin")]? ?)
?⑧ Column: 給代碼中類的屬性換一個名來映射數據庫中表的列名. (還可以設置列的類型、列在表中的顯示順序 ???[Column("myAddressName2", Order = 1, TypeName = "varchar")])
?⑨ ForeignKey:設置外鍵,特別注意里面的參數填寫什么.
?⑩ NotMapped: 類中的列名不在數據庫表中映射生成. (還可以只設置get屬性或者只設置set屬性,在數據庫中也不映射)
?另外還有:Index、InverseProperty、DatabaseGenerated、ComplexType 這四個都不常用,在這里就不多介紹了
(詳細可以看:http://www.entityframeworktutorial.net/code-first/dataannotation-in-code-first.aspx)
?
二. 代碼實戰
1 public class Student42 {3 [Key] //主鍵聲明4 public string studentKey { get; set; }5 6 [Required] //非空聲明7 public string stuName { get; set; }8 9 [MaxLength(10)] //最大長度 10 public string stuTxt1 { get; set; } 11 12 [MaxLength(10), MinLength(2)] //最大長度和最小長度 13 public string stuTxt2 { get; set; } 14 15 1702220102 //設置為時間戳 16 public byte[] rowVersion { get; set; } 17 18 [ConcurrencyCheck] //并發檢查 19 public string stuTxt3 { get; set; } 20 21 22 23 public virtual StudentAddress4 stuAddress4 { get; set; } 24 } 25 26 27 [Table("myAddress")] //設置類映射的數據庫表名 28 //[Table("myAddress", Schema = "Admin")] //設置類映射的數據庫表名和架構名 29 public class StudentAddress4 30 { 31 [ForeignKey("stu")] //設置外鍵(對應下面聲明的 stu) //這里符合 類名+id(忽略大小寫)的規則,所以自動生成主鍵 32 public string studentAddress4Id { get; set; } 33 34 [Column("myAddressName")] //設置映射數據庫中表的列名 35 public string stuAddressName { get; set; } 36 37 [Column("myAddressName2", Order = 1, TypeName = "varchar")] //設置映射數據庫中表的列名、順序、類型 38 public string stuAddrssName2 { get; set; } 39 40 [NotMapped]//不映射數據 41 public string addressNum { get; set; } 42 43 //不映射數據 44 public string txt1 { get { return stuAddrssName2;} } 45 46 //不映射數據 47 public string _txt2 = "1"; 48 public string txt2 { set { _txt2 = value; } } 49 50 public virtual Student4 stu { get; set; } 51 52 } 1 public class dbContext4 : DbContext2 {3 public dbContext4()4 : base("name=dbContext4")5 {6 7 }8 public DbSet<Student4> Student4 { get; set; }9 10 public DbSet<StudentAddress4> StudentAddress4 { get; set; } 11 12 13 protected override void OnModelCreating(DbModelBuilder modelBuilder) 14 { 15 base.OnModelCreating(modelBuilder); 16 } 17 } 1 <!--正宗的CodeFirst DataAnnotation--> 2 <add name="dbContext4" connectionString="data source=localhost;initial catalog=CodeFirstDB4;persist security info=True;user id=sa;password=123456;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" /> 3?
三. 總結
? DataAnnotations通過注解形式改變數據庫結構,非常靈活,當然EF還提供另外一種方式 Fluent API的形式,可以將一個類映射成多個數據庫表,還可以將配置寫成多個文件,方便控制。
?關于Fluent API更多用法,詳解下一個章節。
總結
以上是生活随笔為你收集整理的第十五节: EF的CodeFirst模式通过DataAnnotations修改默认协定的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浦发信用卡小浦闪用是什么?怎么样?
- 下一篇: 浦发银行闪付卡怎么用/支付