Asp.net

如何添加 IDesignTimeDbContextFactory 的實現以添加遷移到 .Net core 2.0 應用程序?

  • April 19, 2018

我正在嘗試從 .NET Core 2.0 MVC 應用程序的包管理器控制台執行 Add-Migration InitialCreate 命令。在查看了所有可能的來源後,仍然無法通過錯誤描述解決問題:

PM> Add-Migration InitialCreate

在類“程序”上呼叫方法“BuildWebHost”時發生錯誤。在沒有應用程序服務提供商的情況下繼續。錯誤:找不到方法:‘System.Collections.Generic.Dictionary 2<System.String,System.Object> Microsoft.Extensions.Configuration.IConfigurationBuilder.get_Properties()'. System.IO.FileLoadException: Could not load file or assembly 'System.Diagnostics.DiagnosticSource, Version=4.0.2.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) File name: 'System.Diagnostics.DiagnosticSource, Version=4.0.2.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' at Microsoft.EntityFrameworkCore.Infrastructure.EntityFrameworkServicesBuilder.TryAddCoreServices() at Microsoft.Extensions.DependencyInjection.SqlServerServiceCollectionExtensions.AddEntityFrameworkSqlServer(IServiceCollection serviceCollection) at Microsoft.EntityFrameworkCore.Infrastructure.Internal.SqlServerOptionsExtension.ApplyServices(IServiceCollection services) at Microsoft.EntityFrameworkCore.Internal.ServiceProviderCache.ApplyServices(IDbContextOptions options, ServiceCollection services) at Microsoft.EntityFrameworkCore.Internal.ServiceProviderCache.<>c__DisplayClass4_0.<GetOrAdd>b__2(Int64 k) at System.Collections.Concurrent.ConcurrentDictionary2.GetOrAdd(TKey key, Func 2 valueFactory) at Microsoft.EntityFrameworkCore.DbContext..ctor(DbContextOptions options) at MvcMovie.Models.MvcMovieContext..ctor(DbContextOptions1 options) in C:\Users\Neha\source\repos\MvcMovie\MvcMovie\Data\MvcMovieContext.cs:line 12 at MvcMovie.ToDoContextFactory.CreateDbContext(字元串

$$ $$args)在 C:\Users\Neha\source\repos\MvcMovie\MvcMovie\ToDoContextFactory.cs:第 17 行 Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(Func 1 factory) at Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(String contextType) at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.AddMigration(String name, String outputDir, String contextType) at Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigrationImpl(String name, String outputDir, String contextType) at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.<>c__DisplayClass3_01.b__0() 在 Microsoft.EntityFrameworkCore.Design。 OperationExecutor.OperationBase.Execute(動作動作)

Could not load file or assembly 'System.Diagnostics.DiagnosticSource, Version=4.0.2.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

我的 Program.cs 看起來像:

public class Program
{
   public static void Main(string[] args)
   {
       var host = new WebHostBuilder()
           .UseKestrel()
           .UseContentRoot(Directory.GetCurrentDirectory())
           .UseIISIntegration()
           .UseStartup<Startup>()
           .UseApplicationInsights()
           .Build();

       host.Run();
   }

   public static IWebHost BuildWebHost(string[] args) =>
       new WebHostBuilder()
       .UseKestrel()
       .UseContentRoot(Directory.GetCurrentDirectory())
       .UseIISIntegration()
       .UseStartup<Startup>()
       .Build();
}

還添加了實現

IDesignTimeDbContextFactory

public class ToDoContextFactory : IDesignTimeDbContextFactory<MvcMovieContext>
{
   public MvcMovieContext CreateDbContext(string[] args)
   {
       var builder = new DbContextOptionsBuilder<MvcMovieContext>();
       builder.UseSqlServer("Server=(local);Database=MvcMovieContext;Trusted_Connection=True;MultipleActiveResultSets=true");
       return new MvcMovieContext(builder.Options);
   }
}

有人可以幫助我通過描述性的逐步過程將模型和實體框架工具添加到 .NET Core2.0 應用程序。

你需要改變你的班級計劃

public class Program
{
   public static void Main(string[] args)
   {
       BuildWebHost(args).Run();
   }

   public static IWebHost BuildWebHost(string[] args) =>
       WebHost.CreateDefaultBuilder(args)
           .UseStartup<Startup>()
           .Build();
}

此類隨 dotnet core 2.0.0更改

有同樣的問題。它發生在我將 Microsoft.AspNetCore.All 從 2.0.0-preview2-final 更新到 2.0.0 之後。猜猜它失敗的原因是我安裝了 .NET Core Preview 2 執行時。

EFCore 也得到了更新。所以請確保你有相同的 nuget 和執行時版本

**更新:**現在 .NET Core 執行時和 SDK 2.0 發布了https://www.microsoft.com/net/download/core。安裝後,您可以安全地將軟體包更新到 2.0.0

引用自:https://stackoverflow.com/questions/45656647