使用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;运行我的迁移命令,将调用此方法。 ?
答案 0 :(得分:0)
SetBasePath()
方法是FileExtensions中的扩展方法。
您可以通过添加Microsoft.Extensions.Configuration.FileExtensions
包来获取它。我发现你也有AddJsonFile()
,所以你可能想要使用Microsoft.Extensions.Configuration.Json
,因为它取决于FileExtensions
(即你会得到两者)。
在第二个问题上,您不需要 IDesignTimeDbContextFactory<>
,但如果您需要在设计时可访问的其他位置设置连接字符串,则不需要。另一个例子是在DbContext
的构造函数中设置它,但是它有各种设计问题,比如你想运行测试与生产实例。
如果您没有工厂,则使用公共无参数构造函数创建DbContext
。