当我 运行 我的项目时,EF Core 迁移会自动 运行 吗?
Is EF Core Migrations automatically ran when I run my project?
我创建了一个简单的 Web API 项目来测试 EF 迁移。我在程序包管理器控制台中调用了 Add-Migration Initial,并创建了初始迁移和文件夹。现在我 运行 我的项目,我期待它自动创建数据库。但它没有,它会抛出登录错误。
我调用了 Update-Database 并创建了数据库。
它不应该在访问上下文时自动创建数据库吗?当我添加一个新的迁移文件时怎么办?当它看到快照与数据库不同时(或者它是否使用迁移 table),它会在 运行 上自动更新我的数据库吗?
总而言之,问题是:
EF Core Migrations 能否在应用程序的 运行 上自动创建数据库?
EF Core Migrations 能否在检测到应用程序 运行 上的差异时自动更新数据库?
比较差异有什么用?实际的数据库结构和快照?
如果它自动更新,如果我手动删除迁移会怎样?数据库中的快照和迁移 table 会不同步,对吗?会发生什么?
如果无法在 运行 上自动 create/update,您如何将数据库和更改部署到您的客户?
EF 核心不支持Automatic Migrations
。所以你必须手动完成。
From the perspective of automatic migrations as a feature, we are not
planning to implement it in EF Core as experience has showed code-base
migrations to be a more manageable approach.
您可以在此处阅读全文:Not to implement Automatic Migrations
您可以使用 .NET Core CLI
查看如何操作
您可以 运行 在 Startup.cs
中自动迁移,方法是添加:
var dbFactory = new DataContextFactory();
var dbContext = dbFactory.Create(new DbContextFactoryOptions());
dbContext.Database.Migrate();
DataContextFactory
是实现 IDbContextFactory<DataContext>
.
的工厂
我创建了一个简单的 Web API 项目来测试 EF 迁移。我在程序包管理器控制台中调用了 Add-Migration Initial,并创建了初始迁移和文件夹。现在我 运行 我的项目,我期待它自动创建数据库。但它没有,它会抛出登录错误。
我调用了 Update-Database 并创建了数据库。
它不应该在访问上下文时自动创建数据库吗?当我添加一个新的迁移文件时怎么办?当它看到快照与数据库不同时(或者它是否使用迁移 table),它会在 运行 上自动更新我的数据库吗?
总而言之,问题是:
EF Core Migrations 能否在应用程序的 运行 上自动创建数据库?
EF Core Migrations 能否在检测到应用程序 运行 上的差异时自动更新数据库?
比较差异有什么用?实际的数据库结构和快照?
如果它自动更新,如果我手动删除迁移会怎样?数据库中的快照和迁移 table 会不同步,对吗?会发生什么?
如果无法在 运行 上自动 create/update,您如何将数据库和更改部署到您的客户?
EF 核心不支持Automatic Migrations
。所以你必须手动完成。
From the perspective of automatic migrations as a feature, we are not planning to implement it in EF Core as experience has showed code-base migrations to be a more manageable approach.
您可以在此处阅读全文:Not to implement Automatic Migrations
您可以使用 .NET Core CLI
查看如何操作您可以 运行 在 Startup.cs
中自动迁移,方法是添加:
var dbFactory = new DataContextFactory();
var dbContext = dbFactory.Create(new DbContextFactoryOptions());
dbContext.Database.Migrate();
DataContextFactory
是实现 IDbContextFactory<DataContext>
.