Entity Framework 使用 DbUp 代码优先
Entity Framework Code First with DbUp
我正在考虑使用 Entity Framework 6
Code First
进行数据库交互,同时使用 DbUp
进行数据库架构更新。问题是出于某些原因我不想使用 EF
迁移。所以,我达到的工作流程是:
- 更改模型(添加
POCO
、更改属性等)
- 运行
Add-Migration temp_file
在 Visual Studio Package Manager Console
- 运行
Update-Database -Script
在 Visual Studio Package Manager Console
- 获取生成的
sql
脚本,包括在 table __MigrationHistory
中插入新行
- 创建一个新的
.sql
文件并通过生成的脚本
- 删除
temp_file
- 运行 DbUp
它在本地和生产服务器上都能完美运行,但是我觉得 table 每次生成新迁移时添加然后删除 temp_file
感觉不舒服(我希望有一种方法永久停止将 temp_file
添加到解决方案中。)。
所以问题:
有没有更好的方法来使用 Entity Framework
使用 DbUp
进行数据库迁移?
在大多数情况下,您可以使用 Automatic Code First Migrations:
跳过步骤 (2) 和 (6)
Automatic Migrations allows you to use Code First Migrations without having a code file in your project for each change you make.
默认情况下禁用自动迁移。您可以通过在数据库迁移配置中添加以下内容来启用它们 class 构造函数(通常称为 Configuration
并位于 Migrations
子文件夹下):
AutomaticMigrationsEnabled = true;
需要考虑的一些事项:
- 文档指出自动迁移有局限性,因此请注意。
- 您可以混合使用自动迁移和基于代码的迁移(换句话说,建议的方法和您当前的方法)。
- 您当前方法的好处是您可以预览 EF 如何解释您的模型更改以及 add/remove/change 部分迁移代码。
- 自动迁移在 EF Core 中已被弃用(不存在),因此在 EF Core 项目中,您必须使用与当前方法类似的方法,除了您必须保留生成的迁移代码文件。
也许这个答案为时已晚,但也许它也会有用。我完全理解您将 Entity Framework 用作 ORM 的方法和用于架构迁移的不同工具。但是选择 DbUp 需要您手动编写 SQL 或如上所述生成它们。我建议考虑使用 FluentMigrator 而不是 DbUp。它遵循相同的理念,但允许使用流畅的语法在 C# 中编写迁移步骤。另外,它支持降级,即回滚。
这是一个例子:
[Migration(1)]
public class CreateUserTable : Migration
{
public override void Up()
{
Create.Table("Users");
}
public override void Down()
{
Delete.Table("Users");
}
}
我正在考虑使用 Entity Framework 6
Code First
进行数据库交互,同时使用 DbUp
进行数据库架构更新。问题是出于某些原因我不想使用 EF
迁移。所以,我达到的工作流程是:
- 更改模型(添加
POCO
、更改属性等) - 运行
Add-Migration temp_file
在Visual Studio Package Manager Console
- 运行
Update-Database -Script
在Visual Studio Package Manager Console
- 获取生成的
sql
脚本,包括在 table__MigrationHistory
中插入新行
- 创建一个新的
.sql
文件并通过生成的脚本 - 删除
temp_file
- 运行 DbUp
它在本地和生产服务器上都能完美运行,但是我觉得 table 每次生成新迁移时添加然后删除 temp_file
感觉不舒服(我希望有一种方法永久停止将 temp_file
添加到解决方案中。)。
所以问题:
有没有更好的方法来使用 Entity Framework
使用 DbUp
进行数据库迁移?
在大多数情况下,您可以使用 Automatic Code First Migrations:
跳过步骤 (2) 和 (6)Automatic Migrations allows you to use Code First Migrations without having a code file in your project for each change you make.
默认情况下禁用自动迁移。您可以通过在数据库迁移配置中添加以下内容来启用它们 class 构造函数(通常称为 Configuration
并位于 Migrations
子文件夹下):
AutomaticMigrationsEnabled = true;
需要考虑的一些事项:
- 文档指出自动迁移有局限性,因此请注意。
- 您可以混合使用自动迁移和基于代码的迁移(换句话说,建议的方法和您当前的方法)。
- 您当前方法的好处是您可以预览 EF 如何解释您的模型更改以及 add/remove/change 部分迁移代码。
- 自动迁移在 EF Core 中已被弃用(不存在),因此在 EF Core 项目中,您必须使用与当前方法类似的方法,除了您必须保留生成的迁移代码文件。
也许这个答案为时已晚,但也许它也会有用。我完全理解您将 Entity Framework 用作 ORM 的方法和用于架构迁移的不同工具。但是选择 DbUp 需要您手动编写 SQL 或如上所述生成它们。我建议考虑使用 FluentMigrator 而不是 DbUp。它遵循相同的理念,但允许使用流畅的语法在 C# 中编写迁移步骤。另外,它支持降级,即回滚。
这是一个例子:
[Migration(1)]
public class CreateUserTable : Migration
{
public override void Up()
{
Create.Table("Users");
}
public override void Down()
{
Delete.Table("Users");
}
}