9.1、正向工程(Code First)

Code First 是目前基于敏捷模式构建数据库架构的最佳实践。

关于正向工程和逆向工程

EF Core 提供两种主要方法来保持 EF Core 模型和数据库架构同步。至于我们应该选用哪个方法,请确定你是希望以 EF Core 模型为准还是以数据库为准。

如果希望以 EF Core 模型为准,请使用正向工程(Code First)。 对 EF Core 模型进行更改时,此方法会以增量方式将相应架构更改应用到数据库,以使数据库保持与 EF Core 模型兼容。

如果希望以数据库架构为准,请使用逆向工程(Database First)。 使用此方法,可通过将数据库架构反向工程到 EF Core 模型来生成相应的 DbContext 和实体类型。

入门指南

第一步

Hoa.Core 项目层中添加 Test\Entites 文件夹,并添加 TestEntity.cs 文件键入以下代码:

using Hoa.Dependencies;
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace Hoa.Core.Test.Entities
{
    /// <summary>
    /// Test 表对应实体
    /// </summary>
    [Table("Test")] // 设置表名
    public class TestEntity : IEntity<int>
    {
        /// <summary>
        /// 添加Name列
        /// </summary>
        [Required]
        [MaxLength(32)]
        public string Name { get; set; }

        /// <summary>
        /// 添加CreatedTime列
        /// </summary>
        [Required]
        public DateTime CreatedTime { get; set; }
    }
}

第二步

Hoa.EntityFrameworkCore 项目层中的 HoaDbContext.cs 文件中添加 TestEntity 实体配置信息,代码如下:

using Hoa.Core.Test.Entities;
using Microsoft.EntityFrameworkCore;

namespace Hoa.EntityFrameworkCore
{
    public class HoaDbContext : DbContext
    {
        /// <summary>
        /// 添加 Test 实体配置
        /// </summary>
        public virtual DbSet<TestEntity> Tests { get; set; }

        public HoaDbContext(DbContextOptions<HoaDbContext> options) : base(options) { }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
        }
    }
}

第三步

Hoa.Web.Host 项目层中的 appsetting.json 中配置链接字符串,代码如下:

{
  ...
  // 添加数据库连接字符串
  "ConnectionStrings": {
    "HoaDatabase": "Server=localhost;Database=Hoa;User=sa;Password=000000;"
  },
  ...
}

第四步

1) 在 Visual Studio 2019 中打开 程序包管理控制台 (工具 -> Nuget 包管理器 -> 程序包管理控制台)

2) 在 程序包管理控制台 中,切换 默认项目Hoa.EntityFrameworkCore

3)输入以下命令:

PM> add-migration v0.0.1_add_test_table
Build started...
Build succeeded.
To undo this action, use Remove-Migration.
PM>

执行完毕后会自动在 Hoa.EntityFrameworkCore 中创建 Migrations 文件夹,同时也会自动打开当前版本的表更改程序。

4)接着提交命令到数据库中

PM> update-database
Build started...
Build succeeded.
Done.
PM> 

之后,查看数据库管理工具(如:SQLServer),已经创建了 Test 表。

多DbContext情况

有时,我们的数据库操作上下文不止一个 DbContext,这时,需要我们指定 -Context 参数,参数值可以是 DbContext 名称,也可以是完整命名空间路径。如:

PM> Add-Migration add_test_db -Context Hoa.EntityFrameworkCore.HoaDbContext
Build started...
Build succeeded.
To undo this action, use Remove-Migration.
PM> update-database -Context Hoa.EntityFrameworkCore.HoaDbContext
Build started...
Build succeeded.
Done.
PM> 

更多 正向工程(Code First)方式可以查看官方文档

最后更新于