9.3 翻譯系列:數據注解特性之Key【EF 6 Code-First 系列】


原文鏈接:http://www.entityframeworktutorial.net/code-first/key-dataannotations-attribute-in-code-first.aspx

 

EF 6 Code-First系列文章目錄:

 

 

Key特性應用於實體的一個屬性上面,使之成為鍵屬性,然后生成數據庫的時候,數據表中相應的列就會成為主鍵。默認的約束為名稱為ID或者實體名稱+ID的屬性,創建主鍵。Key特性重寫了默認的約定。

正如上面的代碼所示,我們在Student實體的StudentKey屬性上面,應用於Key特性,這樣就會重寫默認的約定,就會在Students表的StudentKey列上,創建一個主鍵:

Key特性可以應用於任何原始數據類型的屬性上,除了無符號整形。

 

 EF 6中:

在EF 6中 ,Key特性可以應用於實體的多個屬性上面,然后就可以在數據庫中,創建聯合主鍵。

EF Core不支持使用數據注解的Key特性,來創建聯合主鍵,在EFCore中你必須使用Fluent API中的HasKey方法,來創建聯合主鍵。

上面的代碼,將會在Students表中創建聯合主鍵【StudentKey和AdmissionNum】:

注意的是:Key特性,標識一個列生成的單一主鍵是自增主鍵,而復合主鍵不會生成自增列。

學習不動手,那就是耍流氓,無用功,我們自己動手試試:

1.創建一個名稱為EFAnnotationKey的控制台應用程序,安裝好EF 

 

 2.創建一個Student類:

 public class Student { public int StudentID { get; set; } public string Name { get; set; } public int Age { get; set; } public string Sex { get; set; } }

3.創建一個上下文類:

 public class EFDbContext:DbContext { public EFDbContext() : base("name=Constr") { } public DbSet<Student> Students { get; set; } }

4.App.config配置文件:【數據庫連接字符串】

 <!--數據庫連接字符串-->
  <connectionStrings>
    <add name="Constr" connectionString="Server=.;Database=EFAnnotationKeyDB;uid=sa;pwd=Password_1" providerName="System.Data.SqlClient"/>
  </connectionStrings>

5.測試代碼:

class Program { static void Main(string[] args) { using (var db = new EFDbContext()) { List<Student> lstStuModel = db.Students.ToList(); } Console.WriteLine("success"); Console.ReadKey(); } }

6.運行代碼:

 

 看看生成的數據庫:可以看到

1.默認生成的數據表名稱為Students,

2.默認的模式名為dbo,

3.默認將StudentID屬性映射為主鍵,並且主鍵默認是自增的。

4.字符串類型默認生成nvarchar(max),int類型默認生成not null的列

 

 

 

1.我們使用Key 特性來重寫一下默認的約定,修改Student實體:

 

 2.修改上下文類:

 

 3.運行程序:

看看生成的數據庫:【可以看到,生成一個StudentNumber主鍵列,並且是自增的】

 

 

 

現在看看復合主鍵列:【可以看到我們沒有使用Column指定兩個屬性的順序,先看看可以生成復合主鍵列不。】

運行程序:報錯了,可以看到,我們沒有指定兩個屬性的先后順序是不行的。

修改一下Student類:這里我們沒有按照索引的順序指定,運行看下:

 

 成功了,我們看下數據庫是啥樣的:

可以看到:

1.即使沒有按照索引屬性指定復合主鍵的順序,依然能生成數據庫以及表,順序是,優先按照指定的列的順序,其他沒有指定的屬性順序,是按照他們在實體中的先后順序,在數據庫中排列的。

2.生成的復合主鍵,都不是自增的。

 

 

再來看下這樣的情況,只對一個屬性列,設置順序,看看:

運行:

可以看到還是不行,必須同時指定列的順序。

 

綜上所述,我們可以總結如下【EF 數據注解Key特性】:

1.EF默認生成的主鍵是ID屬性列,或者名稱為實體名+ID的的屬性列,可以通過Key特性重寫。

2.生成單一主鍵列的時候,是自增的,而生成復合主鍵,都不是自增的

3.EF 生成復合主鍵,必須同時設置Key特性以及使用Column特性中的Order參數指定所有標志KEY屬性的順序。


免責聲明!

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



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