Entity Framework Core表名映射
表名映射
我們知道:如果是在默認(rèn)情況下,使用EFCore Code First的方式生成的表名跟數(shù)據(jù)上下文類(lèi)中定義的實(shí)體屬性的名稱(chēng)是一致的,例如:
public DbSet<Blog> Bloges123 { get; set; }
這里定義的屬性名稱(chēng)是Bloges123,那么最后數(shù)據(jù)庫(kù)中生成的表名也叫Bloges123??聪旅娴臏y(cè)試。
我們首先添加遷移,每次遷移都會(huì)生成一個(gè)對(duì)應(yīng)的遷移記錄類(lèi),代碼如下圖所示:
可以看到,這里顯示創(chuàng)建表的名稱(chēng)就是Bloges123。最后更新數(shù)據(jù)庫(kù),更新完成以后查看數(shù)據(jù)庫(kù)生成的表名:
可以看到:數(shù)據(jù)庫(kù)里面最終生成的表名就是配置的實(shí)體屬性的命名。如果我們不想使用自動(dòng)生成的表名,那該怎么辦呢?這時(shí)候就需要做表名映射了,在代碼里面設(shè)置最后生成的數(shù)據(jù)庫(kù)表名。
如果要做映射,需要在數(shù)據(jù)上下文類(lèi)中重寫(xiě)父類(lèi)的OnModelCreating方法,里面有一個(gè)ToTable()的方法,里面的參數(shù)就是你想生成的表名,如下圖所示:
修改后的數(shù)據(jù)上下文類(lèi)代碼如下:
using EFCore.Model; using Microsoft.EntityFrameworkCore; namespace EFCore.Data { /// <summary> /// 數(shù)據(jù)上下文 /// </summary> public class EFDbContext : DbContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer("Data Source=.;Initial Catalog=EFTest;User ID=sa;Password=123456;"); } public DbSet<Blog> Blogs { get; set; } /// <summary> /// 重寫(xiě)OnModelCreating方法,配置映射 /// </summary> /// <param name="modelBuilder"></param> protected override void OnModelCreating(ModelBuilder modelBuilder) { // 配置表名映射 modelBuilder.Entity<Blog>().ToTable("Blog"); base.OnModelCreating(modelBuilder); } } }
這樣設(shè)置完成以后,我們?cè)诖问褂脭?shù)據(jù)遷移的方式來(lái)生成數(shù)據(jù)庫(kù),看看最終結(jié)果。添加遷移以后生成的遷移記錄類(lèi):
可以看到:遷移記錄類(lèi)里面顯示生成的表名是我們自己配置的表名,然后更新數(shù)據(jù)庫(kù),查看數(shù)據(jù)庫(kù)表名:
這樣就完成了表名映射,最終生成的就是我們自己配置的表名。
注意:設(shè)置表名的時(shí)候有一個(gè)限制:表名最大長(zhǎng)度限制為128。
我們修改代碼,設(shè)置的表名長(zhǎng)度超過(guò)128看看效果:
var tableName = string.Join("", Enumerable.Repeat("t", 250).ToArray()); modelBuilder.Entity<Blog>().ToTable(tableName);
使用遷移的方式生成數(shù)據(jù)庫(kù)查看效果:
可以看到,在更新數(shù)據(jù)庫(kù)的時(shí)候報(bào)錯(cuò)了,提示超過(guò)了最大長(zhǎng)度。
到此這篇關(guān)于Entity Framework Core表名映射的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Entity?Framework?Core種子數(shù)據(jù)Data-Seeding
- Entity?Framework?Core生成數(shù)據(jù)庫(kù)表
- 對(duì)Entity?Framework?Core進(jìn)行單元測(cè)試
- Entity?Framework?Core實(shí)現(xiàn)Like查詢(xún)?cè)斀?/a>
- Entity Framework Core中執(zhí)行SQL語(yǔ)句和存儲(chǔ)過(guò)程的方法介紹
- Entity Framework Core批處理SQL語(yǔ)句
- Entity Framework Core實(shí)現(xiàn)軟刪除與查詢(xún)過(guò)濾器
- Entity Framework Core生成列并跟蹤列記錄
- Entity?Framework?Core關(guān)聯(lián)刪除
相關(guān)文章
MVC HtmlHelper擴(kuò)展類(lèi)(PagingHelper)實(shí)現(xiàn)分頁(yè)功能
這篇文章主要為大家詳細(xì)介紹了MVC HtmlHelper擴(kuò)展,實(shí)現(xiàn)分頁(yè)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05Entity?Framework?Core生成數(shù)據(jù)庫(kù)表
這篇文章介紹了Entity?Framework?Core生成數(shù)據(jù)庫(kù)表的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03Asp.Net Core中基于Session的身份驗(yàn)證的實(shí)現(xiàn)
這篇文章主要介紹了Asp.Net Core中基于Session的身份驗(yàn)證的實(shí)現(xiàn)2018-09-09asp.net 獲取指定文件夾下所有子目錄及文件(樹(shù)形)
asp.net獲取指定文件夾下所有子目錄及文件,現(xiàn)在有asp.net的站的就是用這樣的原理顯示文件的2008-07-07.NET CORE中使用AutoMapper進(jìn)行對(duì)象映射的方法
這篇文章主要給大家介紹了關(guān)于.NET CORE中使用AutoMapper進(jìn)行對(duì)象映射的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用.NET CORE具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04Asp.net動(dòng)態(tài)生成html頁(yè)面的方法分享
這篇文章介紹了Asp.net動(dòng)態(tài)生成html頁(yè)面的方法,有需要的朋友可以參考一下2013-10-10asp.net的web頁(yè)面(aspx)數(shù)據(jù)量過(guò)多時(shí)提交失敗對(duì)策
asp.net的web頁(yè)面,數(shù)據(jù)量過(guò)多時(shí)提交失敗的情況想必有很多朋友都有遇到過(guò)吧,下面與大家分享下詳細(xì)的解決方法2013-05-05.NET Core單文件發(fā)布靜態(tài)編譯AOT CoreRT的方法詳解
這篇文章主要給大家介紹了關(guān)于.NET Core單文件發(fā)布靜態(tài)編譯AOT CoreRT的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07