網站首頁 編程語言 正文
表名映射
我們知道:如果是在默認情況下,使用EFCore Code First的方式生成的表名跟數據上下文類中定義的實體屬性的名稱是一致的,例如:
public DbSet<Blog> Bloges123 { get; set; }
這里定義的屬性名稱是Bloges123,那么最后數據庫中生成的表名也叫Bloges123。看下面的測試。
我們首先添加遷移,每次遷移都會生成一個對應的遷移記錄類,代碼如下圖所示:
可以看到,這里顯示創建表的名稱就是Bloges123。最后更新數據庫,更新完成以后查看數據庫生成的表名:
可以看到:數據庫里面最終生成的表名就是配置的實體屬性的命名。如果我們不想使用自動生成的表名,那該怎么辦呢?這時候就需要做表名映射了,在代碼里面設置最后生成的數據庫表名。
如果要做映射,需要在數據上下文類中重寫父類的OnModelCreating方法,里面有一個ToTable()的方法,里面的參數就是你想生成的表名,如下圖所示:
修改后的數據上下文類代碼如下:
using EFCore.Model; using Microsoft.EntityFrameworkCore; namespace EFCore.Data { /// <summary> /// 數據上下文 /// </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> /// 重寫OnModelCreating方法,配置映射 /// </summary> /// <param name="modelBuilder"></param> protected override void OnModelCreating(ModelBuilder modelBuilder) { // 配置表名映射 modelBuilder.Entity<Blog>().ToTable("Blog"); base.OnModelCreating(modelBuilder); } } }
這樣設置完成以后,我們在次使用數據遷移的方式來生成數據庫,看看最終結果。添加遷移以后生成的遷移記錄類:
可以看到:遷移記錄類里面顯示生成的表名是我們自己配置的表名,然后更新數據庫,查看數據庫表名:
這樣就完成了表名映射,最終生成的就是我們自己配置的表名。
注意:設置表名的時候有一個限制:表名最大長度限制為128。
我們修改代碼,設置的表名長度超過128看看效果:
var tableName = string.Join("", Enumerable.Repeat("t", 250).ToArray()); modelBuilder.Entity<Blog>().ToTable(tableName);
使用遷移的方式生成數據庫查看效果:
可以看到,在更新數據庫的時候報錯了,提示超過了最大長度。
原文鏈接:https://www.cnblogs.com/dotnet261010/p/12370357.html
相關推薦
- 2022-04-15 Android開發Jetpack組件WorkManager用例詳解_Android
- 2022-12-29 python解決循環依賴的問題分析_python
- 2023-01-23 redis實現多級緩存同步方案詳解_Redis
- 2022-06-01 AndriodStudio利用ListView和數據庫實現簡單學生管理_Android
- 2022-08-05 python內置模塊之上下文管理contextlib_python
- 2022-11-17 一文詳解測試Python讀寫xml配置文件_python
- 2022-08-22 Docker安裝LNMP環境的詳細過程(可部署TP項目)_docker
- 2023-07-24 前端常見狀態碼
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支