2017-10-08 37 views
0

使用EF Core 2.0我試圖實現IDesignTimeDbContextFactory從appsettings.json文件讀取連接字符串。我正在值班以下錯誤SetBasePathEF Core 2.0 IDesignTimeDbContextFactory實現問題

ConfigurationBuilder不包含SetBasePath()的定義

public class DbContextFactory : IDesignTimeDbContextFactory<TestDbContext> 
{ 
    public TestDbContext CreateDbContext(string[] args) 
    { 
     IConfigurationRoot configuration = new ConfigurationBuilder() 
      .SetBasePath(Directory.GetCurrentDirectory()) 
      .AddJsonFile("appsettings.json") 
      .Build(); 
     var builder = new DbContextOptionsBuilder<TestDbContext>(); 

     var connectionString = configuration.GetConnectionString("DefaultConnection"); 

     builder.UseSqlServer(connectionString); 

     return new TestDbContext(builder.Options); 
    } 
} 

第二個問題:使用這種方法是使用的dotnet CLI有必要,將這種方法是如果我只是使用「軟件包管理器控制檯」運行我的遷移命令,稱爲?

回答

0

SetBasePath()方法是FileExtensions中的擴展方法。

您可以通過添加Microsoft.Extensions.Configuration.FileExtensions包得到它。我看到你也有AddJsonFile(),所以你可能想用Microsoft.Extensions.Configuration.Json,因爲它取決於FileExtensions(即你會得到)。

關於第二個問題,你不需要IDesignTimeDbContextFactory<>,但沒有如果你需要設置連接字符串在另一個地方,那就是在設計時使用。另一個例子是在你的DbContext的構造函數中設置它,但是如果你想運行一個測試vs生產實例,它會有各種設計問題。

如果你沒有一個工廠DbContext使用公用參數構造函數創建。