代码之家  ›  专栏  ›  技术社区  ›  Zozala

.net core 2实体框架迁移不起作用

  •  0
  • Zozala  · 技术社区  · 7 年前

    我在中添加数据库迁移时遇到问题。net core 2.0。 我收到以下错误:

    An error occurred while calling method 'BuildWebHost' on class 'Program'. Continuing without the application service provider. Error: One or more errors occurred. (Webpack dev middleware failed because of an error while loading 'aspnet-webpack'. Error was: Error: Cannot find module 'aspnet-webpack'
        at Function.Module._resolveFilename (module.js:469:15)
        at Function.Module._load (module.js:417:25)
        at Module.require (module.js:497:17)
        at require (internal/module.js:20:19)
        at Object.<anonymous> (C:\Users\Dries\AppData\Local\Temp\quzf2u2y.rt0:83:19)
        at __webpack_require__ (C:\Users\Dries\AppData\Local\Temp\quzf2u2y.rt0:20:30)
        at createWebpackDevServer (C:\Users\Dries\AppData\Local\Temp\quzf2u2y.rt0:62:26)
        at C:\Users\Dries\AppData\Local\Temp\00o3h05d.izo:114:19
        at IncomingMessage.<anonymous> (C:\Users\Dries\AppData\Local\Temp\00o3h05d.izo:133:38)
        at emitNone (events.js:86:13)
    Current directory is: D:\Projects\Jeroen Fiers\Projecten\Fiers\bin\MCD\Debug\netcoreapp2.0
    )
    Unable to create an object of type 'ApplicationDbContext'. Add an implementation of 'IDesignTimeDbContextFactory<ApplicationDbContext>' to the project, or see https://go.microsoft.com/fwlink/?linkid=851728 for additional patterns supported at design time.
    

    public class Program{
        public static void Main(string[] args)
        {
            BuildWebHost(args).Run();
        }
        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .Build();
    }
    

    奇怪的是,迁移以前(有一次)已经成功了。

    4 回复  |  直到 7 年前
        1
  •  0
  •   Zozala    7 年前

    天哪,这是个愚蠢的错误(我真的不明白)。

    我在使用命令 dotnet ef migrations add InitialCreate 像这样的链接sais https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/migrations

    这给出了发布的错误,但当我使用 Add-Migration InitialCreate 它很好用?

        2
  •  0
  •   hamid_reza hobab    7 年前

    例如,如果您的解决方案中有2个项目,则为:UiProject&数据项目

    首先将ui项目设置为启动。然后在powershell中转到您的DataAccess项目,然后:

    1: dotnet ef migrations add firstMigrate --startup-project ./UiProject
    2: dotnet ef database update --startup-project ./UiProject
    
        3
  •  0
  •   Darkseal    6 年前

    检查数据库中是否有一些DB初始化代码(例如数据种子设定方法) 启动。反恐精英 文件的 Configure() 方法:如果您这样做了,您可以通过从那里删除代码并将其移动到 程序反恐精英 文件的 Main() 方法如下:

    public static void Main(string[] args)
    {
        // REPLACE THIS:
        // BuildWebHost(args).Run();
    
        // WITH THIS:
        var host = BuildWebHost(args);
        using (var scope = host.Services.CreateScope())
        {
            // Retrieve your DbContext isntance here
            var dbContext = scope.ServiceProvider.GetService<ApplicationDbContext>();
    
            // place your DB seeding code here
            DbSeeder.Seed(dbContext);
        }
        host.Run();
    
        // ref.: https://docs.microsoft.com/en-us/aspnet/core/migration/1x-to-2x/
    }
    
    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .Build();
    

    此类问题是由于EF核心2中的事实造成的。x他们改变了 BuildWebHost 方法工作:现在它调用 Configure 中的方法 启动。反恐精英 文件,如果该方法包含一些数据库初始化代码,则可能会导致意外问题。

    存在的主要问题是,每当种子代码在第一个问题之前运行时,此类问题很可能会引发误导性异常 dotnet ef migrations add / dotnet ef database update 当数据库尚不存在时执行命令:之后,他们找到一个有效的数据库并在不引发任何异常的情况下完成工作。

    MS official EF Core 1.x to 2.x migration guide 而且 this blog post 我就这个话题写的。

        4
  •  0
  •   Jeremy Cook    4 年前

    当遇到这样的错误时,使用 -Verbose PowerShell中的标志或 --verbose 在终端中发现在启动和终止EF Core的管道期间抛出的代码(或者您正在使用的Nuget包)中的异常。它可能与DbContext相关,也可能与DbContext完全无关。

    Add-Migration MyMigration -Verbose
    

    dotnet ef migrations add MyMigration --verbose