2017-10-08 15 views
0

Mit EF Core 2.0 versuche ich IDesignTimeDbContextFactory zu implementieren, Verbindungszeichenfolge aus der Datei appsettings.json zu lesen. Ich bin immer auf Abruf folgende FehlerEF Core 2.0 IDesignTimeDbContextFactory Implementierungsprobleme

Configuration setBasePath keine Definition von setBasePath enthalten()

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); 
    } 
} 

Zweite Frage: Mit diesem Ansatz ist es notwendig, dotnet CLI zu verwenden, wird diese Methode aufgerufen, wenn ich meine Migrationsbefehle nur mit "Package Manager Console" ausführe?

Antwort

0

Die Methode SetBasePath() ist eine Erweiterungsmethode in FileExtensions.

Sie können es erhalten, indem Sie das Microsoft.Extensions.Configuration.FileExtensions Paket hinzufügen. Ich sehe, Sie haben AddJsonFile() auch, so dass Sie stattdessen Microsoft.Extensions.Configuration.Json verwenden möchten, da es auf FileExtensions (d. H. Sie erhalten beide) abhängt.

Auf der zweiten Frage, die Sie nicht brauchen die IDesignTimeDbContextFactory<>, aber ohne, wenn Sie die Verbindungszeichenfolge an einer anderen Stelle, die während der Entwurfszeit zugänglich ist, müssen. Ein anderes Beispiel ist, es im Konstruktor Ihrer DbContext zu setzen, aber das hat verschiedene Designprobleme, wie wenn Sie eine Test-vs-Produktionsinstanz ausführen möchten. Wenn Sie keine Factory haben, wird DbContext mit einem öffentlichen parameterlosen Konstruktor erstellt.