本節咱們只介紹在EF中比較常見的映射數據庫
默認狀況下能夠不配置表名,咱們的模型名稱將會做爲數據庫的表名。可是大部分項目會要求數據庫表名稱的規範,例如咱們要將模型 User 在數據庫中映射爲 Users,那麼咱們能夠這麼作,在派生類上下文中的 OnModelCreating 中進行以下定義:ui
modelBuilder.Entity<User>().ToTbale("Users");
表的主鍵咱們通常習慣使用 Id 或者以 Id 結尾的方式來命名,EF默認狀況下會將 Id 或以 Id 結尾的屬性做爲主鍵,若是二者都存在的話,默認會以 Id 做爲主鍵。可是,還存在以下幾種狀況:code
針對上面兩種狀況,咱們分別進行以下配置:ci
//設置聯合主鍵 modelBuilder.Entity<User>().HasKey(k => new { Id=k.Id, UserId=k.UserId }); //手動分配主鍵值 modelBuilder.Entity<User>().HasKey(k => k.Id).Property(p => p.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
DatabaseGeneratedOption 是枚舉類型,值以下:字符串
值 | 說明 |
---|---|
Identity | 標識列 |
Computed | 計算列 |
None | 手動分配值 |
數據庫中的數值類型有不少種,C#中也有不少數值類型,可是咱們沒法直接將C#中的數值類型轉換爲數據庫中的數值類型。那麼怎麼將C#數值類型映射爲數據庫數值類型呢?這裏咱們以 C# float 爲例,來看一下代碼:string
modelBuilder.Entity<User>().Property(p=>p.Float);
經過上面的代碼,咱們將 C# float 類型映射爲了數據庫的 real 類型。下表是C#數值類型對應的數據庫的數值類型:it
C#數值類型 | 數據庫數值類型 |
---|---|
int | int |
double | float |
float | real |
decimal | decimal(18,2) |
Int64 | bigint |
咱們看到上表中有一個C#數值類型 decimal 對應的數據庫數值類型是 decimal(18,2) ,括號中的2表明小數點後保留2位,可是在一些狀況下咱們須要保留小數點後面N位,這時咱們能夠這麼作:io
modelBuilder.Entity<User>().Property(p=>p.Money).HasPrecision(18,4);
當咱們未對string類型的屬性配置映射時,默認的數據庫類型是 nvarchar(max),可是大部分狀況下不會使用這個默認的映射。舉幾個例子來說解一下怎麼來改變這個默認映射。table
//設置Name屬性在數據庫映射不可爲空 modelBuilder.Entity<User>().Property(p=>p.Name).IsRequired();
//設置Birthday屬性在數據庫映射可爲空 modelBuilder.Entity<User>().Property(p=>p.Birthday).IsOptional();
EF中的日期類型在數據庫中默認映射爲Date,可是數據庫中的日期類型還有不少,而且有時候咱們須要將日期類型映射爲數據庫其餘類型,那麼咱們該怎麼作呢?這裏咱們以映射爲 DateTime 爲例:class
modelBuilder.Entity<User>().Property(p=>p.CreateDateTime).HasColumnType("DATETIME");
注:數值類型和日期類型屬於值類型,所以咱們不須要經過 IsRequired 來配置映射字段不可爲空,由於默認就是不爲空的。可是能夠經過 IsOptional 設置可爲空。