Entity Framework Core 命名约定
注意:我使用的是 Entity Framework Core 2.0 (2.0.0-preview2-final)。正式版發(fā)布時(shí),功能可能存在變動(dòng)。Entity Framework 遷移允許從模型生成數(shù)據(jù)庫(kù),這意味著必須從類名和屬性名生成數(shù)據(jù)庫(kù)對(duì)象的名稱。對(duì)于大多數(shù)人來說使用默認(rèn)名稱是沒有問題的,但是,您的DBA可能會(huì)要求您使用特定的命名約定。例如,一些DBA希望表名大寫,或者列名使用表名為前綴。Entity Framework 允許逐個(gè)設(shè)置表名或列名:
protected override void OnModelCreating(ModelBuilder modelBuilder){modelBuilder.Entity<Blog>().ForSqlServerToTable("Blog"); }但是,寫這些代碼非常無聊并且容易出錯(cuò),不應(yīng)該逐個(gè)設(shè)置對(duì)像的名稱,您可以通過修改模型實(shí)現(xiàn)全局設(shè)置。事實(shí)上modelBuilder是可讀寫的,您可以迭代所有對(duì)象并更改其名稱。
public class BloggingContext : DbContext{ ?? ?public DbSet<Blog> Blogs { get; set; } ?
?? ? public DbSet<Post> Posts { get; set; }
?? ?
??? ?protected override void OnModelCreating(ModelBuilder modelBuilder) ? ?{ ? ?
??? ?? ?base.OnModelCreating(modelBuilder); ? ? ? ?// Singularize table name// Blogs => Blogforeach (var entityType in modelBuilder.Model.GetEntityTypes()){ ? ? ? ? ? ?// Add NuGet package "Humanizer" to use Singularize()entityType.Relational().TableName = entityType.Relational().TableName.Singularize();} ? ? ? ?// Prefix column names with table name// Id => Blog_Idforeach (var entityType in modelBuilder.Model.GetEntityTypes()){ ? ? ? ? ?
??? ?? ? ?foreach (var property in entityType.GetProperties()){property.Relational().ColumnName = entityType.Relational().TableName + "_" + property.Relational().ColumnName;}} ? ? ? ?// Rename Foreign Key// FK_Post_Blog_BlogId => FK_Post_Blog_BlogId_Testforeach (var entityType in modelBuilder.Model.GetEntityTypes()){ ? ? ? ? ?
??? ?? ? ? ?foreach (var property in entityType.GetProperties()){ ? ? ? ? ? ?
??? ?? ? ? ?? ?foreach (var fk in entityType.FindForeignKeys(property)){fk.Relational().Name = fk.Relational().Name + "_Test";}}} ? ? ? ?// Rename Indices// IX_Blog_Url => IX_Blog_Url_Testforeach (var entityType in modelBuilder.Model.GetEntityTypes()){ ? ? ? ? ?
??? ?? ? ? ?foreach (var index in entityType.GetIndexes()){index.Relational().Name = index.Relational().Name + "_Test";}}} }
在 Package Manager Console 中運(yùn)行以下命令:
Add-Migration NamingConvention Update-Database上面的命令將生成以下數(shù)據(jù)庫(kù)架構(gòu):
CREATE TABLE [dbo].[Blog] ([Blog_BlogId] INT ? ? ? ?? ?IDENTITY (1, 1) NOT NULL,[Blog_Url] ? ?NVARCHAR (450) NULL, ? ?CONSTRAINT [PK_Blog] PRIMARY KEY CLUSTERED ([Blog_BlogId] ASC) );
? ?CREATE UNIQUE NONCLUSTERED INDEX [IX_Blog_Url_Test] ? ?ON [dbo].[Blog]([Blog_Url] ASC) WHERE ([Blog_Url] IS NOT NULL);CREATE TABLE [dbo].[Post] ([Post_PostId] ?INT ? ? ? ? ? ?IDENTITY (1, 1) NOT NULL,[Post_BlogId] ?INT ? ? ? ? ? ?NOT NULL,[Post_Content] NVARCHAR (MAX) NULL,[Post_Title] ? NVARCHAR (MAX) NULL, ? ?CONSTRAINT [PK_Post] PRIMARY KEY CLUSTERED ([Post_PostId] ASC), ? ?CONSTRAINT [testFK_Post_Blog_BlogId] FOREIGN KEY ([Post_BlogId]) REFERENCES [dbo].[Blog] ([Blog_BlogId]) ON DELETE CASCADE);CREATE NONCLUSTERED INDEX [IX_Post_BlogId_Test] ? ?ON [dbo].[Post]([Post_BlogId] ASC);
您可以看到生成數(shù)據(jù)庫(kù)對(duì)象名稱遵循的命名約定。
相關(guān)文章:?
Entity Framework Core 生成跟蹤列
在Apworks數(shù)據(jù)服務(wù)中使用基于Entity Framework Core的倉(cāng)儲(chǔ)(Repository)實(shí)現(xiàn)
Entity Framework Core的貼心:優(yōu)雅處理帶默認(rèn)值的數(shù)據(jù)庫(kù)字段
Entity Framework Core 實(shí)現(xiàn)MySQL 的TimeStamp/RowVersion 并發(fā)控制
Entity Framework Core 軟刪除與查詢過濾器
原文地址:http://www.cnblogs.com/tdfblog/p/entity-framework-core-naming-convention.html
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺(tái)或掃描二維碼關(guān)注
總結(jié)
以上是生活随笔為你收集整理的Entity Framework Core 命名约定的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开源个.NetCore写的 - 并发请求
- 下一篇: SOA和微服务之间的区别