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 => Blog
        foreach (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_Id
        foreach (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_Test
        foreach (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_Test
        foreach (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);

您可以看到生成数据库对象名称遵循的命名约定。

本文转自  zddnd   51CTO博客,原文链接:http://blog.51cto.com/13013666/1949227
相关文章
|
存储 开发框架 .NET
Entity Framework基础01
Entity Framework基础01
220 0
Entity Framework基础01
|
API
Entity Framework 5.0基础系列
1.Entity Framework简介 http://www.cnblogs.com/aehyok/p/3315991.html 2.Entity Framework DBFirst尝试http://www.
884 0
|
数据库
Entity Framework Core介绍(1)
介绍 Entity Framework (EF) Core 是轻量化、可扩展和跨平台版的常用 Entity Framework 数据访问技术。 EF Core 可用作对象关系映射程序 (O/RM),以便于 .NET 开发人员能够使用 .NET 对象来处理数据库,这样就不必经常编写大部分数据访问代码了。
1052 0
|
数据库 容器
Entity Framework Core(3)-配置DbContext
设计时 DbContext 配置 EF Core 设计时工具如迁移需要能够发现和创建的工作实例DbContext以收集有关应用程序的实体类型以及它们如何映射到数据库架构的详细信息的类型。 此过程可以为自动,只要该工具可以轻松地创建DbContext,会将其配置同样到它如何将配置在运行时的方式。
987 0
|
XML 存储 数据库连接
Entity Framework学习笔记——edmx文件
上文简单介绍了一下Entity FrameWork,这里说一下EF的核心——edmx文件。 在VisualStudio中建立edmx文件(此例环境为VisualStudio2012)
Entity Framework学习笔记——edmx文件
|
数据库
Entity Framework ModelFirst尝试
前言 Model First我们称之为“模型优先”,这里的模型指的是“ADO.NET Entity Framework Data Model”,此时你的应用并没有设计相关数据库,在Visual Studio中我们通过设计对于的数据模型来生成数据库和数据类。
784 0
entity framework使用技巧
1、无需先查询数据的修改方法   // 将创建的data实体添加到ObjectContext db.Data.Attach(data); // 手动设置状态为修改 db.ObjectStateManager.
795 0
|
SQL 数据库
Entity Framework 小知识(二)
Entity Framework 小知识(二)
198 0
|
数据库
Entity Framework DBFirst尝试
前言 “Database First”模式我们称之为“数据库优先”,前提是你的应用已经有相应的数据库,你可以使用EF设计工具根据数据库生成数据数据类,你可以使用Visual Studio模型设计器修改这些模型之间对应关系。
802 0
|
Java .NET 开发框架
Entity Framework介绍
Entity Framework The Entity Framework is a set of technologies in ADO.NET that helps fill in the space between object-oriented development (objects) and databases.
827 0

热门文章

最新文章