首页 > 解决方案 > Database.Migrate 方法

问题描述

我想为我的应用自动应用迁移,所以我使用了这种方法

Database.Migrate()

将上下文的任何挂起迁移应用到数据库。如果数据库尚不存在,将创建该数据库。

所以据我了解,当我运行我的应用程序时,它应该执行以下操作 1-如果数据库不存在则创建数据库 2-更新数据库 => 将迁移应用到数据库

但是当我运行我的项目时没有任何反应我手动编写命令来应用数据库并且它可以工作但我不知道问题出在哪里

这是我的代码

数据库上下文

using Microsoft.Extensions.Configuration;
using Microsoft.EntityFrameworkCore;
using brokerTest.Entites;

namespace brokerTest.Brokers.Sotrage
{
    public class StorageBroker : DbContext , IStorageBroker
    {
        private readonly IConfiguration configuration;
        public StorageBroker(IConfiguration configuration)
        {
            this.configuration = configuration;
            this.Database.Migrate();
        }
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder){

            var connectionString = this.configuration.GetConnectionString("DefaultConnection");
            optionsBuilder.UseSqlServer(connectionString);
        }

        public DbSet<User> Users { get; set; }
    }
}

启动.cs

services.AddDbContext<StorageBroker>();
            services.AddScoped<IStorageBroker, StorageBroker>();

应用程序设置文件.json

{
  "ConnectionStrings": {
    "DefaultConnection": "server=(localdb)\\MSSQLLocalDB;Database=testDb"
  },

安装包 .NET 6 , Microsoft.EntityFrameworkCore.Design 5.0.8 Microsoft.EntityFrameworkCore.SqlServer 5.0.8

标签: asp.netentity-frameworkasp.net-coreentity-framework-coreasp.net-core-mvc

解决方案


我发现根本没有调用 dbContext 类,因为我没有用任何控制器或类注入它

在我将 dbContext 注入到我的控制器类之后

 [ApiController]
    [Route("/home")]
    public class HomeController : Controller
    {
 private readonly IStorageBroker _storageBrodker;

        public HomeController(IStorageBroker storageBroker)
        {
            _storageBrodker = storageBroker;
        }

当我调用 route /home 类时,将应用迁移

我认为它被调用是因为我在服务中注册它但我不知道它在需要解决时被调用

Sasan 的评论在构建 iHost 对象时提供了另一种从 main 执行此操作的方法 https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/applying?tabs=dotnet-core-cli #apply-migrations-at-runtime


推荐阅读