Entity Framework Core 命名约定
注意:我使用的是 Entity Framework Core 2.0 (2.0.0-preview2-final)。正式版发布时,功能可能存在变动。Entity Framework 迁移允许从模型生成数据库,这意味着必须从类名和属性名生成数据库对象的名称。对于大多数人来说使用默认名称是没有问题的,但是,您的DBA可能会要求您使用特定的命名约定。例如,一些DBA希望表名大写,或者列名使用表名为前缀。Entity Framework 允许逐个设置表名或列名:
protected override void OnModelCreating(ModelBuilder modelBuilder){modelBuilder.Entity<Blog>().ForSqlServerToTable("Blog");
}
但是,写这些代码非常无聊并且容易出错,不应该逐个设置对像的名称,您可以通过修改模型实现全局设置。事实上modelBuilder
是可读写的,您可以迭代所有对象并更改其名称。
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 中运行以下命令:
Add-Migration NamingConvention
Update-Database
上面的命令将生成以下数据库架构:
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);
您可以看到生成数据库对象名称遵循的命名约定。
相关文章:
Entity Framework Core 生成跟踪列
在Apworks数据服务中使用基于Entity Framework Core的仓储(Repository)实现
Entity Framework Core的贴心:优雅处理带默认值的数据库字段
Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制
Entity Framework Core 软删除与查询过滤器
原文地址:http://www.cnblogs.com/tdfblog/p/entity-framework-core-naming-convention.html
.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注
Entity Framework Core 命名约定相关推荐
- Entity Framework Core 2.0 全局查询过滤器
本博文翻译自: http://gunnarpeipman.com/2017/08/ef-core-global-query-filters/ Entity Framework Core 2.0 全局查 ...
- Entity Framework Core 执行SQL语句和存储过程
无论ORM有多么强大,总会出现一些特殊的情况,它无法满足我们的要求.在这篇文章中,我们介绍几种执行SQL的方法. 表结构 在具体内容开始之前,我们先简单说明一下要使用的表结构. public clas ...
- Entity Framework Core 批处理语句
在Entity Framework Core (EF Core)有许多新的功能,最令人期待的功能之一就是批处理语句.那么批处理语句是什么呢?批处理语句意味着它不会为每个插入/更新/删除语句发送单独的请 ...
- Entity Framework Core 2.0的新特性
虽然EF Core 2.0存在大量槽点,但是它也给出了不少亮点.在本文中,我们将介绍这次发布版的部分亮点. \\ 数据库表切分(Table Splitting) \\ ORM常被吐槽是总是对所请求数据 ...
- ABP官方文档翻译 9.2 Entity Framework Core
Entity Framework Core 介绍 DbContext 配置 在Startup类中 在模块PreInitialize方法中 仓储 默认仓储 自定义仓储 应用程序特定基础仓储类 自定义仓储 ...
- Entity Framework Core 2.0 使用入门
本文转载自作者:晓晨Master(李志强) 原文章地址 https://www.cnblogs.com/stulzq/p/7717873.html 一.前言 Entity Framework(后面简称 ...
- Entity Framework Core介绍(1)
介绍 Entity Framework (EF) Core 是轻量化.可扩展和跨平台版的常用 Entity Framework 数据访问技术. EF Core 可用作对象关系映射程序 (O/RM),以 ...
- oracle精简版_使用Entity Framework Core访问数据库(Oracle篇)
前言 哇..看看时间 真的很久很久没写博客了 将近一年了. 最近一直在忙各种家中事务和公司的新框架 终于抽出时间来更新一波了. 本篇主要讲一下关于Entity Framework Core访问ora ...
- 在 .NET Core 中如何让 Entity Framework Core 在日志中记录由 LINQ 生成的SQL语句
在开发中,我们想在调试中查看EF Core执行的sql语句,可以使用SQL Studio Manager Tools工具,另一种方式是使用EF Core提供的日志.在ASP.NET Core使用Ent ...
最新文章
- 商汤科技汤晓鸥:其实不存在AI行业,唯一存在的是“AI+“行业
- php pdo 怎么循环,php – 在循环内绑定PDO语句的参数
- [MATLAB学习笔记] global声明全部变量
- AtCoder AGC017C Snuke and Spells
- iOS之CALayer的CAEmitterLayer实现“红包雨”效果
- 基于android的lbs技术,基于Android的LBS应用研究
- 简练软考知识点整理-控制成本过程
- C# WebBrower1控件提示“该文档已被修改,是否保存修改结果”解决方法 .
- ASP.NET MVC 利用AreaRegistration进行Area区域模块化开发
- autojs命令代码大全_各个主流品牌手机的命令代码大全,安卓工程模式的指令大全!...
- jq 获取引入页面url_jQuery获取当前页面的URL信息
- php网站访问卡顿,网站反应慢,经常卡顿是什么原因?怎么解决?
- Servlet学习记录2
- 【工具】百度云破解版不用会员高速下载 分享
- current,present,recent 都是现在的,都是形容词
- 报错:org.springframework.cloud.gateway.support.NotFoundException: Unable to find instance for localhos
- 为什么 MongoDB 索引选择B-树,而 Mysql 选择B+树(精干总结)
- python---打包exe文件运行自动化
- windows10 打开所有文件夹弹出cmd.exe
- C++ BMI指数(身体质量指数) 计算程序