2017-08-13 26 views
9

我正嘗試從.NET Core 2.0 MVC應用程序的包管理器控制檯中運行Add-Migration InitialCreate命令。如何添加IDesignTimeDbContextFactory的實現以將遷移添加到.Net核心2.0應用程序?

PM> Add-Migration InitialCreate 

An error occurred while calling method 'BuildWebHost' on class 'Program'. Continuing without the application service provider. Error: Method not found: '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.ConcurrentDictionary 2.GetOrAdd(TKey key, Func 2 valueFactory) at Microsoft.EntityFrameworkCore.DbContext..ctor(DbContextOptions options) at MvcMovie.Models.MvcMovieContext..ctor(DbContextOptions 1 options) in C:\Users\Neha\source\repos\MvcMovie\MvcMovie\Data\MvcMovieContext.cs:line 12 at MvcMovie.ToDoContextFactory.CreateDbContext(String[] args) in C:\Users\Neha\source\repos\MvcMovie\MvcMovie\ToDoContextFactory.cs:line 17 at 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_0 1.b__0() at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)

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應用程序。

+1

這怎麼可能連接字符串從應用程式閱讀.settings.json以便在這裏不再硬編碼? – borisdj

+0

找到從.json閱讀解決方案:https://stackoverflow.com/questions/45796776/get-connectionstring-from-appsettings-json-instead-of-being-hardcoded-in-net-co – borisdj

回答

9

您需要的dotnet核心改變你的類節目

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

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

該類changed 2.0.0

+0

修復了類似的問題我了。 –

+0

爲什麼我會在當前上下文中找不到「WebHost」錯誤? – RemarkLima

+3

我不知道如何,但我錯過了'Microsoft.AspNetCore'軟件包! – RemarkLima

2

有同樣的問題。 這發生在我將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

相關問題