原文地址:http://www.entityframeworktutorial.net/code-first/table-dataannotations-attribute-in-code-first.aspx
EF 6 Code-First系列文章目錄:
- 1 翻譯系列:什么是Code First(EF 6 Code First 系列)
- 2.翻譯系列:為EF Code-First設置開發環境(EF 6 Code-First系列)
- 3.翻譯系列:EF Code-First 示例(EF 6 Code-First系列)
- 4.翻譯系列:EF 6 Code-First默認約定(EF 6 Code-First系列)
- 5.翻譯系列:EF 6中數據庫的初始化(EF 6 Code-First 系列)
- 6.翻譯系列:EF 6 Code-First中數據庫初始化策略(EF 6 Code-First系列
- 7.翻譯系列:EF 6中的繼承策略(EF 6 Code-First 系列)
- 8.翻譯系列: EF 6中配置領域類(EF 6 Code-First 系列)
- 9.翻譯系列:EF 6以及EF Core中的數據注解特性(EF 6 Code-First系列)
- 9.1 翻譯系列:數據注解特性之----Table【EF 6 Code-First 系列】
- 9.2 翻譯系列:數據注解特性之---Column【EF 6 Code First系列】
- 9.3 翻譯系列:數據注解特性之Key【EF 6 Code-First 系列】
- 9.4 翻譯系列:EF 6以及 EF Core中的NotMapped特性(EF 6 Code-First系列)
- 9.5 翻譯系列:數據注解之ForeignKey特性【EF 6 Code-First系列】
- 9.6 翻譯系列:數據注解之Index特性【EF 6 Code-First系列】
- 9.7 翻譯系列:EF數據注解特性之--InverseProperty【EF 6 Code-First系列】
- 9.8 翻譯系列:數據注解特性之--Required 【EF 6 Code-First系列】
- 9.9 翻譯系列:數據注解特性之--MaxLength 【EF 6 Code-First系列】
- 9.10 翻譯系列:EF數據注解特性之StringLength【EF 6 Code-First系列】
- 9.11 翻譯系列:數據注解特性之--Timestamp【EF 6 Code-First系列】
- 9.12 翻譯系列:數據注解特性之ConcurrencyCheck【EF 6 Code-First系列】
- 10.翻譯系列:EF 6中的Fluent API配置【EF 6 Code-First系列】
- 10.1.翻譯系列:EF 6中的實體映射【EF 6 Code-First系列】
- 10.2.翻譯系列:使用Fluent API進行屬性映射【EF 6 Code-First】
- 11.翻譯系列:在EF 6中配置一對零或者一對一的關系【EF 6 Code-First系列】
- 12.翻譯系列:EF 6 中配置一對多的關系【EF 6 Code-First系列】
- 13.翻譯系列:Code-First方式配置多對多關系【EF 6 Code-First系列】
- 14.翻譯系列:從已經存在的數據庫中生成上下文類和實體類【EF 6 Code-First系列】
- 15.翻譯系列:EF 6中的級聯刪除【EF 6 Code-First 系列】
- 16.翻譯系列:EF 6 Code -First中使用存儲過程【EF 6 Code-First系列】
- 17.翻譯系列:將Fluent API的配置遷移到單獨的類中【EF 6 Code-First系列】
- 18.翻譯系列:EF 6 Code-First 中的Seed Data(種子數據或原始測試數據)【EF 6 Code-First系列】
- 19.翻譯系列:EF 6中定義自定義的約定【EF 6 Code-First約定】
- 20.翻譯系列:Code-First中的數據庫遷移技術【EF 6 Code-First系列】
- 20.1翻譯系列:EF 6中自動數據遷移技術【EF 6 Code-First系列】
- 20.2.翻譯系列:EF 6中基於代碼的數據庫遷移技術【EF 6 Code-First系列】
- 21.翻譯系列:Entity Framework 6 Power Tools【EF 6 Code-First系列】
Table特性可以應用於一個領域類上面,用來在數據庫中生成相應名稱的數據表。它重寫了EF 6和 EF Code 中默認的約定,根據默認約定,EF 6和EF Core創建的表的名稱是實體名稱+s(或者es),並且創建的數據表的列名稱和實體屬性名稱一樣。
Table Attribute: [Table(string name, Properties:[Schema = string])
name:數據表的名稱
Schema:數據庫的模式名稱【可選的】
在上面的例子中,Table特性應用於Student實體上。所以,EF將會重寫默認的約定,並且創建名稱為StudentMaster的數據表,而不是名稱為Students的數據表,例如:
使用Schema
屬性來指定數據表的模式名稱:
EF將會創建StudentMaster表,並且指定表的模式名為Admin:
好了,理論介紹完了,我們動手實踐一下:
1.創建一個控制台應用程序,名稱為:EFAnnotationTable
2.安裝EF:【install-package entityframework -version 6.2.0】
3. 創建一個Student類:
public class Student { public int StudentID { get; set; } public string Name { get; set; } public int Age { get; set; } public string Email { get; set; } }
4.創建一個上下文類EFDbContext:【base中的name=后面名稱要和SQL連接字符串名稱一樣。】
public class EFDbContext:DbContext { public EFDbContext() : base("name=Constr") { } public DbSet<Student> StudentTable { get; set; } }
5.配置文件中配置連接字符串:
<connectionStrings>
<add name="Constr" connectionString="Server=.;Database=EFAnnotationTableDB;uid=sa;pwd=Password_1" providerName="System.Data.SqlClient"/>
</connectionStrings>
6.測試程序:
class Program { static void Main(string[] args) { using (var db = new EFDbContext()) { List<Student> lstStuModel= db.StudentTable.ToList(); } Console.WriteLine("success"); Console.ReadKey(); } }
運行程序:【出現success字樣,說明已經生成數據庫和數據表成功了!】
我們看一下數據庫:
這就是EF默認為我們生成的數據表,可以看到,表名稱默認是實體名稱+s后綴。
現在我們使用數據注解:修改一下Student實體:
運行之前,我們需要先手動刪除一下剛才生成的數據庫和數據表。因為這里我沒有啟用數據庫遷移技術。
可以看到生成的表名是:StudentInfo了。現在我們使用數據注解,指定一下表的模式名稱:
算了,我還是修改一下代碼:免得每次測試都要手動刪除數據庫。【PS:這里直接運行就會報下圖錯誤:】
我們改一下:上下文類的代碼,
然后運行:
成功了,我們看下數據庫:
看到了么,模式名,變成了我們設定的My.好了,這一篇數據注解之Table,就介紹完了,大家有不明白的可以留言,我會一一回復,謝謝支持!