EF Core 2.0 IDesignTimeDbContextFactory实现问题

时间:2017-10-08 22:00:02

标签: entity-framework ef-core-2.0

使用EF Core 2.0我试图实现IDesignTimeDbContextFactory来从appsettings.json文件中读取连接字符串。我在调用SetBasePath

时遇到以下错误

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,如果我只是使用&#34;包管理器控制台&#34;运行我的迁移命令,将调用此方法。 ?

1 个答案:

答案 0 :(得分:0)

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

您可以通过添加Microsoft.Extensions.Configuration.FileExtensions包来获取它。我发现你也有AddJsonFile(),所以你可能想要使用Microsoft.Extensions.Configuration.Json,因为它取决于FileExtensions(即你会得到两者)。

在第二个问题上,您不需要 IDesignTimeDbContextFactory<>,但如果您需要在设计时可访问的其他位置设置连接字符串,则不需要。另一个例子是在DbContext的构造函数中设置它,但是它有各种设计问题,比如你想运行测试与生产实例。

如果您没有工厂,则使用公共无参数构造函数创建DbContext